Реферат: Программирование на языке CLIPS

)

Следующая операция – вынуть обойму. Обратите внимание, что в нем мы вновь обращаемся к обработчику сообщения drop.

(defrule drop

(object (name [PPK]) (safety on))

(range-test (fired yes))

=>

(send [PPK] drop)

)

Последнее правило выбрасывает патрон из патронника, вызывая обработчик сообщения clear.

(defrule unload

(object (name [PPK]) (safety on) (magazine out))

range-test (fired yes))

=>

(send [PPK] clear)

)

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

А.4. ЗАДАЧА “ПРАВДОЛЮБЦЫ И ЛЖЕЦЫ”

Для того, чтобы продемонстрировать вам возможности языка CLIPS, я выбрал головоломку, а не задачу из практики применения экспертных систем. В головоломке решается одна из задач, возникающих на острове, населенном обитателями двух категорий: одни всегда говорят правду (назовем их правдолюбцами), а другие всегда лгут ( их, естественно, назовем лжецами). Множество подобных головоломок вы можете встретить на страницах занимательной книги Раймонда Смуляна «What is the Name of this Book?». Ниже приведены разные задачи из этой серии.

Р1. Встречаются два человека, А и В , один из которых правдолюбец, а другой – лжец. А говорит: «Либо я лжец, либо В правдолюбец». Кто из этих двоих правдолюбец, а кто лжец?

Р2. Встречаются три человека, А, В и С. А и говорит: «Все мы лжецы», а В отвечает: «Только один из нас правдолюбец». Кто из этих троих правдолюбец, а кто лжец?

Р3. Встречаются три человека, А, В и С. Четвертый проходя мимо, спрашивает А: «Сколько правдолюбцев среди вас?» А отвечает неопределенно, а В отвечает: «А сказал, что среди нас есть один правдолюбец». Тут в разговор вступает С и добавляет: «В врет!» кем по-вашему являются В и С?

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

А.4.1. Анализ проблемы

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

Предложенные головоломки можно решить, систематически анализируя, что случится, если персонаж, произносящий реплику, является правдолюбцем, а что, если он – лжец. Обозначим через Т(А) факт, что А говорит правду, и следовательно, является правдолюбцем, а через F(А) – факт, что А лжет и, следовательно, является лжецом.

Рассмотрим сначала головоломку Р1. Предположим, что А говорит правду. Тогда из его реплики следует, что либо А лжец, либо В правдолюбец. Формально это можно представить в следующем виде:

Т(А) =>F(А) v Т(В)

Поскольку А не может одновременно быть и лжецом, и правдолюбцем, то отсюда следует

Т(А) =>Т(В)

Аналогично можно записать и другой вариант. Предположим, что А лжет:

К-во Просмотров: 587
Бесплатно скачать Реферат: Программирование на языке CLIPS