Московский государственный технический университет им. Н.Э.Баумана
|
Утверждаю: |
_____________________ |
|
|
"___"_____________2005 г. |
Отчёт
по лабораторной работе №1,2
по
дисциплине Интеллектуальные системы
"Разработка
прототипа ЭС" и
"Разработка базы знаний с правилами
вывода"
отчет
(вид документа)
бумага А4
(вид носителя)
16
(количество листов)
|
ИСПОЛНИТЕЛЬ: |
|
|
|
____________________ |
|
|
"29" марта
2006 г. |
Москва
2006
1. Название и цель работы
Название:
"Разработка прототипа ЭС" и "Разработка базы знаний с правилами
вывода".
Цель: Ознакомиться
с подходом к разработке ЭС в части создания основных компонент: базы знаний,
машины вывода и диалога (интерфейса) с пользователем.
2. Задания
2.1. Выбрать предметную область и задачу, которая может быть решена с помощью ЭС.
2.2. Разбить процесс решения задачи на следующие этапы:
2.2.1. Получение исходных данных (множество P) от пользователя в режиме диалога
2.2.2. Обработка (анализ) полученных данных P для определения атрибутов (множество A) объекта принятия решения O
2.2.3. Принятие решения на основе полученных характеристик A (выбор одного из заранее определенных вариантов решения) и вывод результата пользователю.
2.2.4. Количественные требования к основным показателям:
P >=20 (Количество параметров, извлекаемых от пользователя, должно быть более 19)
A >=10 (Количество атрибутов, которые характеризуют объект выбора или принятия решения O, должно быть более 9)
P > 2*A (количество исходных данных должно быть больше количества необходимых атрибутов для принятия решения больше как минимум в два раза)
Множество A может только частично (не более чем на 30%) входить в множество P.
Количество вопросов должно быть не меньше количества параметров P.
2.2.5. Итоговое принятие решения (выбор) должен производиться на основе хотя бы двух альтернативных вариантов.
2.3. Разработать вопросы к пользователю и граф диалога
2.3.1. Разработать схему разветвленного диалога, содержащего не менее 20 вопросов с двумя или более вариантами ответов.
2.3.2. Одновременно должен задаваться только один вопрос. Варианты допустимых ответов должны оформляться в виде раскрывающего списка, радио кнопок или других не менее функциональных визуальных элементах.
2.3.3. Для группы вопросов должна быть реализована функция ручного ввода ответа. Программа должна быть нечувствительна к регистру вводимого текста, и выдавать ошибку в случае неправильного набора (недопустимого варианта ответа). Для остальных вопросов ответы должны быть предопределены.
2.3.4. Порядок задавания вопросов должен изменяться в зависимости от ответов, т.е. могут быть заданы не все 20 вопросов, а только их часть. Более того, в зависимости от ответов должны задаваться разные группы вопросов.
2.3.5. Все вопросы должны задаваться в распространенной языковой и по возможности вежливой форме.
2.3.6. Не допускается исключение этапа определения значений необходимых для принятия атрибутов за счет использования хорошо построенного диалога. Чтобы этого избежать можно, например, ввести несколько независимых веток вопросов.
2.4. Разработать БД для хранения исходных, промежуточных и результирующих данных.
2.5. Разработать вопросно-ответную компоненту БЗ.
2.6. (лаб. 2) Разработать правила и реализовать машину вывода
2.6.1. Наличие правил, имеющих две (или более) посылки и реализующих их конъюнкцию (или другую форму агрегирования).
2.6.2. Правила должны храниться в отдельной структуре (таблице) БЗ. Описание правил в БЗ должно быть реализовано таким образом, что от пользователя не требуется указание номера вопроса, номера ответа и т.д.
2.7. (лаб. 2) Реализация принятия решения
Должна быть реализована произвольно с использованием стандартного подхода к разработке расчетно-логических систем в рамках тела программы или в виде дополнительного механизма с использование БЗ.
3. Краткое описание предметной области и выбранной задачи
В данной лабораторной работе поставлена задача реализовать прототип ЭС по выбору Источника Бесперебойного питания (UPS). За основу взяты несколько аналогичных программных продуктов, являющихся инструментом подбора товаров в некоторых интернет-магазинах.
Путем задавания наводящих вопросов о сфере применения ИБП, целях его приобретения и ограничениях на внешние параметры и цену ИБП выявляются необходимые для выбора параметры. После чего на основе этих параметров мы получаем те или иные атрибуты в соответствии с определенными в базе знаний правилами. А после этого на основе атрибутов с учетом некоторой их приоритетности принимается решение по выбору того или иного объекта, т.е. в нашем случае конкретной модели источника бесперебойного питания.
Как видим данная программа позволяет автоматизировать
процесс подбора модели источника бесперебойного питания и исключить
необходимость вмешательства человека с опрашивающей стороны, что явно дает
возможность упростить отдельные элементы системы продаж, например
консультирования клиентов.
По классу разрабатываемая ЭС относится к ЭС класса интерпретации данных, анализа, статическим, поверхностным и будет являться демонстрационным прототипом.
4. Перечень параметров, атрибутов и их допустимых
значений
В таблице параметров
представлены переменные БЗ, значения которых получаются в ходе ответов
пользователя на вопросы.
|
№ |
Параметры |
Допустимые
значения |
|
|
Имя параметра |
Описание |
||
|
1 |
сфера |
Сфера применения ИБП |
- дом - офис - производство |
|
2 |
оборудование |
Классы оборудования, для которого требуется
ИБП |
- бытовое - сетевое - производственное |
|
3 |
цель |
Цель приобретения ИБП |
- отключение - скачки - уровень |
|
4 |
габариты |
Внешние размеры ИБП |
- малые - средние - любые |
|
5 |
масса |
Масса ИБП |
- малая - средняя - любая |
|
6 |
температура |
Температурные условия эксплуатации |
-
жесткотемпературные - нормальные |
|
7 |
аппаратура |
Тип аппаратуры, подключаемой к ИБП |
- точная - профессиональная - прочая |
|
8 |
поддержка_ПО |
Необходимость программного обеспечения |
- true - false |
|
9 |
ПО |
Программное обеспечение ИБП |
- Windows - Unix - другое (вводится
в последствии) |
|
10 |
поддержка_сетей |
Необходимость поддержания сетей |
- true - false |
|
11 |
сеть |
Поддерживаемые сети |
- Ethernet - FDDI - другая |
|
12 |
работа |
Длительность работы ИБП при номинальной
нагрузке |
- долгая - средняя - любая |
|
13 |
особые_условия |
Необходимость особых условий эксплуатации |
- true - false |
|
14 |
защита |
Корпусная защита от вибраций |
- высокозащищенные - защищенные - - |
|
15 |
чувствительность |
Чувствительность подключаемого оборудования
к изменению напряжения на входе |
- высокая - средняя - низкая |
|
16 |
шумоизоляция |
Шумоизоляционные свойства ИБП |
-
высокошумоизолированные -
шумоизолированные - - |
|
17 |
нагрузка |
Количество подключаемых устройств данного
класса |
- 3 - 2 - 1 |
|
18 |
ограничение_цены |
Наличие органичения цены ИБП |
- true - false |
|
19 |
цена |
Цена ИБП |
(значение
вводится) |
|
20 |
подзарядка |
Необходимое время подзарядки батарей |
- быстрая - средняя - любая |
В таблице атрибутов
представлены свойства объекта (ИБП), значение которых получаются из параметров
путем применения правил.
|
№ |
Атрибуты |
Допустимые
значения |
|
|
Имя атрибута |
Описание |
||
|
1 |
тип |
Тип ИБП |
- off-line - line-interactive - on-line |
|
2 |
мин мощность |
Мин. требуемая мощность ИБП [ВА] |
250-36000 |
|
3 |
макс габариты |
Макс. габариты [см] |
- small - middle - big |
|
4 |
макс масса |
Макс. масса [кг] |
- 10 - 60 - 1000 |
|
5 |
макс время переключения |
Макс. время переключения ИБП на питание от
батарей [мкс] |
- 0 - 3 - 30 |
|
6 |
мин время работы |
Мин. время работы ИБП при номинальной
нагрузке [мин] |
- 5 - 10 - 15 |
|
7 |
ПО и сети |
ПО и поддерживаемые сети |
Windows, Unix, (вводенное
значение) + Ethernet, FDDI, другая |
|
8 |
макс цена |
Макс. Цена [руб] |
(введенное
значение) |
|
9 |
условия использования |
Условия эксплуатации ИБП |
Жесткотемпературные+высокозащищенные+ высокошумоизолированные |
|
10 |
макс время подзарядки |
Макс. время подзарядки батарей [ч] |
- 5 - 12 - |
5. Перечень вопросов, вариантов ответов и граф диалога
|
№ |
Вопрос |
Ответ |
|
1 |
В какой сфере деятельности предполагается использование ИБП? |
- Использование в домашних условиях - В офисах и малых предприятиях - В крупном производстве или энергетической сфере |
|
2 |
Для какого оборудования предполагается использование ИБП? |
- Бытовые приборы, компьютеры - Сетевое оборудование, компьютеры-сервера - Сверхважное оборудование, критичное к изменению напряжения |
|
3 |
Для какой цели будет использоваться ИБП? |
- Длительное отключение электропитания - Сглаживание скачков напряжения - Поддержка постоянного уровня напряжения |
|
4 |
Какой диапазон габаритов ИБП является приемлемым? |
- До 50x50x50 (см) - От 50x50x50 до 100x100x100 (см) - Габариты не имеют значения |
|
5 |
Какая масса ИБП является приемлемой? |
- Маленькая (до 10 кг) - Средняя (от 10 кг до 60 кг) - Не имеет значения |
|
6 |
Какая необходима подзарядка батарей ИБП? |
- Быстрая (для критических условий использования) - Средняя (для важных, но некритических случаев ) - Не имеет значения |
|
7 |
Какие будут температурные условия использования ИБП? |
- Жесткие высоко- (низко-) температурные условия - Нормальные условия |
|
8 |
Какой тип аппаратуры будет использован совместно с ИБП ? |
- Сверхчувствительная и точная аппаратура (измерительные приборы, остслеживающие системы) - Среднестатистическая профессиональная аппаратура (вычислительные системы) - Прочее стандартное оборудование |
|
9 |
Поддержка какого программного обеспечения требуется для оборудования, подключенного к ИБП? |
- Windows
9x/2000/XP -
Unix/Linux, FreeBSD - Другое ПО (обязательное) |
|
10 |
Какие требуются сетевые характеристики? |
- Поддержка сетей Ethernet - Поддержка FDDI, Frame Relay - Другие/любые сети (поддержка осуществляется дополнительно) |
|
11 |
Какая требуется длительность работы ИБП от батареи? |
- Большая (свыше 30 мин) - Средняя (от 10 до 30 мин) - Не имеет значения |
|
12 |
Какой уровень защиты от внешних воздействий? |
- Высокий (для работы в условиях повышенных вибраций) - Средний (для работы в нормальных, но незащищенных условиях) - Не имеет значения |
|
13 |
Требуется ли поддержка программного обеспечения? |
- Да - Нет |
|
14 |
Какая чувствительность подключаемого оборудования к изменению напряжения? |
- Критическая (вычислительная техника) - Средняя (другие приборы, работающие постоянно в течение большого промежутка времени) - Низкая (осветительные и другие системы жизнеобеспечения) |
|
15 |
Какая требуется шумоизоляция? |
- Высокая (для жилых помещений) - Средняя (для рабочих помещений) - Не имеет значения |
|
16 |
Требуется ли поддержка вычислительных сетей? |
- Да - Нет |
|
17 |
Какая цена ИБП является приемлемой? |
- Приближенная к минимуму в данной группе ИБП - Высокая (требуется наиболее качественный ИБП) - Строгое ценностное ограничение |
|
18 |
Какая нагрузка предполагается для ИБП (количество различных устройств, подключенных к одному ИБП)? |
- Высокая (несколько устройств на 1 ИБП или высокомощное оборудование) - Средняя (1-2 устройства средней мощности) - Низкая (1 устройство средней мощности или несколько маломощных) |
|
19 |
Введите требуемое программное обеспечение: |
|
|
20 |
Есть ли особые ценностные ограничения? |
- Да - Нет |
|
21 |
Требуются ли особые условия использования ИБП? |
- Да - Нет |
|
22 |
Введите максимальную цену ИБП: |
|
Граф диалога
представлен в приложении 1.
6. Правила получения атрибутов A из множества исходных
параметров P
|
ID |
Пар-р 1 |
Значение пар-ра 1 |
Операция 1 |
Пар-р 2 |
Значение пар-ра 2 |
Операция 2 |
Пар-р 3 |
Значение пар-ра 3 |
Атрибут |
Значение атрибута |
|
1 |
сфера |
дом |
OR |
сфера |
офис |
AND |
оборудование |
бытовое |
тип |
off-line |
|
2 |
сфера |
офис |
OR |
сфера |
производство |
AND |
оборудование |
производственное |
тип |
on-line |
|
3 |
оборудование |
сетевое |
AND |
чувствительность |
высокая |
|
|
|
тип |
line-interactive |
|
4 |
цель |
уровень |
AND |
чувствительность |
высокая |
|
|
|
тип |
on-line |
|
5 |
аппаратура |
точная |
|
|
|
|
|
|
макс время
переключения |
1 |
|
6 |
аппаратура |
профессиональная |
AND |
цель |
скачки |
OR |
аппаратура |
профессиональная |
макс время
переключения |
3 |
|
7 |
масса |
любая |
AND |
сфера |
дом |
|
|
|
макс масса |
100 |
|
8 |
масса |
малая |
|
|
|
|
|
|
макс масса |
10 |
|
9 |
масса |
средняя |
|
|
|
|
|
|
макс масса |
60 |
|
10 |
нагрузка |
3 |
AND |
работа |
долгая |
AND |
оборудование |
бытовое |
мин мощность |
3000 |
|
11 |
нагрузка |
2 |
AND |
работа |
долгая |
AND |
оборудование |
бытовое |
мин мощность |
2000 |
|
12 |
нагрузка |
1 |
AND |
работа |
долгая |
AND |
оборудование |
бытовое |
мин мощность |
1000 |
|
13 |
нагрузка |
3 |
AND |
работа |
средняя |
AND |
оборудование |
бытовое |
мин мощность |
1500 |
|
14 |
сфера |
дом |
|
|
|
|
|
|
мин время
работы |
5 |
|
15 |
сфера |
офис |
|
|
|
|
|
|
мин время
работы |
10 |
|
18 |
ограничение_цены |
true |
|
|
|
|
|
|
макс цена |
цена |
|
19 |
подзарядка |
быстрая |
|
|
|
|
|
|
макс время
подзарядки |
5 |
|
20 |
подзарядка |
средняя |
|
|
|
|
|
|
макс время
подзарядки |
12 |
|
21 |
сфера |
дом |
OR |
сфера |
офис |
AND |
чувствительность |
низкая |
тип |
off-line |
|
22 |
особые_условия |
true |
|
|
|
|
|
|
условия
использования |
температура+защита+шумоизоляция |
|
26 |
габариты |
малые |
|
|
|
|
|
|
макс габариты |
small |
|
27 |
габариты |
средние |
|
|
|
|
|
|
макс габариты |
middle |
|
28 |
поддержка_ПО |
true |
AND |
поддержка_сетей |
true |
|
|
|
ПО и сети |
ПО+сеть |
|
29 |
поддержка_ПО |
true |
AND |
поддержка_сетей |
false |
|
|
|
ПО и сети |
ПО |
|
30 |
поддержка_ПО |
false |
AND |
поддержка_сетей |
true |
|
|
|
ПО и сети |
сеть |
|
31 |
сфера |
производство |
OR |
сфера |
офис |
|
масса |
любая |
макс масса |
1000 |
|
32 |
аппаратура |
прочая |
|
|
|
|
|
|
макс время
переключения |
40 |
|
33 |
нагрузка |
2 |
AND |
работа |
средняя |
AND |
оборудование |
бытовое |
мин мощность |
1000 |
|
34 |
нагрузка |
1 |
AND |
работа |
средняя |
AND |
оборудование |
бытовое |
мин мощность |
500 |
|
35 |
нагрузка |
3 |
AND |
работа |
любая |
AND |
оборудование |
бытовое |
мин мощность |
750 |
|
36 |
нагрузка |
2 |
AND |
работа |
любая |
AND |
оборудование |
бытовое |
мин мощность |
500 |
|
37 |
нагрузка |
1 |
AND |
работа |
любая |
AND |
оборудование |
бытовое |
мин мощность |
250 |
|
38 |
нагрузка |
3 |
AND |
работа |
долгая |
AND |
оборудование |
производственное |
мин мощность |
36000 |
|
39 |
нагрузка |
2 |
AND |
работа |
долгая |
AND |
оборудование |
производственное |
мин мощность |
24000 |
|
40 |
нагрузка |
1 |
AND |
работа |
долгая |
AND |
оборудование |
производственное |
мин мощность |
12000 |
|
41 |
нагрузка |
3 |
AND |
работа |
средняя |
AND |
оборудование |
производственное |
мин мощность |
18000 |
|
42 |
нагрузка |
2 |
AND |
работа |
средняя |
AND |
оборудование |
производственное |
мин мощность |
12000 |
|
43 |
нагрузка |
1 |
AND |
работа |
средняя |
AND |
оборудование |
производственное |
мин мощность |
6000 |
|
44 |
нагрузка |
3 |
AND |
работа |
любая |
AND |
оборудование |
производственное |
мин мощность |
9000 |
|
45 |
нагрузка |
2 |
AND |
работа |
любая |
AND |
оборудование |
производственное |
мин мощность |
6000 |
|
46 |
нагрузка |
1 |
AND |
работа |
любая |
AND |
оборудование |
производственное |
мин мощность |
3000 |
|
47 |
нагрузка |
3 |
AND |
работа |
долгая |
AND |
оборудование |
сетевое |
мин мощность |
6000 |
|
48 |
нагрузка |
2 |
AND |
работа |
долгая |
AND |
оборудование |
сетевое |
мин мощность |
4000 |
|
49 |
нагрузка |
1 |
AND |
работа |
долгая |
AND |
оборудование |
сетевое |
мин мощность |
2000 |
|
50 |
нагрузка |
3 |
AND |
работа |
средняя |
AND |
оборудование |
сетевое |
мин мощность |
3000 |
|
51 |
нагрузка |
2 |
AND |
работа |
средняя |
AND |
оборудование |
сетевое |
мин мощность |
2000 |
|
52 |
нагрузка |
1 |
AND |
работа |
средняя |
AND |
оборудование |
сетевое |
мин мощность |
1000 |
|
53 |
нагрузка |
3 |
AND |
работа |
любая |
AND |
оборудование |
сетевое |
мин мощность |
1500 |
|
54 |
нагрузка |
2 |
AND |
работа |
любая |
AND |
оборудование |
сетевое |
мин мощность |
1000 |
|
55 |
нагрузка |
1 |
AND |
работа |
любая |
AND |
оборудование |
сетевое |
мин мощность |
500 |
|
56 |
сфера |
производство |
|
|
|
|
|
|
мин время работы |
15 |
7. Алгоритм принятия решения (выбора) со схемой
1) Чтение атрибута «макс цена» из БЗ, определение его значения. Если значение не числовое, то переход к п.3
2) Выяснение наличия моделей ИБП (из таблицы Models), цена которых не выше полученного значения, если такие модели есть, то пометка всех остальных, как неподходящих, иначе присвоение цене свойства «минимальная».
3) Чтение атрибута «мин мощность» из БЗ, определение его значения.
4) Выяснение наличия моделей ИБП (из таблицы Models), мощность которых не ниже полученного значения, если такие модели есть, то пометка всех остальных, как неподходящих, иначе выбор максимальной из предложенных мощностей подходящих моделей.
5) Чтение поочередно оставшихся атрибутов из БЗ, определение их значений. Выявление наличия подходящих моделей по данному атрибуту, если такие имеются, то пометка остальных , как не подходящих, если таких нет, то выбор из имеющихся подходящих моделей таких, у которых имеется наиболее приближенные к значению атрибута свойства.
6) Пока атрибуты не закончились – п.5. Иначе – п.7
7) Выявление подходящих моделей по типу и снова по цене (теперь с разбором «минимальной» и «максимальной» цены).
8) Вывод приближенно подходящей модели на экран.
Схема представлена в Приложении 1.
8. Алгоритм работы программы (по 3 частям)
Получение исходных данных (множество P) от
пользователя в режиме диалога
1) Прочтение записи в таблице очередности задавания вопросов (если записи кончились, то перейти к п.8)
2) Вывод вопроса с указанным там номером на экран
3) Определение типа вопроса и вывод в зависимости от этого на экран различных функциональных компонент (список, группа радиокнопок, поле ввода)
4) Поиск в БЗ ответов на данный вопрос и вывод их на экран (для списка)
5) После выбора варианта или ввода значения пользователем и нажатия кнопки далее осуществляется запись соответствующего значения параметра в таблицу параметров
6) Пометка вопросов, которые не нужно задавать после данного ответа (если есть), и пометка самого вопроса, как заданного.
7) Прочтение следующего вопроса, номер которого указан в прочитанном вопросе (если есть) и переход к п.2. Переход к п.1. (если следующий вопрос не указан)
8) Прочтение первого незаданного вопроса (если есть), кроме вопросов типа ввода значения (они выводятся только при прямом указании на их вывод) и переход к п.2.
9) Завершение диалога с пользователем (если незаданных вопросов не осталось)
Обработка (анализ) полученных данных P для
определения атрибутов (множество A) объекта принятия решения O
1) Чтение непроверенного правила из БЗ (если такого нет, то переход к п.10)
2) Проверка на наличие пользовательских данных (полученных из полей ввода) – поле Users. Если пользовательские данные есть, то переход к п.8.
3) Выявление имен параметров, указанных в правиле, и чтение их значений из таблицы параметров
4) Получение логических переменных, которые характеризуют операнды правила (если данный параметр имеет а таблице параметров то же значение, что и в правиле, то логическая переменная = «истина», иначе = «ложь»)
5) Выявление операций, указанных в правиле, и их последовательное (слева направо) применение к логическим переменным, в результате чего получение логического значения выполнения правила
6) Если логическое значение правила = «истина», то в атрибут, имя которого указывается в правиле, записывается значение указанное в правиле.
7) Пометка правила, как проверенного и переход к п.1.
8) Чтение всех имен параметров и запись их значений из таблицы параметров в указанный в правиле атрибут (если параметров больше одного, то значения разделяются знаком «+»)
9) Пометка правила, как проверенного и переход к п.1.
10) Завершение проверки правил (все данные полученные от пользователя обработаны)
Принятие решения на основе полученных характеристик A
(выбор одного из заранее определенных вариантов решения) и вывод результата
пользователю.
Алгоритм принятия решения описан в п.7 отчета.
9. Структура БЗ (логическая и физическая модель данных в
архитектуре реляционных или объектных БД)

