Пример объектно-ориентированного программирования в CLIPS.
Рассмотрим следующую задачу. Необходимо разработать и реализовать объектную модель автомата по продаже газированной воды. Вода может быть выдана как с сиропом (стоимостью 3 монеты) или без сиропа (стоимостью 1 монета). Количество сиропа и воды ограничено. В листинге 5 представлена реализация данной задачи в CLIPS. Автомат по продаже воды реализован в виде класса gas-water-automate, родительский класс которого является USER, класс не абстрактный (role concrete). Чтобы класс мог быть использован при сопоставлении образцов во время выполнения правил pattern-match выставлен как reactive. У класса имеются два слота gas-water и syrup, доступные как для чтения, так и для записи (create-accessor read-write). Данные слоты будут использоваться для хранения количества порций воды и сиропа, их тип задается как INTEGER. Объект данного класса в нашей программе будет называться our-automate. Зададим воды 2, а сиропа 3 порции. Выдачу воды реализуем в обработчике сообщений getwater, в который в качестве параметра будем передавать номинал монеты. Вызов данного сообщения реализуем в правиле, которое будет выполняться, когда в базе фактов появится факт со словом money и номиналом монеты. Например, чтобы получить воду с сиропом необходимо задать следующий факт: (deffacts world (money 3) )
Листинг 5. Программа моделирующая автомат по продаже воды (defclass gas-water-automate (is-a USER);;родительский класс (role concrete);;класс неабстрактный (pattern-match reactive);;класс активный (slot gas-water (type INTEGER) (create-accessor read-write));;вода (slot syrup (type INTEGER) (create-accessor read-write));;сироп ;;предварительно объявляем обработчик сообщений: (message-handler getwater) )
(definstances automates;;объявляем экземпляр класса (our-automate of gas-water-automate (gas-water 2) (syrup 3) ) )
;;обработчик сообщений (defmessage-handler gas-water-automate getwater (?money) (if (=?money 1) then;;если 1 монета, то выдаем воду без сиропа (if (> (dynamic-get gas-water) 0) then;;если воды нет – оповещаем об этом (dynamic-put gas-water (- (dynamic-get gas-water) 1)) (printout t "Your gas-water, please" crlf) else (printout t "Sorry, no more gas-water" crlf) ) else (if (=?money 3) then;;если 3 монеты, то выдаем воду с сиропом ;;если воды или сиропа нет, то нужно оповестить об этом (if (and (> (dynamic-get gas-water) 0) (> (dynamic-get syrup) 0)) then (dynamic-put gas-water (- (dynamic-get gas-water) 1)) (dynamic-put syrup (- (dynamic-get syrup) 1)) (printout t "Your gas-water with syrup, please" crlf) else (printout t "Sorry, no more gas-water or syrup" crlf) ) else;;если ввели не 1 и не 3 монеты, то сообщаем об этом (printout t "Wrong money" crlf) ) ) )
;;правило, которое выполняется когда в базе фактов есть монеты (defrule drinkwater ?f<-(money?money) => ;;вызываем обработчик сообщений (send [our-automate] getwater?money) ;;удаляем факт (retract?f) )
Задания 1. Выполните вариант задания, выданного преподавателем из лабораторной работы № 1 с помощью объектно-ориентированных средств в CLIPS. 2. Выполните полученную программу с различными начальными данными. Литература 1. Питер Джексон. Введение в экспертные системы. М.: Изд. дом "Вильямс", 2001,– 622с. 2. Рассел С., Норвиг.П. Искусственный интеллект: современный подход, 2-е изд..: Пер. С англ. – М.: Изд. дом "Вильямс", 2006, -1408 с. 3. Люгер Дж. Искусственный интеллект: стратегии и методы решения сложных проблем, 4-е изд...: Пер. с англ. – М.: Изд. дом "Вильямс", 2003,– 864 с. 4. Адрес языка CLIPS в Интернете: http://www.ghg.net/clips/CLIPS.html 5. А.П. Частиков, Т.А. Гаврилов, Д.Л. Белов. Разработка экспертных систем. Среда CLIPS. – СПб.:БХВ-Петербург, 2003. – 608 с. 6. В.В. Корнеев, А.Ф. Гаев, С.В. Васютин, В.В. Райх. Базы данных. Интеллектуальная обработка информации. – М.: “Нолидж”, 2000
СОДЕРЖАНИЕ Введение. 3 1. Основные теоретические сведения. 3 1.1. Основные элементы программирования в CLIPS. 4 1.1.1. Простые типы данных. 4 1.1.2. Работа с базой знаний в CLIPS. Факты.. 5 1.1.3. Операции над фактами. 7 1.1.4. Работа с базой правил. Правила. 10 1.1.5. Функции для манипулирования данными. Определение функций. 14 1.2. Наблюдение за процессом интерпретации программы.. 16 1.3. GUI-интерфейс CLIPS. 17 2. Лабораторная работа №1. Решение задач на планирование. 19 2.1. Задачи на планирование действий. 19 2.2. Пример программы по планированию действий робота – "Робот и ящик" 19 2.3. Порядок выполнения работы. Задания. 25 3. Лабораторная работа №2. Решение задач из логики высказываний на 3.1. Элементы математической логики. Логика высказываний. 28 3.1.1. Основные операции над высказываниями. 28 3.2. Примеры программ логического доказательства. 32 3.3. Варианты заданий. 45 4. Лабораторная работа №3. Реализация эвристических поисковых алгоритмов на примере алгоритма А*. 50 4.1. Эвристический алгоритм поиска в пространстве состояний. 50 4.2. Пример решения задачи поиска в пространстве состояний. 51 4.3. Варианты заданий. 75 5. Лабораторная работа №4. Объектное программирование в CLIPS. 79 5.1. Использование объектно-ориентированных средств в CLIPS. 79 5.1.1. Наследование. 80 5.1.2. Описатели классов. 82 5.1.3. Фасеты.. 84 5.2. Пример объектно-ориентированного программирования в CLIPS. 90 5.3. Задания. 92 Литература. 93
|