Я сделал один ответ на этот вопрос, но теперь я хотел бы добавить еще один с более широкой точки зрения.
Похоже, что эта трудная проблема состоит в том, что каждый водитель основывает свои действия на ментальных предсказаниях того, что собираются делать другие водители. Например, когда я за рулем, я могу определить, когда автомобиль может подъехать передо мной, даже до того, как он это укажет, исходя из того, как он выстраивается в линию с разрывом между мной и автомобилем впереди. Он, в свою очередь, может сказать, что я видел его по тому факту, что я отступаю, чтобы освободить место для него, так что это нормально, чтобы подъехать. Хороший водитель берет много этих тонких подсказок, и это очень трудно смоделировать.
Итак, первый шаг - выяснить, какие аспекты реального вождения не включены в вышедшие из строя модели, и выяснить, как их вставить.
(Подсказка: все модели ошибочны, но некоторые модели полезны).
Я подозреваю, что ответ будет состоять в том, чтобы дать каждому симулированному водителю одну или несколько ментальных моделей того, что собирается делать каждый другой водитель. Это включает в себя запуск алгоритма планирования для водителя 2 с использованием нескольких различных предположений, которые драйвер 1 может сделать относительно намерений водителя 2. Тем временем водитель 2 делает то же самое с водителем 1.
Это такая вещь, которую очень сложно добавить в существующий симулятор, особенно если он написан на обычном языке, потому что алгоритм планирования вполне может иметь побочные эффекты, даже если его только в том виде, в котором он проходит структура данных. Но функциональный язык вполне может быть лучше.
Кроме того, взаимозависимость между драйверами, вероятно, означает, что где-то там есть точка фиксации, с которой ленивые языки, как правило, лучше справляются.