Работа в среде CLIPS под Windows



В настоящий момент доступны версии CLIPS, работающие под различными операционными системами: DOS, Windows (16-разрядная и 32-разрядная версии), Macintosh, Unix.

Рассмотрим более подробно версию среды CLIPS под Windows. Для запуска программы необходимо выполнить файл Clipsw32.exe. В результате перед пользователем появится следующее окно (рис. 4.1):

 

Рис. 4.1. Вид окна после запуска

В окне отображается стандартная строка приглашения CLIPS, куда и вводятся команды.

Рассмотрим подробнее меню среды.

Меню File

Load Constructs – загружает конструкции из файла аналогично команде load.

Turn Dribble On – действует аналогично команде (dribble-on <file-name>).

Editor – вызов редактора текста программы, поставляемого совместно с CLIPS.

Quit CLIPS – выход из среды CLIPS.

Меню Edit

Paste – вставка строки из буфера обмена.

Complete – подсказка в виде списка ключевых слов языка CLIPS.

Меню Execution – дублирует некоторые команды, связанные с выполнением программы на CLIPS.

Reset – аналогично команде reset.

Run – аналогично команде run.

Step – аналогично команде run 1, т.е. максимальное число правил, которое должно выполниться не превышает 1.

Watch – аналогично команде watch …, признаки того, какие сообщения отображать выставляются галочками в появившемся окне.

Options – позволяет выполнить некоторые настроечные параметры, такие как: стратегия учета приоритетов, статическая или динамическая проверка ограничений и т.д.

Preferences – некоторые настройки самого интерпретатора.

Clear CLIPS – аналогично команде clear, удаляет все конструкции, определенные в среде CLIPS.

Меню Browse

Module – отображает соответствующий модуль.

Все остальные команды отображают менеджеры соответствующих конструкций.

Defrule Manager

Deffacts Manager

Deftemplate Manager

Deffunction Manager

Defglobal Manager

Defgeneric Manager

Definstance Manager

Agenda Manager

Меню Window – позволяет просмотреть текущее состояние базы фактов и базы правил, а также остальную статистику по состоянию среды без вызова специальных команд CLIPS. Так как содержимое окон изменяется в процессе выполнения программы, то удобно с их помощью наблюдать за состоянием правил, фактов, переменных.

Следующие подменю открывают соответствующие окна:

Facts Window

Agenda Window

Instance Window

Global Window

Focus Window

All Above – открывает все окна

None – убирает все окна

Clear dialog window – очищает окно с командной строкой.

Меню Help – содержит окно «О программе» и справочную систему по CLIPS.

Как правило, для запуска программы на CLIPS необходимо выполнить следующую последовательность действий:

· загрузить конструкции из файла;

· выполнить команду reset;

· выполнить команду run.

В приложении 2 приведен перечень команд и описание языка CLIPS в БНФ.

Постановка задачи

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

Основными входными параметрами, определяющими качество работы реакторов (коксовых камер) являются: х1 – расход сырья, х2 – температура на входе реактора, х3 – коксуемость сырья, х4 – коэффициент рециркуляции, которые можно считать управляющими параметрами. Выходным параметром является качество кокса – выход летучих фракций. Нефтепродукты, полученные в результате работы коксовых камер, направляются в основную ректификационную колонну.

На основе экспертного опроса были получены следующие приоритеты входных параметров по их влиянию на выходной:

1 – коэффициент рециркуляции (x4);

2 – коксуемость (x3);

3 – расход сырья (x1);

4 – температура на входе реактора (x2).

Чем приоритетнее параметр (сначала 1, потом 2, ...), тем большее влияние он оказывает на результат.

Наиболее информативны входные параметры ректификационной колонны: х5 – расход сырья, х6 – расход острого орошения, х7 – расход циркуляционного орошения, х8 – температура перетока. Выходной параметр, характеризующий качество работы колонны – качество бензина.

Аналогично на основе экспертного опроса были получены следующие приоритеты входных параметров по их влиянию на выходной:

1 – расход острого орошения (x6);

2 – расход циркуляционного орошения (x7);

3 – расход сырья (x5);

4 – температура перетока (x8).

Как и ранее, чем приоритетнее параметр (сначала 1, потом 2, ...), тем большее влияние он оказывает на результат.

