Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ИТ Компьютерный практикум.doc
Скачиваний:
494
Добавлен:
20.03.2016
Размер:
3.35 Mб
Скачать
      1. Построение функциональной модели с использованием продукционных правил Цикл формирования цепи рассуждений в прямом направлении

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

If посылка then заключение.

Каждое правило имеет имя. Для создания правил используется редактор правил (окно KTools, пиктограмма Rule). Окно редактора имеет два основных поля If и Then, где пользователь набирает тексты посылки и заключения соответственно. Как посылки, так и заключения представляют собой выражения, состоящие из имен классов, объектов, их слотов и значений слотов.

В приводимом примере правило, имеющее имя Empty, проверяет значение слота NumberOfp в любом подклассе или объекте, принадлежащем классу People на отрицательность или равенство нулю. В случае если это условие выполняется, то у пользователя запрашивается значение этого слота (функция AskValue()). В правилах можно, но необязательно использовать переменные, называемые в ЭО КАРРА Patterns (образцы переменной). В поле Patterns слева от вертикальной черты пишут имя переменной, которое будет фигурировать в правиле, а справа - имя класса, объектом которого она является. Правило, описанное таким образом, работает для любого объекта класса. В результате использования этого приема можно одно и то же правило применить ко многим объектам.

В систему КАРРА встроены механизмы прямого и обратного выводов. Для их инициирования предусмотрены две соответствующие функции манипулирования знаниями ForwardChain() и BackwardChain(), основным аргументом которых является имя цели вывода. В принципе, инструмент целей (Goal) разрабатывался специально для построения цепочки рассуждений в обратном на­правлении, но можно с помощью этого механизма прерывать и рассуждения, проводимые в прямом направлении (как только Цель достигнута, вывод заканчивается). Цели описываются в редакторе целей Goal (окно KTools) на KAL. Они должны иметь имена. Кроме цели, среди аргументов этих функций может быть перечень активизируемых правил. Если в записи функции опускается обязательный аргумент, например, имя цели в функциях, инициирующих вывод, то на его месте пишется NULL.

Пример.

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

BackwardChain (Sovet).

При реализации как прямого, так и обратного выводов формируются два списка. Первый из них – это список правил (Rule List), намеченных к анализу на последующих шагах логического вывода. При прямом выводе правило включается в список, если его посылка содержит пару объект:слот из заключения, полученного на предыдущем шаге. При обратном выводе наоборот, а именно, правило включается в список, если его заключение содержит пару объект:слот из анализируемой посылки. Построение списка правил порождает второй список. Действительно, рассмотрим прямой вывод. В общем случае каждое правило, включаемое в первый список (Rule List), имеет в своей посылке еще и другие условия, кроме того, из-за которого оно было включено в этот список. Истинность всех этих дополнительных условий должна быть проверена прежде, чем это правило будет применено в процессе рас­суждения. Для этого соответствующие этим условиям пары объект:слот собираются в специальном списке Agenda и затем последовательно проверяются на истинность. Очевидно, что в момент запуска прямого вывода этот список не должен быть пуст. Поэтому перед запуском в список заносится одна или более пар объект:слот, которых достаточно, по мнению разработчика, для начала вывода. Занесение производится с помощью команды Assert (), аргументом которой является имя заносимого слота. Заметим, что в ЭО Kappa принято считать, что все функции, инициирующие какие-либо действия, принимают значения TRUE и FALSE (истина, ложно). В отношении функций инициирующих логический вывод такой подход адекватен, т.к. при этом доказывается истинность или ложность некоторого утверждения (цели).

Пример. Пусть значение слота Lgoth:NumberofP равно 1000.

=>Assert (Lgoth:NumberOfP);

TRUE

=>ForwardChain(NULL,Empty);

FALSE

Цель не определена, поэтому на месте ее имени в функции ForwardChain написано NULL . Результат вывода (состоящего из одного правила) ложен, т.к. значение слота Lgotn:NumberofP равно 1000.

Установка приоритета правил позволяет регулировать порядок рассуждений. Ка­ждая стратегия регулирования использует приоритет правила для выявления относительной важности правил, соответствующих заданному пункту Списка подлежащих рассмотрению пар объект: слот (Agenda), прежде чем применять эти правила (Rule List) в процессе рас­суждения. По умолчанию приоритет равен нулю, и правила в списке организованы слу­чайным образом. Можно установить приоритет в диапазоне [-32000; 32000], чем больше число, тем выше приоритет.