Страница 99

Страница 99: Базы знаний интеллектуальных систем, Автор неизвестен, 2001 читать онлайн, скачать pdf, djvu, fb2 скачать на телефон Учебник для технических вузов по входящим в различные дисциплины вопросам разработки интеллектуальных систем

N/N Образец Результат

1 ?[ F : S] false

2 ?[F1 : 82] true

3 ?[F2 : 81 {== 8}] true

4 ?[ >>$V1 = all_of *: S1{==8}] , true

5 ?[* : S2 {== <<$V2} ] true

6 ?[one_of $V1>> : S1{== one_from {1,0}} ] true

6a ?[one_of $V1>> : S1 {== all_from {1,0}} ] false

7 ?[$V1<<: S1{==8}; >$V2=S2] true

8 ?[* : *] true

Образцы 1 и 2 представляют собой запросы на наличие в базе соответствующих слотов-фреймов. Поскольку [F:S] в базе нет, a [F1:S2] — есть, значения образцов 1 и 2 соответственно false и true. Образец 3 более избирателен, он проверяет базу на наличие в ней фрейма F2 со слотом S1, имеющим значение 8. Такой фрейм в определенной нами базе имеется (вспомним, что фрейм-экземпляр наследует слоты своего прототипа), поэтому значение образца — true. Образец 4 ищет все (all_of) фреймы со слотами S1, равными 8, записывая при этом их имена в переменную $V1. Префикс этой переменной предписывает заносить в нее значения слева с сохранением. В образце 5 значение слота S2 берется из переменной $V2 (слева без сохранения), причем имя фрейма может быть любым (*). Но фрейм со слотом S2 = "а" в базе один (F2). Ключевое слово one_of в образце 6, явно указывающее на поиск только первого подходящего фрейма, — не обязательно, такая стратегия подразумевается по умолчанию. Для успешного сопоставления с этим образцом фрейм F3, имя которого взято справа без сохранения из переменной $V1, должен иметь слот S1, значением которого может быть одно из (one_from) чисел: 1 или 0. Условие соблюдается, и значение образца — true. Вместо one_from может быть указано all_from (образец 6а), в этом случае значением слота должно быть все множество {1,0}. Образец 7 показывает, что можно проверять значения нескольких слотов сразу. Семантика его следующая: найти первый фрейм со слотами S1 = 8 и S2; если такой фрейм будет найден, записать его имя в переменную $V1 справа, протолкнув верхушку стека справа, а значение слота S2 — в переменную SV2 слева, без сохранения значения в верхушке стека. С помощью образца 8 проверяется, есть ли вообще в текущей базе какие-нибудь фреймы.

Таким образом, мы обсудили конструкции ЯПЗ 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] будем также называть манипулятором. Итак, манипулятор, или обработка базы знаний, — это удаление фреймов, создание фреймов, замена фреймов или коррекция фрейма.

Базы знаний интеллектуальных систем

Базы знаний интеллектуальных систем

Обсуждение Базы знаний интеллектуальных систем

Комментарии, рецензии и отзывы

Страница 99: Базы знаний интеллектуальных систем, Автор неизвестен, 2001 читать онлайн, скачать pdf, djvu, fb2 скачать на телефон Учебник для технических вузов по входящим в различные дисциплины вопросам разработки интеллектуальных систем