Итогом является величина, оценивающая качество работы всей системы (анализируется качество бензина и кокса).

В данном примере рассмотрено три класса, два из которых представляют собой коксовые камеры и ректификационную колонну, а третий является их потомком с дополнительно определенным параметром temp_pechi, определяющим температуру печей первичного сырья. Пользователю вначале работы предлагается определить все параметры установки путем ввода соответствующих ответов на вопросы. Далее система вывода определяет качество двух выходных параметров – качества бензина, полученного от ректификационной колонны, и качество кокса, полученного от коксовых камер. В итоге на основе полученных результатов делается вывод о работе всей установки в целом: оценивается качество бензина и кокса и выдается оценка работы всей системы в целом.

Листинг программы

Ниже приведен листинг программы, снабженный пояснениями (пояснения не оформлены в виде комментариев CLIPS для удобства чтения).

 

Класс коксовой камеры:

(defclass koks

(is-a USER)

(role concrete) 

(pattern-match reactive)

(slot rashod_syria1 (type SYMBOL)(create-accessor read-write)
(visibility public))

(slot temp_na_vhode (type SYMBOL)(create-accessor read-write)
(visibility public))

(slot koksuemost (type SYMBOL)(create-accessor read-write)
(visibility public))

(slot koef_recircul (type SYMBOL)(create-accessor read-write)
(visibility public))

)

Класс ректификационной колонны:

(defclass colonna

(is-a USER)

(role concrete)

(pattern-match reactive)

(slot rashod_syria2  (type SYMBOL)(create-accessor read-write)
(visibility public))

(slot rashod_ostr_orosh (type SYMBOL)(create-accessor read-write)
(visibility public))

(slot rashod_circ_orosh (type SYMBOL)(create-accessor read-write)
(visibility public))

(slot temp_peretoka (type SYMBOL)(create-accessor read-write)
(visibility public))

)

Потомок классов коксовой камеры и ректификационной колонны с дополни­тель­но оп­ре­де­лен­ным параметром temp_pechi, определяющим температу­ру печей первичного сырья:

(defclass U_Z_K

(is-a colonna koks)

(role concrete)

(pattern-match reactive)

(slot temp_pechi (type SYMBOL)(create-accessor read-write))

(slot answer (type SYMBOL)(create-accessor read-write))

)

Объект класса U_Z_K:

(definstances Ustanovka

(uzk of U_Z_K

(rashod_syria1 ln)

(koksuemost ln)

(koef_recircul ln)

(temp_na_vhode n)

(rashod_syria2 mn)

(rashod_ostr_orosh mn)

(rashod_circ_orosh ln)

(temp_peretoka lln)

(temp_pechi n)

(answer ln)

))

Шаблон для промежуточных результатов проверки:

(deftemplate provUZK

(field provereno (type SYMBOL)(default net))

(field resultatCam (type SYMBOL)(default net))

(field resultatCol (type SYMBOL)(default net))

)

Шаблон для результатов работы:

(deftemplate ResRaboty

(field vyhod_letuch (type SYMBOL)(default net))

(field kach_benzina (type SYMBOL)(default net))

)

Правило, которое связывается с initial-fact (всегда есть в системе по умолчанию), выполняется при запуске программы:

(defrule zapusk (initial-fact)
=> (assert (provUZK))(assert (ResRaboty)) (send [uzk] vopros))

Печать вопросов и получение ответов пользователя для формирования решения:

(defmessage-handler U_Z_K vopros()

(printout t crlf «Программа по определению качества работы установки замедленного коксования.»)

(printout t crlf «Для ответа на вопрос наберите одно из значений »)

(printout t crlf «ln (ниже нормы),lln (чуть ниже нормы),n (в норме),lmn (чуть выше нормы), mn (выше нормы)» t crlf)

(send [uzk] vopros1 rashod_syria1 «Какой расход сырья в коксовых камерах? -> »)

(send [uzk] vopros1 koksuemost «Какова коксуемость в коксовых камерах? -> »)

(send [uzk] vopros1 koef_recircul «Каков коэффициент рециркуляции в коксовых камерах? ->»)

(send [uzk] vopros1 temp_na_vhode «Какова температура на входе в коксовые камеры? -> »)

(send [uzk] vopros1 rashod_syria2 «Какой расход сырья в ректификационной колонне? -> »)

(send [uzk] vopros1 rashod_ostr_orosh «Каков расход острого орошения в ректификационной колонне? -> »)

(send [uzk] vopros1 rashod_circ_orosh «Каков расход циркуляционного орошения в ректификационной колонне? -> »)

(send [uzk] vopros1 temp_peretoka «Какова температура перетока в ректификационной колонне? -> »)

(send [uzk] vopros1 temp_pechi «Какова температура основной печи? -> »)

)

 

