ГИБРИДНОЕ МОДЕЛИРОВАНИЕ МУЛЬТИАГЕНТНЫХ ПРОЦЕССОВ ПРЕОБРАЗОВАНИЯ РЕСУРСОВ
Аксенов К. А., Гончарова Н. В.,
С целью минимизации вычислений, выполняемых машиной вывода, предлагается использовать алгоритм, в котором учет модельного времени организован с использованием централизованного календаря событий. За основу взят алгоритм, предложенный в [33–34] и доказавший свою эффективность и быстродействие при решении практических задач в системе BPsim. В процессе работы машина вывода Ips взаимодействует со следующими очередями:
Календарь (Calendar) – очередь, содержащая упорядоченный по модельному времени перечень правил, которые должны выполнить одно из действий в определенный момент времени (проверить условие запуска Ca(t), выполнить действие AIN(t), действие AOUT(t)) или действие агента AAgent(t):
(2.37)
Список активизированных правил (Active_Rules) представляет собой перечень правил, которые должны в данный момент времени выполнить действие AOUT(t):
(2.38)
Рис. 2.6. Блок-схема работы ИА
Очередь правил (Wait&Lock_Rules), состоящая из «операций», «перекрестков», «источников» и «приемников» – правил, у которых будет выполняться в данный момент действие ACa(t), для правил с признаком прерывания и для действий агентов AAgent(t):
(2.39)
Для реализации методов ситуационного управления дополнительно в алгоритм введены следующие очереди:
Список агентов (Agent_list), перечень всех агентов, упорядоченный по приоритету. Агенты с наивысшим приоритетом обрабатываются в первую очередь. Приоритет изменяется от 0 до M, причем 0 – наивысший приоритет.
(2.40)
Для работы с очередями введем следующие операторы:
– добавление в S-ю очередь j-го действия правила;
– удаление из R-й очереди i-го действия правила которое было выполнено;
– перемещение o-го действия правила из Q-й очереди в W-ю;
Clear (Rules_QueueX) – очистка X-й очереди от элементов;
Count (Rules_QueueC) – функция, которая определяет количество элементов в очереди.
Для запоминания изменений рабочей памяти на текущем шаге введем очередь Changes_Queue, которая хранит перечень элементов Rps, изменение состояния которых произошло в текущем проходе машины вывода.
Execution (Rules_QueueW) – функция выполнения действий (изменение состояний ресурсов, механизмов, заявок и сообщений) правил W-й очереди. Последовательность обработки действий определяется приоритетом правил.
Машина вывода выполняет в момент запуска подготовительный этап – устанавливает значение модельного времени SysTime, равное нулю или моменту, задаваемому пользователем. В дальнейшем машина вывода циклически выполняет следующую последовательность шагов:
1. Определение текущего момента времени – определяется ближайший момент завершения активности по календарю:
В случае моделирования непрерывных процессов преобразования ресурсов SysTime = SysTime + ∆t, т. е. имеем пошаговый способ продвижения по модельному времени.
2. Определение списка активизированных событий для момента времени SysTime, в том числе:
1) список завершения активности экземпляров «перекресток» с заданным временем синхронизации:
2) список завершения активности экземпляров «операция»:
3) список завершения активности экземпляров «источник» и «приемник»:
3. Обработка списка агентов. Если в модели присутствует хоть один агент, то Планировщик последовательно, согласно приоритетам, совершает обход агентов (с передачей им полномочий), работает со списком Agent_List. При выполнении 5-го шага алгоритма агента (см. раздел 2.5.1) машина вывода помещает действия агента в очередь правил или в календарь (если действие не будет выполняться в текущем такте). Список выполнения действий экземпляров «агент», запланированных на данный момент системного времени, следующий:
4. Исполнение действий (соответствующих активизированным правилам и определенным на предыдущем шаге) и фиксация изменений в рабочей памяти. Завершение активизированных правил Execute (Active_Rules). Для экземпляров «источник», «приемник», «операция», «агент», условием запуска которых является функция от времени – определение (вычисление) следующего момента активизации и записи его в календарь:
Для экземпляров, у которых условие запуска содержит помимо временной составляющей иные условия, выполняется проверка условия запуска. В случае невыполнения условия запуска происходит перемещение из календаря в очередь правил:
Экземпляры, которые были завершены в данном такте, помещаются в очередь правил с целью дальнейшего анализа (экземпляры без условий).
5. Проверка рабочей памяти. Если состояние памяти изменилось Count (Changes_Queue) ≥ 0, то происходит переход к следующему шагу, иначе – переход на 10-й шаг.
6. Формирование очереди правил.
Если такт не первый, то машина вывода из списка изменившихся ресурсов и средств формирует очередь правила (используя Rules_of_use).
Если такт первый, то машина вывода выбирает все правила. Очередь формируется в следующей последовательности:
1) правила экземпляров «агент»:
2) правила экземпляров «перекресток»:
3) правила не активизированных и не попавших в календарь экземпляров «источник» и «приемник»:
4) пассивные правила (т. е. события, которые активизируются не в определенный момент времени, а при выполнении определенного условия) экземпляров «процесс» и «операция» и правила, находящиеся в очереди прерываний.
При формировании очереди внутри каждого типа, правила выстраиваются в соответствии с приоритетом.
7. «Обнуление» изменений области рабочей памяти (снятие признаков изменения состояния ресурсов и средств): Clear (Changes_Queue).
8. Обработка очереди правил и фиксация изменений в рабочей памяти Execute (Wait&Lock_Rules):
1) проверка исполнения правил экземпляров «агент», в случае выполнения правила – запуск активности «агента»;
2) проверка исполнения правил экземпляров «перекресток», в случае выполнения правила – запуск активности «перекрестка» (блокировка или удаление входных сообщений и формирование выходных);
3) проверка исполнения пассивных правил и тех, которые не попали в календарь экземпляров «источник» и «приемник», в случае выполнения правила – запуск активности (блокировка или удаление входных сообщений и формирование выходных);
4) проверка исполнения пассивных правил экземпляров «процесс» и «операция» и правил с признаком прерывания (с последующей блокировкой механизмов). В случае выполнения правила экземпляр будет активизирован (захват входных ресурсов и средств, расчет времени окончания работы) и правило «удаляется» из очереди.
Данные правила обрабатываются машиной вывода последовательно, начиная с правил высшего приоритета, в следующем цикле:
8.1. Текущее правило. Начало обработки правила. Если текущее правило имеет признак прерывания, то переходим к следующему шагу, если правило не имеет признака прерывания, то шаг 8.3, правил больше нет – шаг 2.
8.2. Условие запуска правила на входных ресурсах выполняется? Если да, то переходим к следующему шагу, иначе – переходим к шагу 8.8.
8.3. Условие запуска на средствах выполняется? Если да, то переходим к шагу 8.5, иначе – переходим к шагу 8.4.
8.4. Правило с абсолютным приоритетом (АП)? Если правило с АП, то переходим на шаг 8.6, иначе – шаг 8.8.
8.5. Обработка правила и фиксация изменений в рабочей памяти (РП). Переход к шагу 8.8.
8.6. Есть ли правила с меньшим приоритетом, использующие недостающие средства? Выбор активизированных правил с меньшим приоритетом и не имеющих признака прерывания, использующих необходимые средства в нужном количестве. Если такие правила есть, то происходит переход к шагу 8.7, иначе – переходим к шагу 8.8.
8.7. Выполнение прерывания, обработка правила АП и фиксация изменений в РП. Происходит прерывание правил, определенных на предыдущем этапе (установление признака прерывания). Выполнение правила с абсолютным приоритетом и фиксирование изменений в рабочей памяти.
8.8. Следующее правило. Если есть необработанные правила, то осуществляется переход к обработке текущего правила – к шагу 8.1, иначе – переходим к шагу 2.
Фиксация изменений рабочей памяти происходит вместе с активизацией события и записью момента окончания в календарь.
9. Изменился ли текущий момент? Определение разницы между ближайшим и текущим моментом времени в календаре. Если разница больше нуля, то происходит переход на следующий шаг (шаг 10), иначе – переход на шаг 2 (для завершения «нуле- вых» работ).
10. Проверка условия окончания имитации. В зависимости от режима остановки имитации:
● окончание времени;
● достижение определенного значения параметра;
● «Если делать НЕЧЕГО».
Если условие окончания имитации выполнено, то моделирование завершено, иначе – машина вывода переходит на следующий цикл (шаг 1).