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

Завдання на лабораторну роботу.

Завдання: для обраної предметної області створити експертну систему, яка виводила вказівки оператору для забезпечення якісного проходження технологічного процесу. Експертна система повинна складатися з 10-15 правил.

Методика виконаня лабораторної роботи.

Приклад експертної системи на мові CLIPS.

На рис. 31 зображено теплонагрівач дифузійного соку на цукровому заводі, який нагріває дифузійний сік до 90-95С для подальшої гарячої дефекації.

Рис. 31. Теплонагрівач дифузійного соку.

Алгоритм роботи теплонагрівача:

  1. Відкрити клапан 1, ввімкнути двигун М1.

  2. Коли рівень соку більше 3м. закрити клапан 1, вимкнути двигун М1, відкрити клапан подачі пари (клапан 3).

  3. Коли температура соку більше 90С закрити клапан 3, відкрити клапан 2, ввімкнути двигун М2.

  4. Коли рівень соку менше 0.2м. закрити клапан 2, вимкнути двигун М2.

Дана експертна система призначена для видачі вказівок оператору для ефективного керування даним технологічним процесом. Покази з датчиків рівня та термопари були зняті контролером та записані SCADA-програмою в файли, для температури файл  TE.dat, рівня  LE.dat, на диску С.

Лістинг експертної системи наведено нижче:

; Конструкція факту для підняття рівня соку

(deftemplate riven (slot riv))

; Конструкція факту для зниження рівня соку

(deftemplate spuck-riven (slot spriv))

; Конструкція факту для температури

(deftemplate temperatura (slot tem))

; Правило для запуску системи

(defrule pidigriv

(motor-M1)

=>

(printout t "Включити двигун М1" crlf)

(printout t "Відкрити клапан 1" crlf)

(assert (riven-control)))

; Правило для відкриття файлу LE.dat та зчитування значення рівня соку в факт

; riven.

(defrule riven-nagrivacha

(riven-control)

=>

(open "c:\\lab\\LE.dat" LE "r")

(assert (riven (riv (read LE)))))

; Правило для порівняння значення рівня з заданим значенням. Якщо рівень < 3м., ; видаляється факт за адресою ?f1 добавляється факт з новим значенням рівня,

; і знову виконується це правило, якщо > 3м. то виконується наступне правило.

(defrule pokaz-riven-nagrivacha

?f1<-(riven (riv ?rd));

(test(< ?rd 3))

=>

(retract ?f1)

(assert (riven (riv (read LE)))));

(defrule max-riven-nagrivacha

?f1<-(riven (riv ?rd))

(test(> ?rd 3))

=>

(printout t "Виключити двигун М1" crlf)

(printout t "Закрити клапан 1" crlf)

(printout t "Відкрити клапан 3" crlf)

(assert (temp-control)))

; Правило для відкриття файлу TE.dat та зчитування значення температури соку в

; факт temperatura.

(defrule temp-nagrivacha

(temp-control)

=>

(open "c:\\lab\\TE.dat" TE "r")

(assert (temperatura (tem (read TE)))))

; Правило для порівняння значення температури соку з заданим значенням. Якщо ; температура < 90С, видаляється факт за адресою ?f2 добавляється факт з новим ; значенням температури, і знову виконується це правило, якщо > 90С то

; виконується наступне правило.

(defrule pokaz-temp-nagrivacha

?f2<-(temperatura (tem ?temp))

(test(< ?temp 90))

=>

(retract ?f2)

(assert (temperatura (tem (read TE)))))

(defrule max-temp-nagrivacha

?f2<-(temperatura (tem ?temp))

(test(> ?temp 90))

=>

(close TE)

(assert (riven-spusk))

(printout t "Закрити клапан 3" crlf)

(printout t "Включити двигун М2" crlf)

(printout t "Відкрити клапан 2" crlf))

; Правило для спостереження за зниженням рівня соку.

(defrule spriv-nagrivacha

(riven-spusk)

=>

(assert (spuck-riven (spriv (read LE)))))

; Правило для порівняння значення рівня з заданим значенням. Якщо рівень > 0.2м., ; видаляється факт за адресою ?f3 добавляється факт з новим значенням

; рівня, і знову виконується це правило, якщо < 0.2м. то виконується наступне

; правило.

(defrule pokaz-spriv-nagrivacha

?f3<-(spuck-riven (spriv ?spr))

(test(> ?spr 0.2))

=>

(retract ?f3)

(assert (spuck-riven (spriv (read LE)))))

(defrule min-spriv-nagrivacha

?f3<-(spuck-riven (spriv ?spr))

(test(< ?spr 0.2))

=>

(close LE)

(printout t "Закрити клапан 2" crlf)

(printout t "Виключити двигун М2" crlf))

Дану програму можна записати в текстовому редакторі “Блокнот” і зберегти файл з розширенням *.clp.

Щоб завантажити файл в систему CLIPS виконується команда load, що має наступний синтаксис:

(load <file-name>)

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

або "c:\\lab.clp".

Щоб зберегти конструкції фактів та правил в файл з системи CLIPS виконується команда save, що має наступний синтаксис:

(save <file-name>)

<file-name> – ім’я файлу або шлях, куди необхідно зберегти файл, наприклад: "lab.clp" або "c:\\lab.clp".

Завантажимо програму, що була збережена в файлі.

CLIPS> (load "c:\\lab\\lab.clp")

Defining deftemplate: riven

Defining deftemplate: spuck-riven

Defining deftemplate: temperatura

Defining defrule: pidigriv +j

Defining defrule: riven-nagrivacha +j

Defining defrule: pokaz-riven-nagrivacha +j

Defining defrule: max-riven-nagrivacha +j

Defining defrule: temp-nagrivacha +j

Defining defrule: pokaz-temp-nagrivacha +j

Defining defrule: max-temp-nagrivacha +j

Defining defrule: spriv-nagrivacha +j

Defining defrule: pokaz-spriv-nagrivacha +j

Defining defrule: min-spriv-nagrivacha +j

TRUE

CLIPS>

Якщо синтаксис правил вірний система виводить назву правила і напроти правила символи +j. Якщо в файлі не знайдено помилок в кінці виводиться напис TRUE.

Для запуску на виконання програми потрібно додати в систему факт

motor-M1.

CLIPS> (assert (motor-M1))

<Fact-0>

CLIPS> (run)

Включити двигун M1

Відкрити клапан 1

Виключити двигун M1

Закрити клапан 1

Відкрити клапан З

Закрити клапан З

Включити двигун М2

Відкрити клапан 2

Закрити клапан 2

Виключити двигун М2

CLIPS>