(defmessage-handler U_Z_K vopros1(?ab ?bc)

(printout t crlf ?bc)

(dynamic-put answer (read))

(if (or (eq (dynamic-get answer) ln)

   (eq (dynamic-get answer) lln)

    (eq (dynamic-get answer) n)

   (eq (dynamic-get answer) lmn)

  (eq (dynamic-get answer) mn)

 )

then (dynamic-put ?ab (dynamic-get answer))

else (send [uzk] vopros1 ?ab ?bc)

))

Проверка температуры печи:

(defmessage-handler U_Z_K poriadok() 

(if (or (eq (dynamic-get temp_pechi) lln)

  (eq (dynamic-get temp_pechi) n)

  (eq (dynamic-get temp_pechi) lmn)

)

then TRUE

else

(printout t crlf «Температура не подходит для начала работы!» t crlf)

FALSE

))

(defrule nachalo

?rr <- (provUZK (provereno net)) =>

(if (eq (send [uzk] poriadok) TRUE)

then

(send [uzk] pechat) (modify ?rr (provereno da))

))

Вывод на экран параметров (введенных и полученных на основе введенных):

(defmessage-handler U_Z_K pechat()

(printout t crlf «Параметры для расчета качества кокса, полученного в коксовых камерах:» t)

(printout t «Расход сырья»)

(if  (eq (dynamic-get rashod_syria1) ln)

then (printout t «ниже нормы» t)

TRUE

else

(if  (eq (dynamic-get rashod_syria1) lln)

then (printout t «чуть ниже нормы» t )

else

  (if  (eq (dynamic-get rashod_syria1) n)

  then (printout t «в норме» t )

  else

     (if  (eq (dynamic-get rashod_syria1) lmn)

     then (printout t «чуть выше нормы» t)

     else (printout t «выше нормы» t)

))))

(printout t «Температура на входе»)

(if  (eq (dynamic-get temp_na_vhode) ln)

then (printout t «ниже нормы» t)

TRUE

else

(if (eq (dynamic-get temp_na_vhode) lln)

then (printout t «чуть ниже нормы» t )

else

(if  (eq (dynamic-get temp_na_vhode) n)

  then (printout t «в норме» t )

else

(if  (eq (dynamic-get temp_na_vhode) lmn)

   then (printout t «чуть выше нормы» t)

   else (printout t «выше нормы» t )

))))

(printout t «Коксуемость»)

(if  (eq (dynamic-get koksuemost) ln)

then (printout t «ниже нормы» t)

TRUE

else

(if  (eq (dynamic-get koksuemost) lln)

then (printout t «чуть ниже нормы» t)

else

(if  (eq (dynamic-get koksuemost) n)

  then (printout t «в норме» t)

else

  (if  (eq (dynamic-get koksuemost) lmn)

     then (printout t «чуть выше нормы» t )

else (printout t «выше нормы» t )

))))

(printout t «Коэффициент рециркуляции»)

(if (eq (dynamic-get koef_recircul) ln)

then (printout t «ниже нормы» t crlf)

TRUE

else

(if (eq (dynamic-get koef_recircul) lln)

then (printout t «чуть ниже нормы» t crlf)

else

  (if (eq (dynamic-get koef_recircul) n)

  then (printout t «в норме» t crlf)

  else

     (if (eq (dynamic-get koef_recircul) lmn)

     then (printout t «чуть выше нормы» t crlf)

     else (printout t «выше нормы» t crlf)

))))

(printout t crlf «Параметры для расчета качества бензина, полученного
в ректификационной колонне:» t)

(printout t «Расход сырья»)

(if (eq (dynamic-get rashod_syria2) ln)

then (printout t «ниже нормы» t)

TRUE

else

(if (eq (dynamic-get rashod_syria2) lln)

then (printout t «чуть ниже нормы» t)

else

  (if (eq (dynamic-get rashod_syria2) n)

  then (printout t «в норме» t)

  else

     (if (eq (dynamic-get rashod_syria2) lmn)

     then (printout t «чуть выше нормы» t)

     else (printout t «выше нормы» t )

))))

(printout t «Расход острого орошения»)

(if (eq (dynamic-get rashod_ostr_orosh) ln)

then (printout t «ниже нормы» t)

TRUE

else

(if (eq (dynamic-get rashod_ostr_orosh) lln)

then (printout t «чуть ниже нормы» t)

else

  (if (eq (dynamic-get rashod_ostr_orosh) n)

  then (printout t «в норме» t)

  else

     (if (eq (dynamic-get rashod_ostr_orosh) lmn)

     then (printout t «чуть выше нормы» t)

     else (printout t «выше нормы» t )

))))

(printout t «Расход циркуляционного орошения»)

(if (eq (dynamic-get rashod_circ_orosh) ln)

then (printout t «ниже нормы» t)

TRUE

else

(if (eq (dynamic-get rashod_circ_orosh) lln)

then (printout t «чуть ниже нормы» t)

else

  (if (eq (dynamic-get rashod_circ_orosh) n)

  then (printout t «в норме» t)

  else

     (if (eq (dynamic-get rashod_circ_orosh) lmn)

     then (printout t «чуть выше нормы» t)

     else (printout t «выше нормы» t)

))))

(printout t «Температура перетока»)

(if (eq (dynamic-get temp_peretoka) ln)

then (printout t «ниже нормы» t crlf)

TRUE

else

(if (eq (dynamic-get temp_peretoka) lln)

then (printout t «чуть ниже нормы» t crlf)

else

  (if (eq (dynamic-get temp_peretoka) n)

  then (printout t «в норме» t crlf)

  else

     (if (eq (dynamic-get temp_peretoka) lmn)

     then (printout t «чуть выше нормы» t crlf)

     else (printout t «выше нормы» t crlf)

))))

)

