Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Інтелектуальні системи Методичні вказівки до ви...doc
Скачиваний:
7
Добавлен:
25.11.2019
Размер:
4.88 Mб
Скачать

Робота з правилами в системі clips.

Крім фактів в CLIPS повинні існувати правила для функціювання системи. Стандартно правила описуються за допомогою гілки if-then:

IF факт

THEN дія

тобто при наявності того чи іншого факту, виконуються якась дія.

В системі CLIPS правила задаються за допомогою ключового слова defrule. Синтаксис команди має такий вигляд:

(defrule <rule-name> [<comment>]

<patterns>*

=>

<actions>*)

<rule-name>  ім’я правила;

<patterns>*  ліва частина правила, або ще називається шаблоном;

=>  стрілка, символізує слово THEN;

<actions>*  права частина правила.

Якщо в лівій частині правила не вказано шаблонів, то для виконання правила потрібно необхідно ініціалізувати шаблон (initial-fact) командою reset.

Команда reset має синтаксис:

(reset)

При виконанні команди reset в систему додається факт (initial-fact), який завжди має індекс 0.

CLIPS> (reset)

CLIPS> (facts)

f-0 (initial-fact)

For a total of 1 fact.

Для активації правил потрібно, щоб шаблони в лівій частині правила співпадали зі списком фактів.

Щоб перевірити чи активоване правило існує команда agenda. При виконанні команди система повертає значимість правила, ім’я правила та факт, що активував правило.

Якщо правило активоване то для його виконання виконується команда run.

Приклад: маємо бак з рідиною. Рідина нагрівається за рахунок подачі пари. Якщо температура вище норми, то треба перекрити клапан подачі пари.

Для початку визначимо конструкцію факту temperature:

(deftemplate temperature

(slot apparat)

(slot value))

Слот apparat вказує на апарат в якому знаходиться рідина, а слот value значення температури. Складаємо правило:

(defrule temp-in-tank

(temperature (apparat tank)

(value high-norm))

=>

printout t "Close valve" crlf)

Якщо температура в баку (apparat tank) вище норми (value high-norm), тоді вивести на екран повідомлення закрити клапан "Close valve".

Повідомлення виводиться командою printout, яка має синтаксис:

printout(<logical-name> <print-items>*)

<logical-name>  вивід повідомлення на пристрій, в даному випадку t означає на екран;

<print-items>*  повідомлення в подвійних лапках;

параметр crlf забезпечує повернення каретки.

Виконання прикладу на мові CLIPS приведено нижче:

CLIPS> (deftemplate temperature

(slot apparat)

(slot value))

CLIPS> (defrule temp-in-tank

(temperature (apparat tank)

(value high-norm))

=>

(printout t "Close valve" crlf))

CLIPS> (reset)

CLIPS> (assert (temperature (apparat tank)

(value high-norm)))

<Fact-1>

CLIPS> (agenda)

0 temp-in-tank: f-1

For a total of 1 activation.

CLIPS> (run)

Close valve

CLIPS>

Контрольні питання.

  1. Розказати основні принципи функціювання експертної системи.

  2. Перелічити та розказати про основні елементи типової експертної системи.

  3. Розказати призначення команди deftemplate.

  4. Розказати призначення команди defrule.

  5. Розказати призначення команди agenda.

Лабораторна робота №7-8

Використання змінних та робота з файлами в експертній системі CLIPS.

Мета: засвоїти роботу з змінними та з файлами в експертній системі CLIPS.

Теоретичні відомості.

Використання змінних в системі CLIPS.

В системі CLIPS, як і в інших мовах програмування використовуються змінні. Змінна в CLIPS позначається любим ім’ям перед яким ставиться символ ? (знак питання).

Приклад змінних:

?data

?speed

Нижче наведений приклад використання змінних для пошуку ім’я людини, яка має чорний колір очей:

CLIPS> (deftemplate person

(slot name)

(slot eye-color))

CLIPS> (defrule find-black-eyes

(person (name ?name) (eye-color black))

=>

(printout t ?name " has black eyes." crlf))

CLIPS> (assert (person (name Jane)

(eye-color black)))

<Fact-0>

CLIPS> (run)

Jane has black eyes.

CLIPS>

Також змінним можливо присвоїти адресу факту наступним чином:

CLIPS> (defrule time

?f1<-(time 8:45)

=>

(retract ?f1))

CLIPS> (assert (time 8:45))

<Fact-0>

CLIPS> (run)

CLIPS> (facts)

CLIPS>

В даному прикладі наведено, як в правій частині правила присвоєно адресу факту за допомогою символів <- в змінну ?f1, та видаляється факт за його адресою в лівій частині правила.

Команда bind використовується для присвоювання змінній деяке значення, та має такий синтаксис:

(bind <variable> <value>)

<variable>  змінна;

<value>  значення.

Команда test використовується для порівняння змінної з значенням і має наступний синтаксис:

(test <predicate-function>)

<predicate-function>  вираз порівняння наприклад: (> ?size 1). Тобто чи більше змінна ?size одиниці.

Робота з файлами в системі CLIPS.

Для роботи з файлами в системі CLIPS використовуються наступні команди: open, close, read. Розглянемо ці команди детальніше.

Синтаксис команди open, що призначена для відкриття файлів, має наступний вигляд:

(open <file-name> <file-ID> [<file-access>])

<file-name> – ім’я файлу або шлях, де знаходиться файл, наприклад: "input.dat"

або "c:\\input.dat";

<file-ID> – унікальний ідентифікатор файла, який ми присвоюємо файлу, для подальшого звернення до цього файлу;

<file-access> – доступ до файлу.

Доступ до файлу задається наступними параметрами:

"r" – тільки для читання;

"w" – тільки для запису;

"r+" – для читання та запису.

По замовчуванню в <file-access> ставиться параметр "r".

Синтаксис команди close, що призначена для закриття файлів, має наступний вигляд:

(close [<file-ID>])

Якщо не вказаний ідентифікатор файлу, то закриваються всі файли.

Команда read використовується для зчитування даних з файлу чи введених з клавіатури.

Нижче наведено приклад команди read:

CLIPS> (defrule name

=>

(printout t "What is your name?" crlf)

(bind ?name (read))

(printout t "user name: " ?name crlf))

CLIPS> (reset)

CLIPS> (run)

What is your name?

Jane

user name: Jane

CLIPS>

При запуску правила система запитує ім’я користувача. Коли вводиться ім’я з клавіатури воно присвоюється змінній ?name, тоді використовуючи цю змінну можна вивести на екран ім’я користувача.