Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
[ИИС] Образец отчета.doc
Скачиваний:
50
Добавлен:
12.04.2015
Размер:
400.9 Кб
Скачать

1.2. Факты

Выделенные факты сгруппируем следующим образом (табл. 1.2):

Таблица 1.2

Факты экспертной системы

группы

Группа

факта

Факты

1

Производитель

1

HP

2

Panasonic

3

Canon

4

ВсеРавно

2

Цена

5

Дешево

6

Средняя

7

Дорого

8

ВсеРавно

3

Тип

9

Лазерный

10

Струйный

11

ВсеРавно

4

Цвет

12

Цветной

13

Чернобелый

14

ВсеРавно

5

Размер

15

А4

16

А3

17

А4иА3

18

ВсеРавно

группы

Группа

факта

Факты

6

Загрузка

19

Сверху

20

Снизу

21

ВсеРавно

7

Габариты

22

Маленький

23

Средний

24

Большой

25

ВсеРавно

8

Копир

26

Есть

27

Нет

9

Сканер

28

Есть

29

Нет

Определение каждого факта осуществляется путем ответа на вопросы системы.

1.3. Общий алгоритм работы эс

Подробный алгоритм работы экспертной системы изобразим в виде блок-схемы (рис. 1.1. – 1.3.).

г

в

б

а

г

в

б

а

Рис.1.1 Блок-схема алгоритма работы экспертной системы

Рис.1.2 Блок-схема алгоритма работы экспертной системы (продолжение)

Рис.1.3 Блок-схема алгоритма работы экспертной системы (окончание)

Данный алгоритм целесообразно реализовать, используя прямой вывод в оболочке экспертной системы CLIPS.

2. Рабочий проект

2.1 Код программы и описание языковых конструкций clips

“Экспертная система разработана в оболочке CLIPSверсии 6.24. Рассмотрим подробно операторы и функции экспертной системы и опишем их назначение.

(defglobal?*s*= 0)Объявление глобальной переменной

(deftemplateПринтерЗадаем имя структуры

(slotпМодель)поле для модели

(slot пПроизводитель)поле для производителя

(slot пЦена)поле для цены

(slot пТип)поле для типа принтера

(slot пЦвет)поле для цвета

(slot пРазмер)поле для формата бумаги

(slot пЗагрузка)поле для способа загрузки бумаги

(slot пГабариты)поле для габаритов принтера

(slot пКопир)поле для копира

(slot пСканер)поле для сканера

;*******************************************************************

(deffunction ВопросОбщий(?Текст_Вопрос$?допустзнач)

(printout t ?Текст_Вопрос)вывод текста вопроса

(bind ?Ответ(read))сохраняем ответ от пользователя

(if (lexemep ?Ответ)

then (bind ?Ответ (lowcase ?Ответ)))

(while (not (member ?Ответ ?допустзнач)) do

(printout t ?Текст_Вопрос)

(bind ?Ответ (read))

(if (lexemep ?Ответ)

then (bind ?Ответ (lowcase ?Ответ))))

?Ответ)возвращаем ответ

;********************************************************************'

(defruleБаннер

(declare(salience10))Приоритет 10

=>(load-factsC:\factpr.txt)Загружаем базу знаний о принтерах

(printout t crlf crlf)

(printout t "Expert system. Выбор ПРИНТЕРА")

(printouttcrlfcrlf))

;******************************************************************'

(defrule ВопросПроизводительПравило, которое определяет производителя

(not(Производитель?))Если факт не определен

=>(bind ?отклик(ВопросОбщий "Какой Производитель?(а-НР,б-Panasonic,в-Canon,г-Все производители)"а б в г))задаем вопрос с вариантами ответов

присваиваем значение факта, которое мы выбрали

(if (eq ?отклика)then (assert (ПроизводительНР)))

(if (eq ?откликб)then (assert (ПроизводительPanasonic)))

(if (eq ?откликв)then (assert (ПроизводительCanon)))

(if (eq ?откликг)then (assert (ПроизводительВсеРавно))))

;******************************************************************'

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

(defrule ВопросЦена Правило, которое определяет цену

;******************************************************************'

(defrule ВопросТип Правило, которое определяет тип принтера

;******************************************************************'

(defrule ВопросЦвет Правило, которое определяет цветной или ч/б

;******************************************************************'

(defrule ВопросРазмер Правило, которое определяет формат бумаги

;******************************************************************'

(defrule ВопросЗагрузка Правило, которое определяет способ загрузки

;******************************************************************'

(defrule ВопросГабариты Правило, определит габариты принтера

;******************************************************************'

(defrule ВопросКопир Правило, определяет наличие копира

;******************************************************************'

(defrule ВопросСканер Правило, которое определяет наличие сканера

;******************************************************************'

(defrule Вывод Правило вывода модели принтера, которую мы выбрали

(or (Производитель ?хПроизводитель)(Производитель ВсеРавно))

(or (Цена ?хЦена)(Цена ВсеРавно))

(or (Тип ?хТип)(Тип ВсеРавно))

(or (Цвет ?хЦвет)(Цвет ВсеРавно))

(or (Размер ?хРазмер)(Размер ВсеРавно))

(or(Загрузка ?хЗагрузка) (Загрузка ВсеРавно))

(or (Габариты ?хГабариты)(Габариты ВсеРавно))

(Копир ?хКопир)

(Сканер ?хСканер)

(Принтер(пМодель ?Модель)(пПроизводитель ?хПроизводитель)(пЦена ?хЦена)(пТип ?хТип)(пЦвет ?хЦвет)(пРазмер ?хРазмер)(пЗагрузка ?хЗагрузка)(пГабариты ?хГабариты)(пКопир ?хКопир)(пСканер ?хСканер))

=>(bind ?*s*(+ ?*s* 1))

(printout t crlf " " ?*s* ". Модель : " ?Модель crlf))

;******************************************************************' Данный код отлажен в оболочке CLIPS, не содержит ошибок.