Вопрос по actor, scala, simulation – Как разработать многоагентную симуляцию, управляемую часами
================================================================================================

Я хочу создать многоагентную имитационную модель для реального производства, чтобы оценить некоторые правила диспетчеризации. Имитация должна создавать журналы событий для оценки влияния времени правил диспетчеризации по сравнению с реальными журналами производственных событий.

How can I incorporate the 'current simulation time' into this kind of multi-agent, message passing intensive simulation?

Фон:  

Классическое моделирование дискретных событий (которое хорошо обрабатывает продвижение по времени) здесь не может быть применено, поскольку агенты в системе представляют собой относительно сложное поведение и требования к маршрутизации, а правила диспетчеризации требуют, чтобы они часто общались. Эта и другие сложности процесса исключают подход централизованного планирования.

В науке о производстве тысячи бумаг используют многоагентное моделирование для решения некоторых проблем, связанных с производством. Однако я еще не нашел документ, в котором подробно описываются внутренняя работа или детали реализации этих симуляций.

К сожалению, использование кратчайшего времени процесса для дискретного пошагового перехода в системе может оказаться невозможным, поскольку диапазон времени обработки составляет от 0,1 с до 24 часов. Есть вероятность, что мое моделирование будет использовано для последующих оценок в проекте, поэтому моделирование должно выполняться как можно быстрее - без опций для ночных прогонов моделирования.

Размер проблемы составляет около 500 ресурсов и 1000 - 10000 агентов продукта, большинство из них закончено и не участвует в дальнейшей коммуникации или использовании ресурсов.

Следовательно, в результате этой связи новые события могут побудить агента сделать что-то до его первоначального «следующего раза». событие придет. Например, агент в настоящее время заблокирован на ресурсе продолжительностью один час. Тем не менее, другому агенту с более высоким приоритетом нужен этот ресурс сразу же и просит первый агент освободить этот ресурс.

В каком-то смысле мне нужен способ создать гибрид классической симуляции агента передачи сообщений и симуляции дискретного события.

Я рассматривал посредника, который участвует в каждом сообщении, - маршрутизатор сообщений и средство контроля времени, которое отправляет сообщения и события отметки времени. Также агент-посредник хранит список времени следующего события для различных агентов. Тем не менее, я считаю, что должен быть лучший способ решения моей проблемы, поскольку концепция оказывает огромное давление на посредника.

**Update**

Это заняло некоторое время, но, похоже, мне удалось создать мини-фреймворк и объединить концепцию DES и агента в одну. Я уверен, что в этом нет ничего нового, но, по крайней мере, уникального:[http://code.google.com/p/tidra-framework/](https://code.google.com/p/tidra-framework/) если ты заинтересован.

parallel моделирование дискретных событий - агент-посредник, который вы планируете внедрить («участвует в каждом сообщении», «отправляет сообщения и события отметки времени»), похоже, сейчас выполняет работу имитатора дискретных событий. Вы можете сделать это масштабирование до желаемого размера проблемы, используя больше таких симуляторов параллельно, а затем использовать алгоритм синхронизации для поддержания причинности и т. Д. (См., Например,[эта книга](https://rads.stackoverflow.com/amzn/click/com/0471183830) для деталей). Конечно, это требует значительных усилий, и вам, возможно, будет лучше, если вы сначала попробуете последовательные алгоритмы.

Хорошим способом расширения классического представления DES о логических процессах (= агентах), которые взаимодействуют друг с другом через события, может быть объединение некоторых идей с другими формализмами, используемыми для описания систем дискретных событий, таких как[DEVS](https://en.wikipedia.org/wiki/DEVS), В DEVS каждый объект может указывать продолжительность, в которой он будет находиться в определенном состоянии (например, агент блокирует ресурс), и будет прерываться только входящими сообщениями (и затем соответствующим образом изменять свое состояние, например, агент освобождает ресурс).

Кстати, в каком смысле вы думаете, что агенты слишком сложны, чтобы их можно было обрабатывать с помощью моделирования дискретных событий? Если вы рассматриваете каждого агента как логический процесс, не имеет значения, насколько он сложен с точки зрения симуляции - или я здесь что-то не так понимаю?