Правила, по которым определяется выход летучих фракций:

(defrule VyhLetuchS

 (and (or

(object (name [uzk]) (koef_recircul ln)(koksuemost ln))

(object (name [uzk]) (koef_recircul ln)(koksuemost n)(rashod_syria1 ln))

(object (name [uzk]) (koef_recircul ln)(koksuemost lln))

(object (name [uzk]) (koef_recircul n)(koksuemost ln)(rashod_syria1 ln))

(object (name [uzk]) (koef_recircul lln)(koksuemost ln))

(object (name [uzk]) (koef_recircul n)(koksuemost lln)(rashod_syria1 ln) (temp_na_vhode ln))

(object (name [uzk]) (koef_recircul lln)(koksuemost lln)(rashod_syria1 ln) (temp_na_vhode ln))

(object (name [uzk]) (koef_recircul lln)(koksuemost n)(rashod_syria1 ln) (temp_na_vhode ln))

 )

 ?p1 <- (ResRaboty (vyhod_letuch net))

 ?p2 <- (provUZK (provereno da)))

=> (modify ?p1 (vyhod_letuch s) ) (printout t «Плохое качество кокса!» crlf)

)

(defrule VyhLetuchLS

 (and (or

(object (name [uzk]) (koef_recircul ln)(koksuemost n))

(object (name [uzk]) (koef_recircul ln)(koksuemost lmn))

(object (name [uzk]) (koef_recircul ln)(koksuemost mn)(rashod_syria1 ln))

(object (name [uzk]) (koef_recircul lln)(koksuemost n))

(object (name [uzk]) (koef_recircul n)(koksuemost ln))

(object (name [uzk]) (koef_recircul n)(koksuemost lln)(rashod_syria1 lln))

(object (name [uzk]) (koef_recircul n)(koksuemost lln)(rashod_syria1 n))

 )

 ?p1 <- (ResRaboty (vyhod_letuch net))

 ?p2 <- (provUZK (provereno da)))

=> (modify ?p1 (vyhod_letuch ls))

(printout t «Качество кокса ниже среднего!» crlf)

)