Таблица Orders
|
Поле |
Описание |
Допустимые значения |
|
ID |
Ключ |
(число) |
|
ID_Q |
Номер следующего в
очереди вопроса |
(ID из таблицы Questions) |
Таблица Questions
|
Поле |
Описание |
Допустимые значения |
|
ID |
Ключ |
(число) |
|
Quest |
Текст вопроса |
(текст) |
|
Asked |
Задан/не задан |
- true (вопрос был задан) - false (вопрос не был задан) |
|
ID_nextQ |
Номер следующего
вопроса |
(ID из таблицы Questions) |
|
Parametr |
Изменяемый
параметр |
(имя параметра из
таблицы Result) |
|
Type_Q |
Тип вопроса |
- 1 (вопрос на
выбор варианта ответа) - 2 (вопрос на
Да/Нет) - 3 (вопрос на
ввод значения) |
|
Parametr_int |
Числовой тип
параметра |
- true (параметр-число) - false (параметр-строка) |
Таблица Result
|
Поле |
Описание |
Допустимые значения |
|
ID |
Ключ |
(число) |
|
Par_name |
Имя параметра |
(текст) |
|
Par_val |
Значение параметра |
(текст) |
|
Par_type |
Тип параметра |
- 0 (текст/число) - 1 (логический) |
Таблица Answers
|
Поле |
Описание |
Допустимые значения |
|
ID |
Ключ |
(число) |
|
Answer |
Текст ответа |
(текст) |
|
ID_Q |
Номер вопроса, к
которому принадлежит ответ |
(ID из таблицы Questions) |
|
ID_nextQ |
Номер следующего
вопроса |
(ID из таблицы Questions) |
|
Par_val |
Значение
изменяемого параметра |
(значение
параметра) |
|
Not_Ask |
Номер вопроса,
который не нужно задавать |
(ID из таблицы Questions) |
|
Not_Ask_par_name |
Имя параметра, за
который отвечает вопрос, который не нужно задавать |
(имя параметра из
таблицы Result) |
|
Not_Ask_par_val |
Значение
параметра, за который отвечает вопрос, который не нужно задавать |
(значение
параметра) |
Таблица Rules
|
Поле |
Описание |
Допустимые значения |
|
ID |
Ключ |
(число) |
|
In_par1 |
Имя параметра 1 |
(имя параметра из
таблицы Result) |
|
In_val1 |
Значение параметра
1 |
(значение
параметра) |
|
Oper1 |
Операция между 1 и
2 параметрами |
- AND - OR |
|
In_par2 |
Имя параметра 2 |
(имя параметра из
таблицы Result) |
|
In_val2 |
Значение параметра
2 |
(значение
параметра) |
|
Oper2 |
Операция между
логическим выражением, полученным с помощью 1-ой операции, и 3 параметром |
- AND - OR |
|
In_par3 |
Имя параметра 3 |
(имя параметра из
таблицы Result) |
|
In_val3 |
Значение параметра
3 |
(значение
параметра) |
|
Out_par |
Имя атрибута |
(имя атрибута из
таблицы Attribs) |
|
Out_val |
Значение атрибута |
(значение
атрибута) |
Таблица Attribs
|
Поле |
Описание |
Допустимые значения |
|
ID |
Ключ |
(число) |
|
Attr_name |
Имя атрибута |
(текст) |
|
Attr_val |
Значение атрибута |
(текст) |
Таблица Models
|
Поле |
Описание |
Допустимые значения |
|
ID |
Ключ |
(число) |
|
model |
Модель ИБП |
(текст) |
|
Type |
Тип ИБП |
(текст) |
|
Capacity |
Мощность ИБП |
(число) |
|
Size |
Габариты |
- small: ([число]х[число]х[число]) - middle: ([число]х[число]х[число]) - big: ([число]х[число]х[число]) |
|
Weigth |
Вес |
(число) |
|
Switch_time |
Время переключения
|
(число) |
|
Work_time |
Время работы при
номинальной нагрузке |
(число) |
|
Charge_time |
Время полной
зарядки батарей |
(число) |
|
Cost |
Цена ИБП |
- минимальная - высокая - (число) |
|
soft |
ПО и
поддурживаемые сети |
(текст) |
|
environment |
Эксплуатационные
условия |
(текст) |
|
firm |
Фирма-производитель |
(текст) |
|
match |
|
- true (подходит по свойствам) - false (не подходит по свойствам) |
10. Подробный алгоритм работы программы с БЗ
Для работы с БЗ используются SQL запросы (БД – MS Access, запросы вырабатываются приложением, написанным на языке С++).
Получение исходных данных (множество P) от
пользователя в режиме диалога
1) Прочтение записи в таблице очередности задавания вопросов (если записи кончились, то перейти к п.8)
SELECT ID_Q FROM Orders WHERE ID = <номер записи в таблице очередности>
Номер записи изменяется путем инкрементирования значения, контроль за наличием записи происходит по полю ID_Q, которое читается в компонент DBText (с помощью длины записанного в этом компоненте текста можно понять имеется ли запись, или они кончились).
2) Вывод вопроса с указанным там номером на экран (запрос в БЗ вопроса с полученным ID_Q)
SELECT * FROM Questions WHERE ID = <номер вопроса> AND Asked = false
3) Определение типа вопроса и вывод в зависимости от этого на экран различных функциональных компонент (список, группа радиокнопок, поле ввода)
Тип вопроса читается в поле DBText, и по его значению (1,2,3) делаются активными компоненты:
- DBCtrlGrid (для вариантов ответов)
- RadioGroup (для Да/Нет)
- DBEdit (для ввода значения)
4) Поиск в БЗ ответов на данный вопрос и вывод их на экран (для списка)
SELECT * FROM Answers WHERE ID_Q = <номер вопроса>
Варианты ответов выводятся в DBText, расположенные на компоненте DBCtrlGrid.
5) После выбора варианта или ввода значения пользователем и нажатия кнопки далее осуществляется запись соответствующего значения параметра в таблицу параметров
UPDATE Result SET Par_val = <имя параметра> WHERE Par_name = <значение параметра>
Имя параметра читается из DBText, связанного с соответствующим полем вопроса, а значение параметра читается из DBEdit, связанным с соответствующим полем ответа.
6) Пометка вопросов, которые не нужно задавать после данного ответа (если есть), и пометка самого вопроса, как заданного.
UPDATE Questions SET Asked = true WHERE ID= <номер вопроса>
7) Прочтение следующего вопроса, номер которого указан в прочитанном вопросе (если есть) и переход к п.2. Переход к п.1. (если следующий вопрос не указан)
SELECT * FROM Questions WHERE ID = <номер следующего вопроса> AND
Asked = false
8) Прочтение первого незаданного вопроса (если есть), кроме вопросов типа ввода значения (они выводятся только при прямом указании на их вывод) и переход к п.2.
SELECT * FROM Questions WHERE Asked = false AND Type_Q <> 3
9) Завершение диалога с пользователем (если незаданных вопросов не осталось)
Незаданных вопросов больше не осталось тогда, когда после выполнения запроса в поле, связанным с текстом вопроса, не содержится данных.
Обработка (анализ) полученных данных P для
определения атрибутов (множество A) объекта принятия решения O
(функция void Rulezz())
1) Чтение непроверенного правила из БЗ (если такого нет, то переход к п.10)
SELECT * FROM Rules WHERE Checked =
false
2) Проверка на наличие пользовательских данных (полученных из полей ввода) – поле Users. Если пользовательские данные есть, то переход к п.8.
Проверка осуществляется путем выявления значения, хранящегося в DBCheckBox, связанным с полем Users выбранного по запросу правила.
3) Выявление имен параметров, указанных в правиле, и чтение их значений из таблицы параметров
SELECT * FROM Result WHERE Par_name
= <имя параметра>
4) Получение логических переменных, которые характеризуют операнды правила (если данный параметр имеет а таблице параметров то же значение, что и в правиле, то логическая переменная = «истина», иначе = «ложь»)
Получение p1, p2, p3 на основе сравнения строк: значения параметра полученного из таб параметров и значения параметра, записанного в правиле.
5) Выявление операций, указанных в правиле, и их последовательное (слева направо) применение к логическим переменным, в результате чего получение логического значения выполнения правила
if
(!strcmp(Form4->DBText6->Caption.c_str(),"AND")) p12=(p1
&& p2);
else if (!strcmp(Form4->DBText6->Caption.c_str(),"OR"))
p12=(p1 || p2);
else p12=p1;
if
(!strcmp(Form4->DBText9->Caption.c_str(),"AND")) p=(p12
&& p3);
else if (!strcmp(Form4->DBText9->Caption.c_str(),"OR"))
p=(p12 || p3);
else p=p12;
6) Если логическое значение правила = «истина», то в атрибут, имя которого указывается в правиле, записывается значение указанное в правиле.
UPDATE Attribs SET Attr_val = <имя атрибута> WHERE Attr_name = <значение атрибута>
Имя и значение атрибута читаются из DBText, связанного с правилом, прочитанным по запросу.
7) Пометка правила, как проверенного и переход к п.1.
UPDATE Rules SET Checked = true
WHERE ID = <номер проверяемого правила>
8) Чтение всех имен параметров и запись их значений из таблицы параметров в указанный в правиле атрибут (если параметров больше одного, то значения разделяются знаком «+»)
SELECT * FROM Result WHERE Par_name = <имя параметра>
…
UPDATE Attribs SET Attr_val = <значение атрибута> WHERE Attr_name = <имя атрибута>
Значение атрибута получаем из DBEdit, связанного с полем значения параметра, прочитанного по запросу.
9) Пометка правила, как проверенного и переход к п.1.
UPDATE Rules SET Checked = true
WHERE ID = <номер проверяемого правила>
10) Завершение проверки правил (все данные полученные от пользователя обработаны)
Все правила обработаны, когда по запросу (п.1) не находится ни одной записи в БД.
Принятие решения на основе полученных характеристик A (выбор одного из заранее определенных вариантов решения) и вывод результата пользователю(функция void Solution()).
1) Чтение атрибута «макс цена» из БЗ, определение его значения. Если значение не числовое, то переход к п.3
SELECT * FROM Attribs WHERE
Attr_name = 'макс цена'
2) Выяснение наличия моделей ИБП (из таблицы Models), цена которых не выше полученного значения, если такие модели есть, то пометка всех остальных, как неподходящих, иначе присвоение цене свойства «минимальная».
SELECT * FROM Models WHERE cost <= <пользовательское значение>
…
if <по запросу есть найденные записи>
UPDATE Models SET Match = false
WHERE cost > < пользовательское значение >
else UPDATE Attribs SET
Attr_val = 'минимальная'
WHERE Attr_name = 'макс цена'
3) Чтение атрибута «мин мощность» из БЗ, определение его значения.
SELECT * FROM Attribs WHERE
Attr_name = ‘мин мощность’
4) Выяснение наличия моделей ИБП (из таблицы Models), мощность которых не ниже полученного значения, если такие модели есть, то пометка всех остальных, как неподходящих, иначе выбор максимальной из предложенных мощностей подходящих моделей.
SELECT * FROM Models WHERE capacity
>= <пользовательское значение>
…
if <по запросу есть найденные записи>
UPDATE Models SET Match = false
WHERE capacity < <пользовательское значение>
else UPDATE Models SET Match = false WHERE
capacity < (SELECT MAX(capacity) FROM Models WHERE Match = true)
5) Чтение поочередно оставшихся атрибутов из БЗ, определение их значений. Выявление наличия подходящих моделей по данному атрибуту, если такие имеются, то пометка остальных , как не подходящих, если таких нет, то выбор из имеющихся подходящих моделей таких, у которых имеется наиболее приближенные к значению атрибута свойства.
SELECT * FROM Attribs WHERE ID = <номер записи в таблице атрибутов>
…
SELECT * FROM Models WHERE <атрибут> <нужная операция > < значение>
…
if <по запросу есть найденные записи>
UPDATE Models SET Match = false
WHERE <атрибут>
<операция отсеивания> < значение>
else UPDATE Models SET Match = false WHERE <атрибут>
< (SELECT <MAX/MIN>(<атрибут>) FROM Models WHERE Match = true)
6) Пока атрибуты не закончились – п.5. Иначе – п.7
7) Выявление подходящих моделей по типу и снова по цене (теперь с разбором «минимальной» и «максимальной» цены).
8) Вывод приближенно подходящей модели на экран.
SELECT * FROM Models WHERE Match = true
11. Подробная инструкция по работе с БЗ и ЭС
Добавление записей осуществляется в поля таблиц, описанных в п. 9 отчета.
1) Ввести текст вопроса в поле Quest таблицы Questions
2) Указать тип вопроса в поле Type_Q таблицы Questions
3) Выбрать параметр, на который влияет ответ на этот вопрос, в поле Parametr таблицы Questions
4) При необходимости можно добавить параметр в таблицу параметров Result (задать имя параметра Par_name и если тип логический, то поставить 1 в поле Par_type)
5) Если тип параметра числовой, то поставить галочку в поле Parametr_int таблицы Questions
6) При необходимости указать следующий вопрос в поле ID_nextQ таблицы Questions
7)
Добавить ответы на данный вопрос в таблицу Answers, в поле ID_Q указать номер созданного вами вопроса,
в поле Anmwer ввести
текст ответа, в поле Par_val ввести значение, которое
присвоится параметру, за который отвечает вопрос, в случае выбора этого ответа.
Можно указать вопрос, который не следует спрашивать (Not_Ask), а также параметр и значение еще одного параметра, на
который ответ влияет напрямую (Not_Ask_
par_name и Not_Ask_
par_val)
8) Можно добавить вопрос в очередь задавания вопросов – таблица Orders (где указать в поле ID_Q номер созданного вопроса)
1) Указать имена параметров, участвующих в правиле, в поле In_Par<№ параметра> таблицы Rules
2) Указать значения параметров, участвующих в правиле, в поле In_Val<№ параметра> таблицы Rules
3) Указать атрибут, на который влияет это правило, в поле Out_Attr таблицы Rules
4) Указать значение атрибута, на который влияет это правило, в поле Out_Val таблицы Rules
5) Указать операции: Oper1 между 1 и 2 параметрами, Oper2 между полученным логическим выражением и 3 параметром (значения поля оперрации AND или OR)
6) Если значение какого-то параметра необходимо перенести в атрибут, то нужно поставить галочку в поле Users, а в поле Out_Val указать имя параметра, из которого берется значение (если из нескольких параметров, тогда их имена указываются через знак «+»)
Приложение 1.
