Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Архив1 / doc200 / отчет_4 (2)

.doc
Скачиваний:
20
Добавлен:
01.08.2013
Размер:
54.78 Кб
Скачать

ЛАБОРАТОРНАЯ РАБОТА №4 правила в clips

Цель работы: Создать экспертную систему в Clips.

    1. Краткие теоретические сведения

Ле­вая часть правил в языке представления знаний Clips содержит список условных элементов, которые должны удовлетворяться, для того чтобы правило было помещено в план решения задачи. Существует восемь типов условных эле­ментов, используемых в левой части правил: CEs-образцы, test CEs, and CEs, or CEs, not CEs, exists CEs, forall CEs и logical CEs.

      1. Образцы

Условный элемент образец состоит из списка ограничений полей, групповых сим­волов (wildcards) и переменных, которые используются для поиска множества фактов или объектов, которые соответствуют заданному образцу. Таким об­разом, образец как бы определяет маску, которой должны соответствовать данные. Такой условный элемент удовлетворяется любым фактом или объ­ектом, соответствующим заданным ограничениям.

Первое поле любого образца обязательно должно быть значением типа symbol и не может принимать значения других типов. CLIPS использует первое поле для определения: является ли данный образец упорядоченным фактом, шаблоном или объектом. Ключевое слово object зарезервировано для создания образцов, предназначенных для сопоставления с объектами. Любое другое значение типа symbol должно соответствовать имени шаблона, созданного с помощью конструктора deftemplate или неявно созданного шаблона. Для задания имен слотов также должны использоваться значения типа symbol.

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

<условный-элемент> ::= <pattern-CE> |

<assigned-pattern-CE> |

<not-CE> │

<and-CE> |

<or-CE> |

<logical-CE> |

<test-CE> |

<exists-CE> │

<forall-CE>

      1. Условный элемент test

Условный элемент test предоставляет возможность наложения дополни­тельных ограничений на слоты фактов или объектов. Элемент test удовле­творяется, если вызванная в нем функция возвращает значение не-false. Как и в случае предикатных ограничений образца в условном элементе test, можно использовать переменные, уже связанные со своими значе­ниями. Внутри элемента test могут быть выполнены различные логические операции, например сравнения переменных.

Синтаксис условного элемента test выглядит следующим образом:

<ycлoвный-элeмeнт-test > ::= (test <вызов-функции>)

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

    1. Порядок выполнения работы

      Таблица 4.1 – Задания для создания экспертной системы

      Вариант

      Название ЭС

      6

      Разработайте ЭС, которая определяет, будет ли сегодня дождь. Если небо ясное, количество крупных грозовых туч на небе менее двух и движутся они на север, скорость ветра 2 м/сек, то дождя сегодня не будет. Если небо покрыто тучами, количество крупных грозовых туч на небе более двух и движутся они на север, скорость ветра 5 м/сек, то дождь будет завтра. В противном случае дождь будет.

    2. Текст программы

(deffunction ask-question (?question)

(printout t ?question)

(bind ?answer (read))

?answer

)

(deftemplate answer-count

(slot not_today)

(slot tomorrow)

)

(defrule init

=>

(assert (answer-count (not_today 0)(tomorrow 0)))

)

(defrule ask-questions1

?fact1 <- (answer-count (not_today ?c)(tomorrow ?d))

(not (answered 1))

=>

(bind ?answer (ask-question "Is the sky clear (y/n)?"))

(if (eq ?answer y)

then

(modify ?fact1 (not_today (+ ?c 1)))

else

(modify ?fact1 (tomorrow (+ ?d 1)))

)

(assert (answered 1))

)

(defrule ask-questions2

?fact1 <- (answer-count (not_today ?c)(tomorrow ?d))

(not (answered 2))

=>

(bind ?answer (ask-question "How much storm clouds on the sky? (integer)"))

(if (< ?answer 2)

then

(modify ?fact1 (not_today (+ ?c 1)))

else

(if (> ?answer 2)

then

(modify ?fact1 (tomorrow (+ ?d 1)))

))

(assert (answered 2))

)

(defrule ask-questions3

?fact1 <- (answer-count (not_today ?c)(tomorrow ?d))

(not (answered 3))

=>

(bind ?answer (ask-question "What is the direction of the wind? (north, south, east, west)"))

(if (eq ?answer east)

then

(modify ?fact1 (not_today (+ ?c 1))(tomorrow (+ ?d 1)))

)

(assert (answered 3))

)

(defrule ask-questions4

?fact1 <- (answer-count (not_today ?c)(tomorrow ?d))

(not (answered 4))

=>

(bind ?answer (ask-question "What is the wind speed? (integer, m / s)"))

(if (= ?answer 2)

then

(modify ?fact1 (not_today (+ ?c 1)))

else

(if (= ?answer 5)

then

(modify ?fact1 (tomorrow (+ ?d 1)))

))

(assert (answered 4))

)

(defrule result-rain

?fact1 <- (answer-count (not_today ?c)(tomorrow ?d))

(not (rain 1))

=>

(if (= 4 ?c)

then

(assert (result "It will be sunny today, without rain."))

(printout t crlf "It will be sunny today, without rain." crlf)

else

(if (= 4 ?d)

then

(assert (result "Tomorrow it will be rainy."))

(printout t crlf "Tomorrow it will be rainy." crlf)

else

(assert (result "It's going to be rainy."))

(printout t crlf "It's going to be rainy." crlf)

))

(assert (rain 1))

)

    1. Выводы

При выполнении лабораторной работы были изучены свойства правил и стратегии разрешения конфликтов в языке представления знаний Clips, а также создана экспертная система “ Прогноз погоды ”.

Соседние файлы в папке doc200