(defrule VyhLetuchLB

 (and (or

(object (name [uzk]) (koef_recircul mn)(koksuemost n))

(object (name [uzk]) (koef_recircul mn)(koksuemost lln))

(object (name [uzk]) (koef_recircul mn)(koksuemost ln)(rashod_syria1 mn))

(object (name [uzk]) (koef_recircul lmn)(koksuemost lmn))

(object (name [uzk]) (koef_recircul lmn)(koksuemost n))

(object (name [uzk]) (koef_recircul n)(koksuemost mn))

(object (name [uzk]) (koef_recircul n)(koksuemost lmn)(rashod_syria1 lmn))

(object (name [uzk]) (koef_recircul n)(koksuemost lmn)(rashod_syria1 n))

 )

 ?p1 <- (ResRaboty (vyhod_letuch net))

 ?p2 <- (provUZK (provereno da)))

=> (modify ?p1 (vyhod_letuch lb)) (printout t «Хорошее качество кокса!» crlf)

)

(defrule VyhLetuchB

 (and (or

(object (name [uzk]) (koef_recircul mn)(koksuemost mn))

(object (name [uzk]) (koef_recircul mn)(koksuemost n)(rashod_syria1 mn))

(object (name [uzk]) (koef_recircul mn)(koksuemost lmn))

(object (name [uzk]) (koef_recircul n)(koksuemost mn)(rashod_syria1 mn))

(object (name [uzk]) (koef_recircul lmn)(koksuemost mn))

(object (name [uzk]) (koef_recircul n)(koksuemost lmn)(rashod_syria1 mn) (temp_na_vhode mn))

(object (name [uzk]) (koef_recircul lmn)(koksuemost lmn)(rashod_syria1 mn) (temp_na_vhode mn))

(object (name [uzk]) (koef_recircul lmn)(koksuemost n)(rashod_syria1 mn) (temp_na_vhode mn))

 )

 ?p1 <- (ResRaboty (vyhod_letuch net))

 ?p2 <- (provUZK (provereno da)))

=> (modify ?p1 (vyhod_letuch b)) (printout t «Отличное качество кокса!» crlf)

)

(defrule VyhLetuchM

 (and (or

(not (object (name [uzk]) (koef_recircul ln)(koksuemost mn)
(rashod_syria1 ln)))

(object (name [uzk]) (koef_recircul ln)(koksuemost mn))

(object (name [uzk]) (koef_recircul lln)(koksuemost lln)(rashod_syria1 mn))

(object (name [uzk]) (koef_recircul lln)(koksuemost n)(rashod_syria1 lmn))

(object (name [uzk]) (koef_recircul lln)(koksuemost n)(rashod_syria1 mn))

(object (name [uzk]) (koef_recircul lln)(koksuemost lmn))

(object (name [uzk]) (koef_recircul lln)(koksuemost mn))

(object (name [uzk]) (koef_recircul n)(koksuemost ln)(rashod_syria1 mn))

(object (name [uzk]) (koef_recircul n)(koksuemost lln)(rashod_syria1 lmn))

(object (name [uzk]) (koef_recircul n)(koksuemost lln)(rashod_syria1 mn))

(object (name [uzk]) (koef_recircul n)(koksuemost n))

(not (object (name [uzk]) (koef_recircul mn)(koksuemost ln)
(rashod_syria1 mn)))

(object (name [uzk]) (koef_recircul mn)(koksuemost ln))

(object (name [uzk]) (koef_recircul lmn)(koksuemost lmn)(rashod_syria1 ln))

(object (name [uzk]) (koef_recircul lmn)(koksuemost n)(rashod_syria1 lln))

(object (name [uzk]) (koef_recircul lmn)(koksuemost n)(rashod_syria1 ln))

(object (name [uzk]) (koef_recircul lmn)(koksuemost lln))

(object (name [uzk]) (koef_recircul lmn)(koksuemost ln))

(object (name [uzk]) (koef_recircul n)(koksuemost mn)(rashod_syria1 ln))

(object (name [uzk]) (koef_recircul n)(koksuemost lmn)(rashod_syria1 lln))

(object (name [uzk]) (koef_recircul n)(koksuemost lmn)(rashod_syria1 ln))

 )

 ?p1 <- (ResRaboty ( vyhod_letuch net))

 ?p2 <- (provUZK (provereno da)))

=> (printout t «Среднее качество кокса» crlf)(modify ?p1 (vyhod_letuch m))

)

