кр. Ю. Ю. Громов, О. Г. Иванова, В. В. Алексеев, М. П. Беляев, Д. П. Швец, аи. Елисеев интеллектуальные информационные системы и технологии
Скачать 2.03 Mb.
|
177 Напишите конструкцию deffunction, в которой не используется рекурсия для вычисления факториала целого числа N. Напишите конструкцию deffunction, которая преобразовывает двоичную строку, состоящую из нулей и единиц, в десятичное число. Без использования функций if или switch напишите ряд методов, предназначенных для преобразования данных, представленных с помощью таких единиц, как дюймы (inches), футы (feet) и ярды (yards). Разработайте экспертную систему для выбора университета, факультета и специальности в соответствии с интересами абитуриента. Разработайте экспертную систему, используя принципы объ- ектно-ориентированного программирования. 6.6. Список литературы Адрес языка CLIPS в Интернете http://www.ghg.net/clips/ CLIPS.html. Базы данных. Интеллектуальная обработка информации / В.В. Корнеев и др. – М. : Нолидж, 2000. 3. Вахтин, А.А. Лабораторный практикум по программированию на языке CLIPS для курса Представление знаний в информационных системах : учебно-методическое пособие для вузов / А.А. Вахтин, В.В. Гришина. – Издательско-полиграфический центр ВГУ, 2010. – 95 с. 4. Джарантино, Дж. Экспертные системы принципы разработки и программирования / Дж. Джарантино, Г. Райли. – е изд. ; перс англ. – М. : Изд. дом «Вильямc», 2007. – 1152 с. 5. Джексон, П. Введение в экспертные системы / П. Джексон ; перс англ. – М. : Изд. дом «Вильямc», 2001. – 622 с. 6. Люгер, Дж. Искусственный интеллект стратегии и методы решения сложных проблем / Дж. Люгер, С. Рассел, П. Норвиг. – е изд. ; перс англ. – М. : Изд. дом «Вильямc», 2003. – 864 с. 7. Рассел, С. Искусственный интеллект современный подход / C. Рассел, П. Норвиг. – е изд. ; перс англ. – М. : Изд. дом «Вильямc», 2006. – 1408 с. 8. Частиков, А.П. Разработка экспертных систем. Среда CLIPS / А.П. Частиков, ТА. Гаврилов, Д.Л. Белов. – СПб. : БХВ-Петербург, 2003. – 608 с. 178 ЗАКЛЮЧЕНИЕ Поскольку в сферу приложений искусственного интеллекта вошли практически все направления современной информатики, мы не ставили перед собой цели объять необъятное, а включили в учебник разделы, содержащие описание традиционных моделей и технологий создания интеллектуальных система также новых перспективных подходов к решению проблем, возникающих в области искусственного интеллекта. При написании книги мы видели свою цель в том, чтобы познакомить читателя с принципами создания и функционирования интеллектуальных информационных систем. Практический опыт показывает, что люди, незнакомые с этими принципами, испытывают большие трудности, выступая в роли пользователей интеллектуального программного обеспечения. При всём многообразии видов интеллектуального программного обеспечения, имеющегося в настоящее время, мы достаточно подробно рассмотрели среду CLIPS. Это объясняется её доступностью и тем, что языки среда CLIPS предоставляют пользователям возможность быстро создавать эффективные, компактные и легко управляемые экспертные системы. Несмотря на то, что CLIPS распространяется бесплатно, он весьма успешно конкурирует даже с самыми известными коммерческими проектами. Научиться программировать можно только программируя, решая конкретные задачи. В приложения учебника мы целенаправленно включили сравнительно большие по объёму практические примеры экспертных систем на языке CLIPS. Поэтому разбирайте примеры, ставьте себе задачи и программируйте. Авторы надеются, что знания, полученные при изучении данной книги, и приведённые практические примеры помогут читателю в самостоятельном освоении языка CLIPS, а также позволят расширить кругозор в области интеллектуальных информационных систем и технологий ПРИЛОЖЕНИЯ Приложение А Файл kurs.clp ;;;;;;;;;;;;;;;;;;;;; Определение классов ;;;;;;;;;;;;;;;;;;;;; Определение абстрактного класса принтера (defclass PRINTER "Printer defclass" (is-a USER) (role abstract) (slot power (type SYMBOL) (create-accessor read-write) (storage local) (default none)) (slot podkl_el (type SYMBOL) (create-accessor read-write) (storage local) (default none)) (slot shnur (type SYMBOL) (create-accessor read-write) (storage local) (default none)) (slot napr (type SYMBOL) (create-accessor read-write) (storage local) (default none)) (slot print_doc (type SYMBOL) (create-accessor read-write) (storage local) (default none)) Определение конкретного класса лазерного принтера (defclass PRINTER_LASER "Laser printer defclass" (is-a PRINTER) (role concrete) (pattern-match reactive) (slot zastr_cart (type SYMBOL) (create-accessor read-write) (storage local) (default none)) 180 (slot zastr_vyhod (type SYMBOL) (create-accessor read-write) (storage local) (default none)) (slot zaderzh (type SYMBOL) (create-accessor read-write) (storage local) (default none)) (slot shum (type SYMBOL) (create-accessor read-write) (storage local) (default none)) (slot kachestvo (type SYMBOL) (create-accessor read-write) (storage local) (default none)) (slot install_skrip (type SYMBOL) (create-accessor read-write) (storage local) (default none)) (slot opred_cart (type SYMBOL) (create-accessor read-write) (storage local) (default none)) (slot opred_bum (type SYMBOL) (create-accessor read-write) (storage local) (default none)) (slot zahvat_bum (type SYMBOL) (create-accessor read-write) (storage local) (default none)) Определение конкретного класса струйного принтера (defclass PRINTER_INK "Inkjet printer defclass" (is-a PRINTER) (role concrete) (pattern-match reactive) 181 (slot otkl_val (type SYMBOL) (create-accessor read-write) (storage local) (default none)) (slot skrip (type SYMBOL) (create-accessor read-write) (storage local) (default none)) (slot bum_perekos (type SYMBOL) (create-accessor read-write) (storage local) (default none)) (slot nesk_listov (type SYMBOL) (create-accessor read-write) (storage local) (default none)) (slot zastr_raboch (type SYMBOL) (create-accessor read-write) (storage local) (default none)) (slot kachestvo (type SYMBOL) (create-accessor read-write) (storage local) (default none)) (slot caret_upor (type SYMBOL) (create-accessor read-write) (storage local) (default none)) (slot coord_lenta (type SYMBOL) (create-accessor read-write) (storage local) (default none)) (slot opred_cart (type SYMBOL) (create-accessor read-write) (storage local) (default none)) 182 (slot pod_bum (type SYMBOL) (create-accessor read-write) (storage local) (default none)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Определение шаблона, описывающего текущее состояние системы ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (deftemplate UI-state (slot cur_quest (type STRING)) (multislot ans (type STRING)) (multislot sys_ans (type SYMBOL)) (slot user_eval (type STRING)) (slot prev_q (type SYMBOL) (default no)) (slot prev_ans (type STRING)) (slot state (type SYMBOL))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Определение функции, сообщающей системе о нажатии кнопки перехода к предыдущему вопросу ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (deffunction prev_q_yes (?f) (modify ?f (prev_q yes))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Определение правил вывода вопросов системы ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defrule start (initial-fact) => (assert (UI-state (cur_quest "Добро пожаловать в экспертную систему диагностики неисправности принтера Для продолжения нажмите кнопку Далее) (ans) (sys_ans) (user_eval "") (prev_ans "") (state start))) (halt)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Общие вопросы для диагностики неисправности принтера (defrule q_type_printer ?F<-(UI-state (state start)) => 183 (modify ?F (cur_quest "Укажите тип принтера) (ans "лазерный " "струйный ") (sys_ans PRINTER_LASER PRINTER_INK) (user_eval "make-instance [cur_printer] of ") (prev_ans "") (state diag)) (halt)) (defrule q_type_printer_prev ?F<-(UI-state (cur_quest "Укажите тип принтера) (prev_q yes)) => (modify ?F (cur_quest "Добро пожаловать в экспертную систему диагностики неисправности принтера Для продолжения нажмите кнопку Далее) (ans) (sys_ans) (user_eval "") (prev_q no) (prev_ans "") (state start)) (halt)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defrule q_power (object (is-a ?x) (name [cur_printer]) (power none)) ?F<-(UI-state (prev_q ?pr)) => (if (eq ?pr no) then (modify ?F (cur_quest "Включается ли принтер) (ans "Нет " "Да ") (sys_ans no yes) (user_eval "send [cur_printer] put-power ") (prev_ans "") (state diag)) else (if (eq ?x PRINTER_LASER) then (modify ?F (cur_quest "Укажите тип принтера) (ans "лазерный " "струйный ") (sys_ans PRINTER_LASER PRINTER_INK) (user_eval "make-instance [cur_printer] of ") (prev_q no) (prev_ans "лазерный ") (state diag)) 184 (if (eq ?x PRINTER_INK) then (modify ?F (cur_quest "Укажите тип принтера) (ans "лазерный " "струйный ") (sys_ans PRINTER_LASER PRINTER_INK) (user_eval "make-instance [cur_printer] of ") (prev_q no) (prev_ans "струйный ") (state diag))) (send [cur_printer] delete)) (halt)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defrule q_podkl_el (object (name [cur_printer]) (power no) (podkl_el none)) ?F<-(UI-state (prev_q ?pr)) => (if (eq ?pr no) then (modify ?F (cur_quest " Подключён ли принтер к элек - трической сети) (ans "Нет " "Да ") (sys_ans no yes) (user_eval "send [cur_printer] put- podkl_el ") (prev_ans "") (state diag)) else (modify ?F (cur_quest "Включается ли принтер) (ans "Нет " "Да ") (sys_ans no yes) (user_eval "send [cur_printer] put-power ") (prev_q no) (prev_ans "Нет ") (state diag)) (send [cur_printer] put-power none)) (halt)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defrule q_shnur (object (name [cur_printer]) (power no) (podkl_el yes) (shnur none)) ?F<-(UI-state (prev_q ?pr)) => (if (eq ?pr no) 185 then (modify ?F (cur_quest "Исправен ли шнур питания принтера) (ans "Нет " "Да ") (sys_ans no yes) (user_eval "send [cur_printer] put-shnur ") (prev_ans "") (state diag)) else (modify ?F (cur_quest " Подключён ли принтер к элек - трической сети) (ans "Нет " "Да ") (sys_ans no yes) (user_eval "send [cur_printer] put- podkl_el ") (prev_q no) (prev_ans "Да ") (state diag)) (send [cur_printer] put-podkl_el none)) (halt)) (defrule r_podkl_el (object (name [cur_printer]) (power no) (podkl_el no)) ?F<-(UI-state (prev_q ?pr)) => (if (eq ?pr no) then (modify ?F (cur_quest "Для устранения неисправности система предлагает Вам подключить принтер к электросети Если не все проблемы устранены, попробуйте выполнить диагностику заново) (ans) (sys_ans) (user_eval "") (prev_ans "") (state recomend)) else (modify ?F (cur_quest " Подключён ли принтер к элек - трической сети) (ans "Нет " "Да ") (sys_ans no yes) (user_eval "send [cur_printer] put- podkl_el ") (prev_q no) (prev_ans "Нет ") (state diag)) 186 (send [cur_printer] put-podkl_el none)) (halt)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defrule q_napr (object (name [cur_printer]) (power no) (podkl_el yes) (shnur yes) (napr none)) ?F<-(UI-state (prev_q ?pr)) => (if (eq ?pr no) then (modify ?F (cur_quest "Есть ли напряжение в электри - ческой сети) (ans "Нет " "Да ") (sys_ans no yes) (user_eval "send [cur_printer] put-napr ") (prev_ans "") (state diag)) else (modify ?F (cur_quest "Исправен ли шнур питания принтера) (ans "Нет " "Да ") (sys_ans no yes) (user_eval "send [cur_printer] put-shnur ") (prev_q no) (prev_ans "Да ") (state diag)) (send [cur_printer] put-shnur none)) (halt)) (defrule r_shnur (object (name [cur_printer]) (power no) (podkl_el yes) (shnur no)) ?F<-(UI-state (prev_q ?pr)) => (if (eq ?pr no) then (modify ?F (cur_quest "Для устранения неисправности система предлагает заменить сетевой шнур Если не все проблемы устранены, попробуйте выполнить диагностику заново "Исправен ли шнур питания принтера) (ans "Нет " "Да ") (sys_ans no yes) (user_eval "send [cur_printer] put-shnur ") (prev_q no) (prev_ans "Нет ") (state diag)) (send [cur_printer] put-shnur none)) (halt)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defrule r_napr_yes (object (name [cur_printer]) (power no) (podkl_el yes) (shnur yes) (napr yes)) ?F<-(UI-state (prev_q ?pr)) => (if (eq ?pr no) then (modify ?F (cur_quest "Неисправен блок питания принтера Для устранения неисправности система предлагает заменить его Если не все проблемы устранены, попробуйте выполнить диагностику заново) (ans) (sys_ans) (user_eval "") (prev_ans "") (state recomend)) else (modify ?F (cur_quest "Есть ли напряжение в электри - ческой сети) (ans "Нет " "Да ") (sys_ans no yes) (user_eval "send [cur_printer] put-napr ") (prev_q no) (prev_ans "Да ") (state diag)) (send [cur_printer] put-napr none)) (halt)) (defrule r_napr_no (object (name [cur_printer]) (power no) (podkl_el yes) (shnur yes) (napr no)) ?F<-(UI-state (prev_q ?pr)) => (if (eq ?pr no) then 188 (modify ?F (cur_quest "Для устранения неисправности система предлагает подать напряжение в электрическую сеть Если не все проблемы устранены, попробуйте выполнить диагностику заново) (ans) (sys_ans) (user_eval "") (prev_ans "") (state recomend)) else (modify ?F (cur_quest "Есть ли напряжение в электри - ческой сети) (ans "Нет " "Да ") (sys_ans no yes) (user_eval "send [cur_printer] put-napr ") (prev_q no) (prev_ans "Нет ") (state diag)) (send [cur_printer] put-napr none)) (halt)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Вопросы для диагностики неисправности лазерного принтера no) then (modify ?F (cur_quest "Выполняется ли печать документа "Нет " "Да ") (sys_ans no yes) (user_eval "send [cur_printer] put- print_doc ") (prev_ans "") (state diag)) else (modify ?F (cur_quest "Включается ли принтер) (ans "Нет " "Да ") (sys_ans no yes) (user_eval "send [cur_printer] put-power ") (prev_q no) (prev_ans "Да ") (state diag)) 189 (send [cur_printer] put-power none)) (halt)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defrule q_zastr_cart (object (is-a PRINTER_LASER) (name [cur_printer]) (power yes) (print_doc yes) (zastr_cart none)) ?F<-(UI-state (prev_q ?pr)) => (if (eq ?pr no) then (modify ?F (cur_quest "После прохождения картриджа листы бумаги застревают) (ans "Нет " "Да ") (sys_ans no yes) (user_eval "send [cur_printer] put- zastr_cart ") (prev_ans "") (state diag)) else (modify ?F (cur_quest "Выполняется ли печать документа "Нет " "Да ") (sys_ans no yes) (user_eval "send [cur_printer] put- print_doc ") (prev_q no) (prev_ans "Да ") (state diag)) (send [cur_printer] put-print_doc none)) (halt)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defrule q_zastr_vyhod (object (is-a PRINTER_LASER) (name [cur_printer]) (power yes) (print_doc yes) (zastr_cart no) (zastr_vyhod none)) ?F<-(UI-state (prev_q ?pr)) => (if (eq ?pr no) then (modify ?F (cur_quest "Застревают ли листы бумаги на выходе из принтера) (ans "Нет " "Да ") (sys_ans no yes) (user_eval "send [cur_printer] put- zastr_vyhod ") 190 (prev_ans "") (state diag)) else (modify ?F (cur_quest "После прохождения картриджа листы бумаги застревают) (ans "Нет " "Да ") (sys_ans no yes) (user_eval "send [cur_printer] put- zastr_cart ") (prev_q no) (prev_ans "Нет ") (state diag)) (send [cur_printer] put-zastr_cart none)) (halt)) (defrule r_zastr_cart (object (is-a PRINTER_LASER) (name [cur_printer]) (power yes) (print_doc yes) (zastr_cart yes)) ?F<-(UI-state (prev_q ?pr)) => (if (eq ?pr no) then (modify ?F (cur_quest "Дефект вызван тем, что загрязнились резиновые ремни подачи бумаги в фьюзер Для устранения неисправности система предлагает снять ремни с приводных роликов и очистить Если не все проблемы устранены, попробуйте выполнить диагностику заново) (ans) (sys_ans) (user_eval "") (prev_ans "") (state recomend)) else (modify ?F (cur_quest "После прохождения картриджа листы бумаги застревают) (ans "Нет " "Да ") (sys_ans no yes) (user_eval "send [cur_printer] put- zastr_cart ") (prev_q no) (prev_ans "Да ") (state diag)) (send [cur_printer] put-zastr_cart none)) (halt)) |