Создание
ЭС
В качестве ТП рассмотрим создание деталей сложной формы, например, вытачивание лопаток турбины. В данном случае ИРС осуществляет управление технологическим процессом через систему управления высшего уровня, способную к самостоятельному функционированию и обеспечивающую выполнение всех основных функций по управлению сбором и анализом информации и принятию оперативных решений по ходу процесса на основе разрабатываемой ЭС. В состав ИРС входит ряд локальных управляющих подсистем нижнего уровня, каждая из которых осуществляет управление одним из компонентов ТП по жесткому aлгоритму в реальном времени. ЭС управления ТП, разрабатываемая в рамках данной лекции, обеспечивает организацию сбора информации об
Приступим к
| №№ п/п | Обозначение параметра | Название параметра | Единица измерения | Диапазон значений |
|---|---|---|---|---|
| 1 | Vr | Скорость резания | об/мин | A, B, C |
| 2 | Vm | Подача | мм/с | 10-180 с шагом 10 |
| 3 | T | Виды траектории | Круговая (T=0), по участкам 1(T=1), ..., по участкам 6(T=6) | |
| 4 | I | Инструмент | алмазный (I=1), на бакелитовой основе (I=2), на эльборовой основе (I=3) | |
| 5 | G | Геометрические параметры инструмента | тор (G=tor), линия (G=line), макс.радиус вращения Rm, угол контакта инструмента и детали J, угол заточки S | |
| 6 | Размер детали | мм | 10,300,800 | |
| 7 | Dm | Материал детали | Титан1 (Dm=1), Титан2 (Dm=2), Жаропрочная сталь (Dm=3) | |
| 8 | Da | Требования к детали по точности | 1, 2, 3 | |
| 9 | Достигнутая точность детали | 1, 2, 3 |
Запишем со слов экспертов информационные образы управляющих решений в алфавите значений информационных параметров. В таблице 7.2 представлена база знаний (база правил) нашей , Dm, Da, на основе данного воздействия.
| №№ п/п | |
Dm |
Da |
|
Управляющее воздействие | Достоверность | Прим. |
|---|---|---|---|---|---|---|---|
| 1 | 10 | 1 | 1 | Vr=A, Vm=10, T=0, I=1, G=tor |
0,98 | ||
| 2 | 10 | 2 | 2 | Vr=B, Vm=10, T=1, I=1, G=line, Rm=40, J=80, S=60 |
0,95 | ||
| 3 | 300 | 2 | Vr=B, Vm=20, T=2, I=1, G=tor |
0,92 | |||
| 4 | 300 | 3 | Vr=C, Vm=40, T=3, I=2, G=line, Rm=50, J=75, S=75 |
0,97 | |||
| 5 | 800 | 2 | 2 | 1 | Vr=B, Vm=60, T=4, I=2, G=line, Rm=60, J=70, S=70 |
0,94 | |
| 6 | 800 | < 3 | Vr=C, Vm=80, T=6, I=3, G=line, Rm=60, J=60, S=75 |
0,90 | |||
| 7 | 800 | 3 | Vr=B, Vm=40, T=6, I=3, G=line, Rm=60, J=60, S=75 |
0,90 |
Достоверность правильности управляющего воздействия должна автоматически корректироваться по результатам изготовления детали. В табл. 7.2 приведен учебный пример базы знаний, упрощенный для целей реализации. Здесь не сформулированы задачи работы с базой данных. , работает строка 6 таблицы 7.2, как только достигло значения 3, начинает работать строка 7. Это и есть простейший пример работы ЭС в реальном времени.
Следует отметить, что несмотря на многочисленные преимущества функционального программирования, некоторые задачи лучше решать в терминах объектно-ориентированного программирования (
Читатель может познакомиться с языком
Отличительной особенностью
defrule |
определение правил; |
deffacts |
определение фактов; |
deftemplate |
определение шаблона факта; |
defglobal |
определение глобальных переменных; |
deffunction |
определение функций; |
defmodule |
определение модулей (совокупности правил); |
defclass |
определение классов; |
defintances |
определение объектов по шаблону, заданному defclass ; |
defmessagehandler |
определение сообщений для объектов; |
defgeneric |
создание заголовка родовой функции; |
defmethod |
определение метода родовой функции. |
Конструкторы не возвращают никаких значений, в отличии от функций, например:
(deftemplate person (slot name) (slot age) (multislot friends)) (deffacts people (person (name Joe) (age 20)) (person (name Bob) (age 20)) (person (name Joe) (age 34)) (person (name Sue) (age 34)) (person (name Sue) (age 20)))
Пример функции:
(deffunction factorial (?a) (if (or (not (integerp ? a)) (< ? a0)) then (printout t "Factorial Error!" crlf) else (if (= ? a0) then 1 else (*? a (factorial ($-$ ? a1))))))
Правила в
Пример правила представлен ниже:
(deftemplate data (slot x) (slot y)) (defrule twice (data (x ? x) (y =(*2 ? x))) =>) (assert (data (x2) (y4)); f-0 (data (x3) (y9))); f-1
Здесь самая распространенная в добавляет новые факты в список правил. В противоположность функция удаляет факты из списка фактов, например:
(defrule vis11 ?doors < — (fit ? wdfit) (test (eq ? wdfit no)) => (assert (EVIDENCE OF MAJOR ACCIDENT)) (retract ? doors))
В этом правиле проверяется наличие факта и в случае его отсутствия факт удаляется из списка фактов задачи.
Функция modify является также весьма распространенной. Она позволяет в определенном факте поменять значение слота, например,
(deftemplate age (slot value)) (assert (age (value young))) (modify 0 (value old))
Следующий пример описывает представление данных в виде фактов, объектов и глобальных переменных. Примеры фактов:
(voltage is 220 volt) (meeting (subject "AI") (chief "Kuzin") (Room "3240"))
В первой строке приведен упорядоченный факт, во второй - неупорядоченный, в котором порядок слотов не важен.
integer, float, string, symbol, external-address, , instance-name, instance-address.
Пример integer: | 594 | 23 | +51 | -17 |
|---|---|---|---|---|
Пример float: | 594e2 | 23.45 | +51.0 | -17.5e-5 |
String — это строка символов, заключенная в двойные кавычки.
Пример string: "
If |
оператор ветвления; |
While |
|
loop-for-count |
итеративный цикл; |
prong |
объединение действий в одной |
prong$ |
выполнение набора действий над каждым элементом поля; |
return |
прерывание функции, цикла, правила и т.д.; |
break |
то же, что и return, но без возвращения параметров; |
switch |
оператор множественного ветвления; |
bind |
создание и связывание переменных. |
Функции true или false ) следует выделить следующие группы:
and, or, not=, $$\ne,$$ >, $$\ge,$$ <, $$\le$$integerp, floatp, stringp, symbolp, pointerp (относится ли аргумент к xternal-address ), numberp (относится ли аргумент к integer или float ), lexemerp (относится ли аргумент к string или symbol ), evenp (проверка целого на четность), oddp (проверка целого на нечетность), multifildp (является ли аргумент составным полем).eq, neqСреди математических функций следует выделить следующие группы:
+, -, *, /, max, min, div (целочисленное деление), abs (абсолютное значение), float (преобразование в тип float ), integer (преобразование в тип integer )sqrt (извлечение корня), round (mod (вычисление остатка от деления)sin, sinh, cos, cosh, tan, tanh, acos , acosh, acot, acoth, acsc, acsch, asec, asech, asin, asinh, atan, atanh, cot , coth, csc, csch, sec, sech, deg-grad (преобразование из градусов в секторы), deg-rad (преобразование из градусов в радианы), grad-deg (преобразование из секторов в градусы), rad -deg (преобразование из радиан в градусы)log, log10, exp, piСреди функций работы со строками следует назвать функции:
str-cat |
объединение строк, |
sym-cat |
объединение строк в значение типа symbol, |
sub-string |
|
str-index |
поиск подстроки, |
|
выполнение строки в качестве команды |
build |
выполнение строки в качестве конструктора |
|
преобразование символов в символы верхнего регистра, |
lowcase |
преобразование символов в символы нижнего регистра, |
str- |
сравнение строк, |
str-length |
определение длины строки, |
check-syntax |
проверка синтаксиса строки, |
string-to-field |
возвращение первого поля строки. |
Функции работы с составными величинами являются одной из отличительных особенностей языка
create$ |
создание составной величины, |
nth$ |
получение элемента составной величины, |
members |
поиск элемента составной величины, |
subset$ |
проверка одной величины на подмножество другой, |
delete$ |
удаление элемента составной величины, |
|
создание составной величины из строки, |
|
|
subseq$ |
извлечение подпоследовательности из составной величины, |
replace$ |
замена элемента составной величины, |
insert$ |
добавление новых элементов в составную величину, |
first$ |
получение первого элемента составной величины, |
rest$ |
получение остатка составной величины, |
length$ |
определение числа элементов составной величины, |
delete-member$ |
удаление элементов составной величины, |
replace-member$ |
замена элементов составной величины. |
Функции ввода-вывода используют следующие логические имена устройств:
stdin |
устройство ввода, |
stdout |
устройство вывода, |
wclips |
устройство, используемое как справочное, |
wdialog |
устройство для отправки пользователю сообщений, |
wdisplay |
устройство для отображения правил, фактов и т.,п., |
werror |
устройство вывода сообщений об ошибках, |
wwarning |
устройство для вывода предупреждений, |
wtrase |
устройство для вывода отладочной информации, |
Собственно
open |
открытие файла (виды доступа r, w, r+, a, wb ), |
close |
|
|
вывод информации на заданное устройство, |
read |
ввод данных с заданного устройства, |
readline |
ввод строки с заданного устройства, |
format |
форматированный вывод на заданное устройство, |
rename |
|
remove |
удаление файла. |
Среди двух десятков команд
load |
загрузка конструкторов из текстового файла, |
load+ |
загрузка конструкторов из текстового файла без отображения, |
reset |
сброс рабочей памяти системы |
clear |
очистка рабочей памяти системы, |
run |
выполнение загруженных конструкторов, |
save |
сохранение созданных конструкторов в текстовый файл, |
exit |
|
| выход из |
В рамках нашего краткого описания опустим список функций для работы с методами родовых функций и список функций для работы с классами, объектами, слотами, обработчиками сообщений. С этим можно ознакомиться по документации. Список сообщений об ошибках приведен в .
В завершение следует иметь в виду, что
Программа ЭС управления ТП по обработке деталей сложной формы, разработанная на основе табл. 7.1 и табл. 7.2, выглядит следующим образом.
;;;======================================================
;;; Control Expert System of technological process
;;;
;;; This expert system administers technological process
;;; of creations of details of the complex form
;;;
;;; CLIPS Version 6.0 Example
;;;
;;; To execute, merely load, reset and run.
;;;======================================================
(deffacts initial-state
(Ds 800)
(Dm 2)
(Da 2)
(Dar 1))
(defrule rule1
(declare (salience 9098))
(Ds 10)
(Dm 1)
(Da 1)
=>
(printout t "Rule1: Vr=A, Vm=10, T=0, I=1, G=tor " crlf))
(defrule rule2
(declare (salience 9095))
(Ds 10)
(Dm 2)
(Da 2)
=>
(printout t "Rule2: Vr=B, Vm=10, T=1, I=1, G=line, Rm=40, J=80, S=60 " crlf))
(defrule rule3
(declare (salience 9092))
(Ds 300)
(Dm 2)
=>
(printout t "Rule3: Vr=B, Vm=20, T=2, I=1, G=tor " crlf))
(defrule rule4
(declare (salience 9097))
(Ds 300)
(Da 3)
=>
(printout t "Rule4: Vr=C, Vm=40, T=3, I=2, G= line, Rm=50, J=75, S=75" crlf))
(defrule rule5
(declare (salience 9094))
(Ds 800)
(Dm 2)
(Da 2)
(Dar 1)
=>
(printout t "Rule5: Vr=B, Vm=60, T=4, I=2, G= line, Rm=60, J=70, S=70 " crlf))
(defrule rule6_7
(declare (salience 9090))
(Ds 800)
(Dar ?num)
=>
(if (< ?num 3)
then
(printout t "Rule6: Vr=B, Vm=40, T=6, I=3, G= line, Rm=60, J=60, S=75 " crlf)
else
(printout t "Rule7: Vr=C, Vm=80, T=6, I=3, G= line, Rm=60, J=60, S=75 " crlf)))
Эта программа сохраняется в виде файла с именем, например, , далее в среде clear; load и run. Эта программа начинает работать. Входные воздействия заданы в данном примере через deffacts initial-state.
Активизация правил rule5 и rule6_7, а затем по критерию максимальной достоверности первым выбирается управляющее воздействие на систему низшего уровня:
Rule5: Vr=B, Vm=60, T=4, I=2, G= line, Rm=60, J=70, S=70
В реальной жизни входные воздействия поступают через оператор read (ввод данных с заданного устройства), например, следующим образом:
(defrule Dar_parameter (declare (salience 9101)) (Dar ? num) => (printout t "Ds parameter has value "crlf" 1) 10 "crlf" 2) 300 "crlf" 3) 800 "crlf" Choose 1—3 =>") (assert (Dar =(read))))
Читателю предлагается самостоятельно дописать правила останова программы ( ) по условиям Da= или достижению заданного значения , а также правила для проверки граничных условий. Дотошный читатель, разобравшийся в программе, может спросить, зачем мне
Примером более сложной программы для решения задачи deffacts initial-state, мы получим конкретные последовательности действий робота.
(deftemplate goal (slot move) (slot on-top-of)) (deffacts initial-state (stack A B C) (stack D E F) (goal (move C) (on-top-of E))) (defrule move-directly ?goal < — (goal (move ?block1) (on-top-of ?block2)) ?stack-1 < — (stack ?block1 $?rest1) ?stack-2 < — (stack ?block2 $?rest2) => (retract ?goal ?stack-1 ?stack-2) (assert (stack $?rest1)) (assert (stack ?block1 ?block2 $?rest2)) (printout t ?block1 "moved on top of" ?block2 crlf)) (defrule move-to-floor > ?goal < — (goal (move ?block1) (on-top-of floor)) ?stack-1 < — (stack ?block1 $?rest) => (retract ?goal ?stack-1) (assert (stack ?block1)) (assert (stack $?rest)) (printout t ?block1 "moved to the floor." crlf)) (defrule clear-upper-block (goal (move ?block)) (stack ?top $? ?block $?) => (assert (goal (move ?top) (on-top-of floor)))) (defrule clear-lower-block (goal (on-top-of ?block)) (stack ?top $? ?block $?) => (assert (goal (move ?top) (on-top-of floor))))
Результат работы
CLIPS$>$ (run) A moved to the floor. B moved to the floor. D moved to the floor. C moved on top of E CLIPS$>$
В завершение лекции читателю может быть рекомендована книга Ж.Гурратано , содержащая множество примеров программирования ЭС на основе
Итак, завершающий вывод по данной лекции. Экспертные системы является эффективным и универсальным инструментом для таких задач. Они работают. Их могут уже не называть экспертными системами. Их могут называть просто системами управления, системами мониторинга, системами диагностики. Суть от этого не меняется. Мощные базы знаний, заложенные в создаваемые человеком аппаратно-программные комплексы, позволяют строить новое поколение интеллектуальных робототехнических систем.
Создание
ЭС
В качестве ТП рассмотрим создание деталей сложной формы, например, вытачивание лопаток турбины. В данном случае ИРС осуществляет управление технологическим процессом через систему управления высшего уровня, способную к самостоятельному функционированию и обеспечивающую выполнение всех основных функций по управлению сбором и анализом информации и принятию оперативных решений по ходу процесса на основе разрабатываемой ЭС. В состав ИРС входит ряд локальных управляющих подсистем нижнего уровня, каждая из которых осуществляет управление одним из компонентов ТП по жесткому aлгоритму в реальном времени. ЭС управления ТП, разрабатываемая в рамках данной лекции, обеспечивает организацию сбора информации об
Приступим к
| №№ п/п | Обозначение параметра | Название параметра | Единица измерения | Диапазон значений |
|---|---|---|---|---|
| 1 | Vr | Скорость резания | об/мин | A, B, C |
| 2 | Vm | Подача | мм/с | 10-180 с шагом 10 |
| 3 | T | Виды траектории | Круговая (T=0), по участкам 1(T=1), ..., по участкам 6(T=6) | |
| 4 | I | Инструмент | алмазный (I=1), на бакелитовой основе (I=2), на эльборовой основе (I=3) | |
| 5 | G | Геометрические параметры инструмента | тор (G=tor), линия (G=line), макс.радиус вращения Rm, угол контакта инструмента и детали J, угол заточки S | |
| 6 | Размер детали | мм | 10,300,800 | |
| 7 | Dm | Материал детали | Титан1 (Dm=1), Титан2 (Dm=2), Жаропрочная сталь (Dm=3) | |
| 8 | Da | Требования к детали по точности | 1, 2, 3 | |
| 9 | Достигнутая точность детали | 1, 2, 3 |
Запишем со слов экспертов информационные образы управляющих решений в алфавите значений информационных параметров. В таблице 7.2 представлена база знаний (база правил) нашей , Dm, Da, на основе данного воздействия.
| №№ п/п | |
Dm |
Da |
|
Управляющее воздействие | Достоверность | Прим. |
|---|---|---|---|---|---|---|---|
| 1 | 10 | 1 | 1 | Vr=A, Vm=10, T=0, I=1, G=tor |
0,98 | ||
| 2 | 10 | 2 | 2 | Vr=B, Vm=10, T=1, I=1, G=line, Rm=40, J=80, S=60 |
0,95 | ||
| 3 | 300 | 2 | Vr=B, Vm=20, T=2, I=1, G=tor |
0,92 | |||
| 4 | 300 | 3 | Vr=C, Vm=40, T=3, I=2, G=line, Rm=50, J=75, S=75 |
0,97 | |||
| 5 | 800 | 2 | 2 | 1 | Vr=B, Vm=60, T=4, I=2, G=line, Rm=60, J=70, S=70 |
0,94 | |
| 6 | 800 | < 3 | Vr=C, Vm=80, T=6, I=3, G=line, Rm=60, J=60, S=75 |
0,90 | |||
| 7 | 800 | 3 | Vr=B, Vm=40, T=6, I=3, G=line, Rm=60, J=60, S=75 |
0,90 |
Достоверность правильности управляющего воздействия должна автоматически корректироваться по результатам изготовления детали. В табл. 7.2 приведен учебный пример базы знаний, упрощенный для целей реализации. Здесь не сформулированы задачи работы с базой данных. , работает строка 6 таблицы 7.2, как только достигло значения 3, начинает работать строка 7. Это и есть простейший пример работы ЭС в реальном времени.
Следует отметить, что несмотря на многочисленные преимущества функционального программирования, некоторые задачи лучше решать в терминах объектно-ориентированного программирования (
Читатель может познакомиться с языком
Отличительной особенностью
defrule |
определение правил; |
deffacts |
определение фактов; |
deftemplate |
определение шаблона факта; |
defglobal |
определение глобальных переменных; |
deffunction |
определение функций; |
defmodule |
определение модулей (совокупности правил); |
defclass |
определение классов; |
defintances |
определение объектов по шаблону, заданному defclass ; |
defmessagehandler |
определение сообщений для объектов; |
defgeneric |
создание заголовка родовой функции; |
defmethod |
определение метода родовой функции. |
Конструкторы не возвращают никаких значений, в отличии от функций, например:
(deftemplate person (slot name) (slot age) (multislot friends)) (deffacts people (person (name Joe) (age 20)) (person (name Bob) (age 20)) (person (name Joe) (age 34)) (person (name Sue) (age 34)) (person (name Sue) (age 20)))
Пример функции:
(deffunction factorial (?a) (if (or (not (integerp ? a)) (< ? a0)) then (printout t "Factorial Error!" crlf) else (if (= ? a0) then 1 else (*? a (factorial ($-$ ? a1))))))
Правила в
Пример правила представлен ниже:
(deftemplate data (slot x) (slot y)) (defrule twice (data (x ? x) (y =(*2 ? x))) =>) (assert (data (x2) (y4)); f-0 (data (x3) (y9))); f-1
Здесь самая распространенная в добавляет новые факты в список правил. В противоположность функция удаляет факты из списка фактов, например:
(defrule vis11 ?doors < — (fit ? wdfit) (test (eq ? wdfit no)) => (assert (EVIDENCE OF MAJOR ACCIDENT)) (retract ? doors))
В этом правиле проверяется наличие факта и в случае его отсутствия факт удаляется из списка фактов задачи.
Функция modify является также весьма распространенной. Она позволяет в определенном факте поменять значение слота, например,
(deftemplate age (slot value)) (assert (age (value young))) (modify 0 (value old))
Следующий пример описывает представление данных в виде фактов, объектов и глобальных переменных. Примеры фактов:
(voltage is 220 volt) (meeting (subject "AI") (chief "Kuzin") (Room "3240"))
В первой строке приведен упорядоченный факт, во второй - неупорядоченный, в котором порядок слотов не важен.
integer, float, string, symbol, external-address, , instance-name, instance-address.
Пример integer: | 594 | 23 | +51 | -17 |
|---|---|---|---|---|
Пример float: | 594e2 | 23.45 | +51.0 | -17.5e-5 |
String — это строка символов, заключенная в двойные кавычки.
Пример string: "
If |
оператор ветвления; |
While |
|
loop-for-count |
итеративный цикл; |
prong |
объединение действий в одной |
prong$ |
выполнение набора действий над каждым элементом поля; |
return |
прерывание функции, цикла, правила и т.д.; |
break |
то же, что и return, но без возвращения параметров; |
switch |
оператор множественного ветвления; |
bind |
создание и связывание переменных. |
Функции true или false ) следует выделить следующие группы:
and, or, not=, $$\ne,$$ >, $$\ge,$$ <, $$\le$$integerp, floatp, stringp, symbolp, pointerp (относится ли аргумент к xternal-address ), numberp (относится ли аргумент к integer или float ), lexemerp (относится ли аргумент к string или symbol ), evenp (проверка целого на четность), oddp (проверка целого на нечетность), multifildp (является ли аргумент составным полем).eq, neqСреди математических функций следует выделить следующие группы:
+, -, *, /, max, min, div (целочисленное деление), abs (абсолютное значение), float (преобразование в тип float ), integer (преобразование в тип integer )sqrt (извлечение корня), round (mod (вычисление остатка от деления)sin, sinh, cos, cosh, tan, tanh, acos , acosh, acot, acoth, acsc, acsch, asec, asech, asin, asinh, atan, atanh, cot , coth, csc, csch, sec, sech, deg-grad (преобразование из градусов в секторы), deg-rad (преобразование из градусов в радианы), grad-deg (преобразование из секторов в градусы), rad -deg (преобразование из радиан в градусы)log, log10, exp, piСреди функций работы со строками следует назвать функции:
str-cat |
объединение строк, |
sym-cat |
объединение строк в значение типа symbol, |
sub-string |
|
str-index |
поиск подстроки, |
|
выполнение строки в качестве команды |
build |
выполнение строки в качестве конструктора |
|
преобразование символов в символы верхнего регистра, |
lowcase |
преобразование символов в символы нижнего регистра, |
str- |
сравнение строк, |
str-length |
определение длины строки, |
check-syntax |
проверка синтаксиса строки, |
string-to-field |
возвращение первого поля строки. |
Функции работы с составными величинами являются одной из отличительных особенностей языка
create$ |
создание составной величины, |
nth$ |
получение элемента составной величины, |
members |
поиск элемента составной величины, |
subset$ |
проверка одной величины на подмножество другой, |
delete$ |
удаление элемента составной величины, |
|
создание составной величины из строки, |
|
|
subseq$ |
извлечение подпоследовательности из составной величины, |
replace$ |
замена элемента составной величины, |
insert$ |
добавление новых элементов в составную величину, |
first$ |
получение первого элемента составной величины, |
rest$ |
получение остатка составной величины, |
length$ |
определение числа элементов составной величины, |
delete-member$ |
удаление элементов составной величины, |
replace-member$ |
замена элементов составной величины. |
Функции ввода-вывода используют следующие логические имена устройств:
stdin |
устройство ввода, |
stdout |
устройство вывода, |
wclips |
устройство, используемое как справочное, |
wdialog |
устройство для отправки пользователю сообщений, |
wdisplay |
устройство для отображения правил, фактов и т.,п., |
werror |
устройство вывода сообщений об ошибках, |
wwarning |
устройство для вывода предупреждений, |
wtrase |
устройство для вывода отладочной информации, |
Собственно
open |
открытие файла (виды доступа r, w, r+, a, wb ), |
close |
|
|
вывод информации на заданное устройство, |
read |
ввод данных с заданного устройства, |
readline |
ввод строки с заданного устройства, |
format |
форматированный вывод на заданное устройство, |
rename |
|
remove |
удаление файла. |
Среди двух десятков команд
load |
загрузка конструкторов из текстового файла, |
load+ |
загрузка конструкторов из текстового файла без отображения, |
reset |
сброс рабочей памяти системы |
clear |
очистка рабочей памяти системы, |
run |
выполнение загруженных конструкторов, |
save |
сохранение созданных конструкторов в текстовый файл, |
exit |
|
| выход из |
В рамках нашего краткого описания опустим список функций для работы с методами родовых функций и список функций для работы с классами, объектами, слотами, обработчиками сообщений. С этим можно ознакомиться по документации. Список сообщений об ошибках приведен в .
В завершение следует иметь в виду, что
Программа ЭС управления ТП по обработке деталей сложной формы, разработанная на основе табл. 7.1 и табл. 7.2, выглядит следующим образом.
;;;======================================================
;;; Control Expert System of technological process
;;;
;;; This expert system administers technological process
;;; of creations of details of the complex form
;;;
;;; CLIPS Version 6.0 Example
;;;
;;; To execute, merely load, reset and run.
;;;======================================================
(deffacts initial-state
(Ds 800)
(Dm 2)
(Da 2)
(Dar 1))
(defrule rule1
(declare (salience 9098))
(Ds 10)
(Dm 1)
(Da 1)
=>
(printout t "Rule1: Vr=A, Vm=10, T=0, I=1, G=tor " crlf))
(defrule rule2
(declare (salience 9095))
(Ds 10)
(Dm 2)
(Da 2)
=>
(printout t "Rule2: Vr=B, Vm=10, T=1, I=1, G=line, Rm=40, J=80, S=60 " crlf))
(defrule rule3
(declare (salience 9092))
(Ds 300)
(Dm 2)
=>
(printout t "Rule3: Vr=B, Vm=20, T=2, I=1, G=tor " crlf))
(defrule rule4
(declare (salience 9097))
(Ds 300)
(Da 3)
=>
(printout t "Rule4: Vr=C, Vm=40, T=3, I=2, G= line, Rm=50, J=75, S=75" crlf))
(defrule rule5
(declare (salience 9094))
(Ds 800)
(Dm 2)
(Da 2)
(Dar 1)
=>
(printout t "Rule5: Vr=B, Vm=60, T=4, I=2, G= line, Rm=60, J=70, S=70 " crlf))
(defrule rule6_7
(declare (salience 9090))
(Ds 800)
(Dar ?num)
=>
(if (< ?num 3)
then
(printout t "Rule6: Vr=B, Vm=40, T=6, I=3, G= line, Rm=60, J=60, S=75 " crlf)
else
(printout t "Rule7: Vr=C, Vm=80, T=6, I=3, G= line, Rm=60, J=60, S=75 " crlf)))
Эта программа сохраняется в виде файла с именем, например, , далее в среде clear; load и run. Эта программа начинает работать. Входные воздействия заданы в данном примере через deffacts initial-state.
Активизация правил rule5 и rule6_7, а затем по критерию максимальной достоверности первым выбирается управляющее воздействие на систему низшего уровня:
Rule5: Vr=B, Vm=60, T=4, I=2, G= line, Rm=60, J=70, S=70
В реальной жизни входные воздействия поступают через оператор read (ввод данных с заданного устройства), например, следующим образом:
(defrule Dar_parameter (declare (salience 9101)) (Dar ? num) => (printout t "Ds parameter has value "crlf" 1) 10 "crlf" 2) 300 "crlf" 3) 800 "crlf" Choose 1—3 =>") (assert (Dar =(read))))
Читателю предлагается самостоятельно дописать правила останова программы ( ) по условиям Da= или достижению заданного значения , а также правила для проверки граничных условий. Дотошный читатель, разобравшийся в программе, может спросить, зачем мне
Примером более сложной программы для решения задачи deffacts initial-state, мы получим конкретные последовательности действий робота.
(deftemplate goal (slot move) (slot on-top-of)) (deffacts initial-state (stack A B C) (stack D E F) (goal (move C) (on-top-of E))) (defrule move-directly ?goal < — (goal (move ?block1) (on-top-of ?block2)) ?stack-1 < — (stack ?block1 $?rest1) ?stack-2 < — (stack ?block2 $?rest2) => (retract ?goal ?stack-1 ?stack-2) (assert (stack $?rest1)) (assert (stack ?block1 ?block2 $?rest2)) (printout t ?block1 "moved on top of" ?block2 crlf)) (defrule move-to-floor > ?goal < — (goal (move ?block1) (on-top-of floor)) ?stack-1 < — (stack ?block1 $?rest) => (retract ?goal ?stack-1) (assert (stack ?block1)) (assert (stack $?rest)) (printout t ?block1 "moved to the floor." crlf)) (defrule clear-upper-block (goal (move ?block)) (stack ?top $? ?block $?) => (assert (goal (move ?top) (on-top-of floor)))) (defrule clear-lower-block (goal (on-top-of ?block)) (stack ?top $? ?block $?) => (assert (goal (move ?top) (on-top-of floor))))
Результат работы
CLIPS$>$ (run) A moved to the floor. B moved to the floor. D moved to the floor. C moved on top of E CLIPS$>$
В завершение лекции читателю может быть рекомендована книга Ж.Гурратано , содержащая множество примеров программирования ЭС на основе
Итак, завершающий вывод по данной лекции. Экспертные системы является эффективным и универсальным инструментом для таких задач. Они работают. Их могут уже не называть экспертными системами. Их могут называть просто системами управления, системами мониторинга, системами диагностики. Суть от этого не меняется. Мощные базы знаний, заложенные в создаваемые человеком аппаратно-программные комплексы, позволяют строить новое поколение интеллектуальных робототехнических систем.
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.