Правила, по которым определяется качество бензина:

(defrule KachBenzS

 (and (or

(object (name [uzk]) (rashod_ostr_orosh ln)(rashod_circ_orosh ln))

(object (name [uzk]) (rashod_ostr_orosh ln)(rashod_circ_orosh n) (rashod_syria2 ln))

(object (name [uzk]) (rashod_ostr_orosh ln)(rashod_circ_orosh lln))

(object (name [uzk]) (rashod_ostr_orosh n)(rashod_circ_orosh ln) (rashod_syria2 ln))

(object (name [uzk]) (rashod_ostr_orosh lln)(rashod_circ_orosh ln))

(object (name [uzk]) (rashod_ostr_orosh n)(rashod_circ_orosh lln)
(rashod_syria2 ln) (temp_peretoka ln))

(object (name [uzk]) (rashod_ostr_orosh lln)(rashod_circ_orosh lln) (rashod_syria2 ln)(temp_peretoka ln))

(object (name [uzk]) (rashod_ostr_orosh lln)(rashod_circ_orosh n)
(rashod_syria2 ln) (temp_peretoka ln))

 )

 ?p1 <- (ResRaboty (kach_benzina net))

 ?p2 <- (provUZK (provereno da)))

=> (modify ?p1 (kach_benzina s)) (printout t «Плохое качество бензина!» crlf)

)

(defrule KachBenzB

 (and (or

(object (name [uzk]) (rashod_ostr_orosh mn)(rashod_circ_orosh mn))

(object (name [uzk]) (rashod_ostr_orosh mn)(rashod_circ_orosh n)
(rashod_syria2 mn))

(object (name [uzk]) (rashod_ostr_orosh mn)(rashod_circ_orosh lmn))

(object (name [uzk]) (rashod_ostr_orosh n)(rashod_circ_orosh mn)
(rashod_syria2 mn))

(object (name [uzk]) (rashod_ostr_orosh lmn)(rashod_circ_orosh mn))

(object (name [uzk]) (rashod_ostr_orosh n)(rashod_circ_orosh lmn)
(rashod_syria2 mn)(temp_peretoka mn))

(object (name [uzk]) (rashod_ostr_orosh lmn)(rashod_circ_orosh lmn) (rashod_syria2 mn)(temp_peretoka mn))

(object (name [uzk]) (rashod_ostr_orosh lmn)(rashod_circ_orosh n)
(rashod_syria2 mn) (temp_peretoka mn))

 )

 ?p1 <- (ResRaboty (kach_benzina net))

 ?p2 <- (provUZK (provereno da)))

=>(modify ?p1 (kach_benzina b))(printout t «Отличное качество бензина!» crlf)

)

(defrule KachBenzLS

 (and (or

(object (name [uzk]) (rashod_ostr_orosh ln)(rashod_circ_orosh n)) (object (name [uzk]) (rashod_ostr_orosh ln)(rashod_circ_orosh lmn))

(object (name [uzk]) (rashod_ostr_orosh ln)(rashod_circ_orosh mn)
(rashod_syria2 ln))

(object (name [uzk]) (rashod_ostr_orosh lln)(rashod_circ_orosh lln))

(object (name [uzk]) (rashod_ostr_orosh lln)(rashod_circ_orosh n))

(object (name [uzk]) (rashod_ostr_orosh n)(rashod_circ_orosh ln))

(object (name [uzk]) (rashod_ostr_orosh n)(rashod_circ_orosh lln)
(rashod_syria2 lln))

(object (name [uzk]) (rashod_ostr_orosh n)(rashod_circ_orosh lln)
(rashod_syria2 n))

 )

 ?p1 <- (ResRaboty (kach_benzina net))

 ?p2 <- (provUZK (provereno da)))

=> (modify ?p1 (kach_benzina ls)) (printout t «Качество бензина ниже среднего!» crlf)

)

