Название: Базы знаний интеллектуальных систем - Гаврилова Т.А.

Жанр: Информатика

Рейтинг:

Просмотров: 1257


Таким образом, мы обсудили конструкции ЯПЗ PILOT/2, которые могут потребоваться при формировании левых частей продукционных правил. Все они предназначены для выделения в БЗ системы интересующих нас ситуаций. Такое выделение не самоцель, а средство для преобразования таких ситуаций для получения решений. Сами преобразования описываются в основном, в правых частях продукционных правил ЯПЗ-программы и сводятся к выполнению определенных действий над БЗ и/или значениями переменных.

В ЯПЗ PILOT/2 все действия делятся на стандартные (системные) и нестандартные (пользовательские). Все они могут использоваться не только в правых частях продукционных правил, но и в аннотациях, что позволяет реализовывать в ЯПЗ PILOT/2 развитые модели объяснений [Clancey, 1983]. Синтаксис нестандартных действий определяется спецификацией прототипов процедур, рассмотренной выше, и синтаксисом обращений к процедурам, а семантика и реализация — целиком в руках пользователя ЯПЗ PILOT/2.

Классификация стандартных действий проста. Это обработка переменных, обработка базы знаний, процедурное управление и ввод/вывод.

Как указывалось выше, в ЯПЗ PILOT/2 имеются три вида переменных (VAR, GET, PUT). С учетом этого:

 

обработка-переменных ::=                             || оператор-присваивания ||

|| PUSH-оператор                                              ||

|| РОР-оператор                                  ||

|| CLEAR-оператор                                           ||

оператор-присваивания ::=                                            || VAR-переменная            || = значение

|| PUT-переменная                             ||

 

Примерами присваивания значений переменным могут служить конструкции вида:

 

$var1=<$a+$b;

>$var2=[FrameName : SlotName] * $var1;

$var3« =empty;

 

Заметим, что с помощью присваивания можно реализовать и «проталкивание» стека, например, так:

»$var2 = empty; $var3<< = ;

или даже так

$var <<;

Однако более общим будет действие вида

push ( left, $var2, $var3 ); push ( right, $var2, $var3 );

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

Для очистки стеков следует использовать стандартное действие CLEAR. При этом не важно, с какой стороны (слева или справа) начнет очищаться стек.

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

Выше уже обсуждалась конструкция образца ЯПЗ PILOT/2, которая используется для выделения интересующих инженера по знаниям ситуаций. Почти та же конструкция применяется и для преобразования ситуаций. Действительно, для выполнения любого преобразования в конечном счете нужно найти некоторую ситуацию и либо удалить ее, либо скорректировать соответствующим образом. Для полноты нужны и средства формирования новых ситуаций. Все эти действия выполняются в ЯПЗ PILOT/2 с помощью конструкции обработка-базы-знаний, которую для краткости и преемственности с языком ПИЛОТ [Хорошевский и др., 1990] будем также называть манипулятором. Итак, манипулятор, или обработка базы знаний, — это удаление фреймов, создание фреймов, замена фреймов или коррекция фрейма.

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

 

[?[*:*] \ ]; [ ?[ * : *{==«обработан»} ] \ ];

[ ?[ »$DeletedFrameNames=all_of * : * {—«обработан»} ] \ ];

 

Создание новых фреймов в ЯПЗ PILOT/2 для пользователя языка тоже простая операция. Здесь нужно дать определение нового фрейма или совокупности фреймов аналогично тому, как это делалось в рамках декларативной компоненты ЯПЗ PILOT/2:

[ \ [ Framel : Slot11 = «Mother»;

Slot12 = «Father»;

Slot13 = «Children»;

Slot14 = 21];

[ Frame2 : Slot21 = empty];

[ FrameS :]

]

 

Замена одних фреймов на другие — не что иное, как объединение уже рассмотренных конструкций удаления и вставки:

[?[*:*] \ [ Frame : Slot = «End Of Job» ] ]

Так в ЯПЗ PILOT/2 осуществляется коррекция баз знаний на уровне отдельных единиц-фреймов. Вместе с тем часто требуется скорректировать некоторый фрейм или группу фреймов более «тонким» способом. Например, это может быть изменение значений некоторых слотов определенных фреймов, удаление «ненужных» слотов и/или добавление новых слотов в уже существующие фреймы. Все эти манипуляции с базой знаний осуществляются в ЯПЗ PILOT/2 на уровне конструкции коррекция-фрейма.. Примеры использования манипуляторов в случае коррекции базы знаний на уровне отдельных фреймов и/или групп фреймов приводятся ниже:


Оцените книгу: 1 2 3 4 5