Обработчики событий
После того как агент заказа зарезервировал агента ресурса, может возникнуть необходимость в изменении значений некоторых атрибутов заказа и ресурса. Для этого используются обработчики событий. Для отношения матчинга определено четыре типа событий (рис. 21): OnEstablish - установить событие резервирования в матчинге, OnBreak - установить событие разрыва резервирования в матчинге, OnMatchingFailed – агенты не соглашаются установить отношение матчинга, OnReservationFailed – агенты устанавливают отношение матчинга, но резервирование не выполняется. С каждым из этих событий возможно связать скрипт, который будет выполнять какие-либо действия при наступлении событий. При этом для скрипта, связанного с событием установления отношения матчинга (резервирования), параметрами являются: Object_Instance – агент, который является объектом в данном отношении матчинга, Subject_Instance – агент, который является субъектом в данном отношении матчинга, Matcher_Instance – матчер агентов. Данные события используются, когда необходимо изменить какое-то значение атрибута агента в зависимости от значения атрибутов матчера. Например, после того как отправитель зарезервировал определенную часть грузоподъемности самолета, необходимо увеличить уровень загрузки самолета на соответствующую величину, скорректировать значение занятой грузоподъемности самолета, значение платы за зарезервированную грузоподъемность и т.п.
Находясь в окне Edit matching condition, перейдите во вкладку Events, установите флаг активности события резервирования (рис. 21).
Свяжите с событием резервирования скрипт. Для этого нажмите на кнопку и в появившемся редакторе скриптов наберите тело скрипта (рис. 22). Параметрами скрипта – обработчика события резервирования, в соответствии с тем, как определены стороны отношения в матчинге, являются: Object_Instance – агент самолета, который является объектом в данном отношении матчинга, Subject_Instance – агент отправителя, который является субъектом в данном отношении матчинга.
Для обращения к атрибутам агентов используется конструкция вида “ имя агента.имя атрибута ”. Если в процессе вычислений необходимо многократное обращение к атрибутам одного и того же агента, то для сокращения записи используется конструкция вида with “ имя агента ” do begin действия с использованием атрибутов агента, к которым происходит обращение только по имени, - “ имя атрибута” end;
Begin ; вычисление значений атрибутов агента самолета (вместо обращения ; "Object_Instance"."Airplane load" и т.п. используется ; "Airplane load" и т.п. Для обращения к атрибутам агента ; отправителя используется полная форма записи, например, ; "Subject_Instance"."_Sender volume". Для обращения к значениям ; атрибутов, вычисляемых матчером, также используется полная форма ; записи, например, "Matcher_Instance"."Current fee") with "Object_Instance" do Begin ; вычисление текущей загрузки самолета "Airplane load":= "Airplane load" + "Subject_Instance"."_Sender volume"; ; вычисление свободной грузоподъемности самолета "Airplane free volume":= "_Airplane volume" - "Airplane load"; ; вычисление коэффициента загрузки самолета в процентах "Usage level":= 100 * "Airplane load" / "_Airplane volume"; ; вычисление платы, полученной самолетом. Матчер запускает скрипт ; Calculate Current fee для вычисления значения платы от каждого ; отправителя, агент которого резервирует самолет. Значение ; атрибута Current fee очередного отправителя, разместившего груз ; на самолете, добавляется к суммарной плате, полученной самолетом ; от всех отправителей "Airplane account":="Airplane account" + "Matcher_Instance"."Current fee"; ; добавление идентификатора отправителя в список отправителей, ; грузы которых размещены на самолете. Add – встроенная функция ; матчера, которая выполняет эту операцию "Sender names".Add("Subject_Instance"."_Sender name"); ;Агент самолета получает от матчера значение тарифа за перевозку ; 1 кг груза, вычисленное с помощью скрипта Calculate Rent fee, и ; записывает это значение в соответствующий атрибут "Rent fee":= "Matcher_Instance"."Rent fee"; End; ; вычисление значений атрибутов агента отправителя (вместо обращения ; "Subject_Instance."Current fee" и т.п. используется ; "Current fee" и т.п. Для обращения к атрибутам агента ; самолета используется полная форма записи, например, ; "Object_Instance"."_Airplane name". Для обращения к значениям ; атрибутов, вычисляемых матчером, также используется полная форма ; записи, например, "Matcher_Instance"."Current fee") with "Subject_Instance" do Begin ; отправитель получает идентификатор зарезервированного им ; самолета "SenderAirplane Name":= "Object_Instance"."_Airplane name"; ; отправитель получает от матчера значение платы за размещение ; груза, которое вычисляется с помощью скрипта ; Calculate Current fee "Current fee":= "Matcher_Instance"."Current fee"; End; End;
2.3.7 Сохранение онтологий предметной области “Логистика воздушного флота”
Дерево концептов дескриптивной онтологии и онтологии виртуального мира предметной области “Логистика воздушного флота” приведено на рис. 23.
Сохраните созданные онтологии (дескриптивную онтологию и онтологию мира заказов/ресурсов) при помощи кнопки под именем Shared Airplanes ontology. Расширение .ocl будет добавлено автоматически. По умолчанию, файл онтологии будет размещен в разделе Ontology Samples. Завершите работу с конструктором онтологий (File -> Close).
|