Байесовские сети как инструмент поддержки принятия решений в условиях неопределённости, страница 4

В 6-й версии Hugin реализована новая парадигма ― так называемые объектно-ориентированные байесовские сети (ООБС). Суть ООБС состоит в том, что каждая сеть теперь рассматривается как класс и несколько сетей можно интегрировать в одну на более высоком уровне иерархии. Таким образом, можно строить иерархические модели. Связи между сетями-объектами реализуются через интерфейсные вершины двух типов: входные (input) и выходные (output). Остальные вершины недоступны на внешнем уровне. Входные служат для реализации интерфейсных связей, в которых вершины сети данного класса являются дочерними, а выходные, в свою очередь, могут быть родительскими для внешней сети. При этом для строгости описания входные вершины представляют некоторые внешние сущности, и дуга графа закрепляет соответствие между интерфейсной вершиной и идентичной ей вершиной внешней сети. На характер интерфейсных связей накладываются те же ограничения, что и для обычных БСД, не допускающие образования контуров в гиперграфе модели, чтобы оставаться в рамках причинно-следственной концепции отражения мира.

Рис. 1.2

В данном примере целесообразно выделить в отдельную подсеть-объект фрагмент исходной сети, соответствующий аккумулятору и цепи его подзарядки. Сохраним сеть нашего примера в файле «car_start_2.net». Создадим новую сеть и скопируем в неё фрагмент из <car_start_2>, включающий все вершины, связанные с Batt_State, кроме Turn_self, и вершины, соответствующие генератору, ремню вентилятора и реле. Полученная БСД должна иметь две входные интерфейсные вершины Runtime и Fan_Belt и одну выходную вершину Batt_State. Пометим эти вершины соответствующим образом в окне «Свойства вершины». Сохраним сеть в файле «Battery.net». Файл не закрываем. Теперь можно внедрить эту сеть в модель <car_start_2>. Перейдём в окно «car_start_2» и с помощью команды меню «Edit->Instance Tool» внедрим сеть <Battery>, которую нужно выбрать из списка, раскрывающегося под соответствующей пиктограммой на панели инструментов. В сети появится дополнительная вершина типа «экземпляр» (Instance node). Теперь удалим из исходной БСД лишний фрагмент, вошедший в <Battery>. Нужно оставить только вершины Runtime и Fan_Belt. Перейдём к расширенному представлению вершины Battery, соединим дугами вершины Runtime и Fan_Belt с соответствующими интерфейсными вершинами Battery и восстановим связь Battery.Batt_State -> Turn_self. На рис. 1.2 слева изображена для сравнения структура исходной сети <car_start> и справа ― эквивалентной ей объектно-ориентированной <car_start_2>. Заливкой выделены вершина Battery сети <car_start_2> и вершины сети <car_start>, вошедшие в <Battery>.

2. Задание на самостоятельную работу.

Постройте байесовскую сеть доверия для выявления неисправностей системы зажигания автомобильного двигателя. Процесс запуска двигателя включает несколько стадий: стартер прокручивает двигатель, топливная система подаёт в карбюратор бензин (если он есть), свечи зажигания вырабатывают искру, и если не нарушены регулировки распределителя зажигания, то происходит успешный запуск. Важным фактором является состояние аккумулятора и электропроводки, ибо силы тока может не хватить для качественной искры, даже если свечи исправны. Система подачи топлива, куда входит помимо бензобака, в частности, бензонасос, фильтр и бензопровод, в нашем случае не детализируется и рассматривается как единый блок, в отношении которого нужно сделать вывод, являются ли его неисправности причиной отсутствия зажигания или нет.

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

- «В СЛУЧАЕ состояния аккумулятора: а) нормального ― вырабатывается расчётная сила тока; б) подсевшего ― пониженная сила тока;  в) севшего ― недопустимо малая»;