Я пытаюсь создать симуляцию дискретного события, в которой выполнение события не зависит от времени. Выбор следующего события зависит только от условий модели (в моем случае это человек), и они выполняются по одному.
Я нашел несколько дизайнов:
Планирование событий - Очередь событий сохраняется, и при каждом выполнении события новые события планируются или старые отменяются.
Сканирование активности - во время каждого цикла все события повторяются, и если текущее состояние человека удовлетворяет условиям события для выполнения, то это событие выполняется.
График событий - имейте график событий, и каждое ребро представляет условия перехода.
У меня есть следующие соображения по каждому из методов:
Планирование событий - Логика того, что событие должно быть добавлено, распределяется по событиям, что усложняет отслеживание. Более того, очередь сильно изменилась бы, и, поскольку она не основана на времени, вам придется перебирать всю очередь каждый раз, когда вы хотите внести изменения, чтобы найти события, которые нужно удалить (например, если вы хотите удалить событие B, когда ему предшествуют два события A).
Сканирование активности - его производительность может быть плохой, особенно если ему приходится перебирать множество событий, чтобы найти следующее для выполнения в каждом цикле.
График событий - Если график очень большой, его инициализация и настройка всех ребер могут стать громоздкими.
Я хотел узнать ваше мнение о том, какой метод может быть наиболее подходящим, и если да, то каким образом я мог бы учесть изложенные соображения. Возможно, совершенно другой дизайн подойдет.