Независимое от времени моделирование дискретных событий - PullRequest
1 голос
/ 05 февраля 2011

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

Я нашел несколько дизайнов:

  • Планирование событий - Очередь событий сохраняется, и при каждом выполнении события новые события планируются или старые отменяются.

  • Сканирование активности - во время каждого цикла все события повторяются, и если текущее состояние человека удовлетворяет условиям события для выполнения, то это событие выполняется.

  • График событий - имейте график событий, и каждое ребро представляет условия перехода.

У меня есть следующие соображения по каждому из методов:

  • Планирование событий - Логика того, что событие должно быть добавлено, распределяется по событиям, что усложняет отслеживание. Более того, очередь сильно изменилась бы, и, поскольку она не основана на времени, вам придется перебирать всю очередь каждый раз, когда вы хотите внести изменения, чтобы найти события, которые нужно удалить (например, если вы хотите удалить событие B, когда ему предшествуют два события A).

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

  • График событий - Если график очень большой, его инициализация и настройка всех ребер могут стать громоздкими.

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

Ответы [ 3 ]

2 голосов
/ 03 июля 2011

Вы можете попробовать библиотеку Javascript Discrete Event Simulation по адресу http://www.simjs.com.. Она поддерживает планирование событий и поток дискретного времени.Вы можете запланировать «события» на будущее или сделать так, чтобы они ожидали некоторый предикат, и регистрировали функции обратного вызова, которые будут вызываться, когда (смоделированное) время достигнет крайнего срока или предикат будет удовлетворен.

0 голосов
/ 24 июня 2015

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

http://www2.ing.unipi.it/~a009435/issw/extra/murata.pdf

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

0 голосов
/ 11 марта 2011

Ваш вопрос мне не очень понятен, но я думаю, что вы могли бы использовать систему имитации дискретных событий и игнорировать компонент времени.Вы можете запланировать все события «прямо сейчас», и это должно работать независимо от временной области.Я использую SimPy http://simpy.sourceforge.net/ и IMO на это способен.

...