(defrule KachBenzLB

 (and (or

(object (name [uzk]) (rashod_ostr_orosh mn)(rashod_circ_orosh n))

(object (name [uzk]) (rashod_ostr_orosh mn)(rashod_circ_orosh lln))

(object (name [uzk]) (rashod_ostr_orosh mn)(rashod_circ_orosh ln)
(rashod_syria2 mn))

(object (name [uzk]) (rashod_ostr_orosh lmn)(rashod_circ_orosh lmn))

(object (name [uzk]) (rashod_ostr_orosh lmn)(rashod_circ_orosh n))

(object (name [uzk]) (rashod_ostr_orosh n)(rashod_circ_orosh mn))

(object (name [uzk]) (rashod_ostr_orosh n)(rashod_circ_orosh lmn)
(rashod_syria2 lmn))

(object (name [uzk]) (rashod_ostr_orosh n)(rashod_circ_orosh lmn)
(rashod_syria2 n))

 )

 ?p1 <- (ResRaboty (kach_benzina net))

 ?p2 <- (provUZK (provereno da)))

=>(modify ?p1 (kach_benzina lb))(printout t «Хорошее качество бензина!» crlf)

)

(defrule KachBenzM

 (and (or

(not (object (name [uzk]) (rashod_ostr_orosh ln)(rashod_circ_orosh mn) (rashod_syria2 ln)))

(object (name [uzk]) (rashod_ostr_orosh ln)(rashod_circ_orosh mn))

(object (name [uzk]) (rashod_ostr_orosh lln)(rashod_circ_orosh lln) (rashod_syria2 mn))

(object (name [uzk]) (rashod_ostr_orosh lln)(rashod_circ_orosh n)
(rashod_syria2 lmn))

(object (name [uzk]) (rashod_ostr_orosh lln)(rashod_circ_orosh n)
(rashod_syria2 mn))

(object (name [uzk]) (rashod_ostr_orosh lln)(rashod_circ_orosh lmn))

(object (name [uzk]) (rashod_ostr_orosh lln)(rashod_circ_orosh mn))

(object (name [uzk]) (rashod_ostr_orosh n)(rashod_circ_orosh ln)
(rashod_syria2 mn))

(object (name [uzk]) (rashod_ostr_orosh n)(rashod_circ_orosh lln)
(rashod_syria2 lmn))

(object (name [uzk]) (rashod_ostr_orosh n)(rashod_circ_orosh lln)
(rashod_syria2 mn))

(object (name [uzk]) (rashod_ostr_orosh n)(rashod_circ_orosh n))

(not (object (name [uzk]) (rashod_ostr_orosh mn)(rashod_circ_orosh ln) (rashod_syria2 mn)))

(object (name [uzk]) (rashod_ostr_orosh mn)(rashod_circ_orosh ln))

(object (name [uzk]) (rashod_ostr_orosh lmn)(rashod_circ_orosh lmn) (rashod_syria2 ln))

(object (name [uzk]) (rashod_ostr_orosh lmn)(rashod_circ_orosh n)
(rashod_syria2 lln))

(object (name [uzk]) (rashod_ostr_orosh lmn)(rashod_circ_orosh n)
(rashod_syria2 ln))

(object (name [uzk]) (rashod_ostr_orosh lmn)(rashod_circ_orosh lln))

(object (name [uzk]) (rashod_ostr_orosh lmn)(rashod_circ_orosh ln))

(object (name [uzk]) (rashod_ostr_orosh n)(rashod_circ_orosh mn)
(rashod_syria2 ln))

(object (name [uzk]) (rashod_ostr_orosh n)(rashod_circ_orosh lmn)
(rashod_syria2 lln))

(object (name [uzk]) (rashod_ostr_orosh n)(rashod_circ_orosh lmn)
(rashod_syria2 ln))

 )

 ?p1 <- (ResRaboty (kach_benzina net))

 ?p2 <- (provUZK (provereno da)))

=> (printout t «Среднее качество бензина» crlf)(modify ?p1 (kach_benzina m)))

Вывод результатов работы:

(defrule ItogRaboty

(ResRaboty (vyhod_letuch ?l)(kach_benzina ?k))=>(send [uzk] NewResult ?l ?k)

)

