ГИБРИДНОЕ МОДЕЛИРОВАНИЕ МУЛЬТИАГЕНТНЫХ ПРОЦЕССОВ ПРЕОБРАЗОВАНИЯ РЕСУРСОВ
Аксенов К. А., Гончарова Н. В.,
Математический аппарат используется для описания преобразователей (функций условия запуска, входа, выхода, обработки сообщений), целей, параметров, агентов.
Одним из основных требований к языку BPsim2 является требование простоты. Оно достигается за счет ограниченного числа введенных синтаксических конструкций, представленных в графическом виде. BPsim2 является языком структурного типа, что по общепринятому на данный момент мнению также облегчает разработку имитационных программ [3].
Синтаксические правила задаются с помощью графико-синтаксических диаграмм (интерфейсов), ориентированных на проблемную область процессов преобразования ресурсов.
Перечень операндов МАС преобразователей
В качестве операндов используются следующие множества: ресурсов RES; средств MECH; заявок Order; сигналов Sig; целей G; агентов Agent; сообщений Message; параметров P. Операторами задания операндов являются следующие: описания ресурса; описания средства; описания заявки; описания цели; описания агента; описания сообщения; описания параметра.
Операторы определения структуры процессов преобразования ресурсов. Для описания модели процессов преобразования ресурсов используются следующие операторы:
● декомпозиции (детализирует сложный процесс преобразования ресурсов на композицию более простых);
● внутренний оператор сопряжения элементов подмодели (в графическом виде задает причинно-следственные связи между элементами подмодели). Связь представляет вектор операндов, формируемый i-м элементом на выходе и потребляемый на входе j-м элементом подмодели;
● сопряжения подмоделей (задает в графическом виде причинно-следственные связи между элементами модели верхнего (k – 1)-го уровня декомпозиции процесса преобразования ресурсов и элементами подмоделей (k)-го уровня декомпозиции).
Операторы продукций процесса преобразования ресурсов следующие: задания условия запуска; задания входа; задания выхода; задания средства; задания длительности / интенсивности; задания приоритета.
Операторы продукций интеллектуального агента: задания условия ситуации; задания действия ситуации; задания целей; задания приоритета.
Для описания модели целей сложной системы используются следующие операторы: задания функции вычисления текущего значения цели; определения зоны значений цели.
Перечень математических операций, описывающих условия и действия продукций
В выражениях над операндами в BPsim2 используются следующие стандартные операции:
арифметические операции: «–» – унарный минус; «–» вычитание; «+» сложение; «*» – умножение; «/» – деление; «^» – возведение в степень;
логические операции: «?» – отрицание; «&» – конъюнкция; «|» – дизъюнкция;
операции отношения: «=» – равно; «><» – не равно; «>» – больше; «>=» – больше или равно; «<» – меньше; «<=» – меньше или равно;
присваивания «:=»;
кванторы: «-]» – существования; «\/» – всеобщности; «[-» – принадлежности; «~[-» – непринадлежности;
уточнения «#» (определение значения операнда пользователем во время эксперимента).
Дополнительные операции: генерация случайного значения «randomize()»; экспонента «exp»; логарифм натуральный «ln»; корень квадратный «sqrt»; целая часть от деления «!»; дробная часть от деления «$».
В выражениях могут использоваться скобки «(», «)», «[», «]».
Учитывая специфику процессов преобразования ресурсов и требования к простоте языка, операторные выражения в зависимости от принадлежности операндов к входам/выходам/механизмам/агентам при выполнении различных действий продукции (ActionCa, ActionIN, ActionLock, ActionUnLock, ActionOUT, ActionMech, ActionAgent) интерпретируются определенным образом. Зависимость интерпретации операторного выражения от действий приведена в табл. 3.1, где F – операторное выражение, определенное пользователем.
Функции для работы с очередями заявок:
1. SelectAllMessage([usl],[mUsl],[mDo]) – функция выбора множества заявок, которую следует читать так: пока выполняется общее условие usl, выбрать (пометить) все сообщения, для которых выполняется условие mUsl; действие mDo выполнить столько раз сколько выбрано заявок. Например,
SelectAllMessage
([(Z6_count < 300)],[(Z2_owner = @bA0_1)&(Z2_count < 300)], [Z6_count: = Z6_count + Z2_count]), что означает выполнение последовательности действий:
1) условие (Z6_count < 300) выполняется? – Да – п. 2, нет – выход;
2) существует заявка [(Z2_owner = @bA0_1)&(Z2_count < 300)]? Да – п. 3, нет – выход;
3) изменить значение параметра Z6_count;
4) переход на п. 1.
Таблица 3.1
Интерпретация операторных выражений
Действие |
Выполняемая операция |
Описание |
Проверка условия запуска на входном ресурсе RESi |
(RESi – F) > = 0, где RESi – текущее количество i-го ресурса, F – количество i-го ресурса необходимое для выполнения правила |
Если результат вычисления отрицательный, то условие запуска на входном ресурсе не выполнилось. |
Проверка условия запуска на механизме MECHi |
(MECHi – F) > = 0, где MECHi – текущее количество i-го механизма, F – количество i-го механизма, необходимое для выполнения правила |
Если результат вычисления отрицательный, то условие запуска на механизме не выполнилось. |
Захват входного ресурса RESi |
RESi = RESi – F |
Уменьшение количества ресурса на величину, заданную пользователем |
Блокировка механизма MECHi |
MECHi = MECHi – F |
Уменьшение количества ресурса механизма на величину, заданную пользователем |
Освобождение механизма MECHi |
MECHi = MECHi + F |
Увеличение количества ресурса механизма на величину, заданную пользователем |
Формирование выходного ресурса RESi |
RESi = RESi + F |
Увеличение количества ресурса на величину, заданную пользователем |
2. DeleteAllMessage([mUsl],[mDo]) – функция освобождения множества заявок. Для заявок, на которых выполняется условие mUsl, выполнить действие mDo.
DeleteAllMessage([Z2_lock = @bA0_5_1_1],[Z2_owner: = @bA0_5_1])
3. CreateOrder(nam) – создать экземпляр заявки Nam.
4. DeleteOrder(nam) – удалить экземпляр заявки Nam, заблокированный текущим блоком.
5. Count(queue, [p1…pn], [v1...vn]) – функция возвращает количество элементов очереди, удовлетворяющей условию ограничения по параметрам очереди.
6. Select(queue, [p1…pn], [v1...vn]) – функция возвращает номер элемента очереди, удовлетворяющей условию ограничения по параметрам и приоритетам.
7. NewElementQueue(p1…pn) – добавляет новый элемент в очередь и устанавливает его атрибуты.
8. LockCurent(queue) – блокирование текущего элемента очереди.
9. UnLockCurrent(queue) – разблокирование текущего элемента очереди.
10. MAX(p1…pn) – выбор максимального значения из некоторого множества числового или множества переменных, то же самое и MIN(p1…pn), например:
(fRes66: = min(fRes55;fRes66;fRes102;fRes104;fRes106;fRes108;fRes110; fRes112;fRes114;fRes58;)).