close

Вход

Забыли?

вход по аккаунту

?

отчет 4 (2)

код для вставкиСкачать
ЛАБОРАТОРНАЯ РАБОТА №4
ПРАВИЛА В CLIPS
Цель работы: Создать экспертную систему в Clips.
4.1 Краткие теоретические сведения
Левая часть правил в языке представления знаний Clips содержит
список условных элементов, которые должны удовлетворяться, для того
чтобы правило было помещено в план решения задачи. Существует восемь
типов условных элементов, используемых в левой части правил: CEsобразцы, test CEs, and CEs, or CEs, not CEs, exists CEs, forall CEs и logical CEs.
4.1.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>
4.1.2 Условный элемент test
Условный элемент test предоставляет возможность наложения дополнительных ограничений на слоты фактов или объектов. Элемент test удовлетворяется, если вызванная в нем функция возвращает значение НЕ-FALSE. Как
и в случае предикатных ограничений образца в условном элементе test,
можно использовать переменные, уже связанные со своими значениями.
Внутри элемента test могут быть выполнены различные логические операции,
например сравнения переменных.
Синтаксис условного элемента test выглядит следующим образом:
<ycлoвный-элeмeнт-test > ::=
(test <вызов-функции>)
Выражение test вычисляется каждый раз при удовлетворении других
условных элементов. Это означает, что условный элемент test будет вычислен
больше одного раза, если обрабатываемое выражение может быть удовлетворено более чем одной группой данных. Использование условного
элемента test может стать причиной автоматического добавления правилу
некоторых условных выражений. Кроме того, CLIPS может автоматически
переупорядочивать условные элементы test.
4.2 Порядок выполнения работы
Таблица 4.1 – Задания для создания экспертной системы
Вариант
Название ЭС
6
Разработайте ЭС, которая определяет, будет ли сегодня
дождь. Если небо ясное, количество крупных грозовых туч
на небе менее двух и движутся они на север, скорость
ветра 2 м/сек, то дождя сегодня не будет. Если небо
покрыто тучами, количество крупных грозовых туч на
небе более двух и движутся они на север, скорость ветра 5
м/сек, то дождь будет завтра. В противном случае дождь
будет.
4.3 Текст программы
(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))
)
4.4 Выводы
При выполнении лабораторной работы были изучены свойства правил и
стратегии разрешения конфликтов в языке представления знаний Clips, а
также создана экспертная система “ Прогноз погоды ”.
Документ
Категория
Программирование, Базы данных
Просмотров
51
Размер файла
54 Кб
Теги
отчет_4
1/--страниц
Пожаловаться на содержимое документа