(defmessage-handler U_Z_K NewResult (?l ?k)

 (if (or (eq ?l net) (eq ?k net))

then FALSE

else     

(if (or

 (and (eq ?l s) (eq ?k s))

 (and (eq ?l ls) (eq ?k s))

 (and (eq ?l s) (eq ?k ls))

 (and (eq ?l s) (eq ?k m))

 (and (eq ?l m) (eq ?k s))

)

then (printout t «Плохая работа установки!» crlf)

else

(if (or

(and (eq ?l ls) (eq ?k ls))

(and (eq ?l m) (eq ?k m))

(and (eq ?l lb) (eq ?k lb))

(and (eq ?l ls) (eq ?k m))

(and (eq ?l m) (eq ?k ls))

(and (eq ?l lb) (eq ?k m))

(and (eq ?l lb) (eq ?k m))

(and (eq ?l b) (eq ?k ls))

(and (eq ?l ls) (eq ?k b))

)

then (printout t «Нормальная работа установки» crlf)

else

  (if (or

(and (eq ?l b) (eq ?k b))

(and (eq ?l b) (eq ?k lb))

(and (eq ?l lb) (eq ?k b))

(and (eq ?l b) (eq ?k m))

(and (eq ?l m) (eq ?k b))

   )

   then (printout t «Хорошая работа установки»crlf)

   else (printout t «Установка плохо вырабатывает один из компонентов» crlf)

)))))

 

КОНТРОЛЬНЫЕ ВОПРОСЫ

1. Какая модель представления знаний эксперта используется в оболочке 1stCLASS?

2. Каково назначение экранов в оболочке 1stCLASS?

3. Какие методы построения дерева решений существуют в оболочке 1stCLASS?

4. Какие методы обработки коэффициентов правдоподобия результата используются в оболочке 1stCLASS?

5. Каково представление знаний эксперта в системе EXSYS?

6. В какиех режимах может функционировать система EXSYS?

7. Какие шкалы оценивания коэффициентов уверенности используются в системе EXSYS?

8. Как используются математические выражения в системе EXSYS?

9. Как используются внешние программы в системе EXSYS?

10. Каково представление знаний эксперта в системе GURU?

11. В какиех режимах может функционировать система GURU?

12. Какова специфика работы в режиме меню?

13. Как определяется режим проверки конфликтующих правил и очередность проверки правил в системе GURU?

14. По каким правилам объединяются факторы уверенности в системе GURU?

15. Как используются нечеткие переменные в системе GURU?

16. Какие методы объяснения результатов используются в системе GURU?

17. Каковы основные компоненты языка CLIPS?

18. Как осуществляется работа с фактами в языке CLIPS?

19. Какие правила существуют в языке CLIPS?

20. Какие функции существуют языка CLIPS?

БИБЛИОГРАФИЧЕСКИЙ СПИСОК

1. Искусственный интеллект: Справочник. В 3-х кн. – М.: Радио и связь, 1990. – 464 с.

2. Статические и динамические экспертные системы: Учебное пособие / Э.В. Попов, И.Б. Фоминых, Е.Б. Кисель, М.Д. Шапот. – М.: Финансы и статистика, 1996. – 320 с.

3. Джексон П. Введение в экспертные системы: Учебное пособие. Пер. с англ. – М.: «Вильямс», 2001. – 624 с.

4. Т.А. Гаврилова, В.Ф. Хорошевский. Базы знаний интеллектуальных систем – СПб.: Питер, 2000. – 384 с.

6. Еремеев А.П. Разработка экспертных систем на персональных ЭВМ на базе оболочек М.1 и 1stCLASS. – М.: Издательство МЭИ, 1993. – 39 с.

7. Рокотян И.С., Хачатурова Е.А. Разработка баз знаний на основе экспертной системы EXSYS. – М.: Издательство МЭИ, 1998. – 28 с.

8. Еремеев А.П. Проектирование экспертных систем средствами инструментальной системы GURU. – М.: Издательство МЭИ, 1996. – 52 с.

9. Joseph Giarrantano, Gary Riley. Expert Systems: principles and programming – 3rd ed. 1998. – 597 p.

ПРИЛОЖЕНИЕ 1


Дата добавления: 2018-05-12; просмотров: 613; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!