При разработке прототипа экспертной системы, использующей продукционную модель представления знаний, можно использовать демонстрационный проект \EXAMPLES\GENI.VPR.
Рис. 12.4. Рабочее окно программы GENI
Представим фрагмент базы знаний geni.gni.
rule(1,"carnivore","cheetah",[1,2])
rule(2,"carnivore","tiger",[1,3])
cond(1,"it has tawny color")
cond(2,"it has dark spots")
cond(3,"it has black stripes")
Структура rule: номер правила, категория, подкатегория, список условий для выполнения правила.
Структура cond: номер условия, текст условия.
Приведем рекомендации по преобразованию проекта geni.vpr в прототип экспертной системы, использующий графический интерфейс пользователя.
Начальные действия
1. Создать папку для проекта, скопировав в нее файл geni.pro.
2. Запустить Visual Prolog, выполнить действия, представленные на рисунках.
3. В опция компиляции (Options – Project (.VPR) – Compiler Options) выставить соответствующие параметры.
4. Добавить запись
include "geni.pro"
в файл geniwin.pro
5. Закомментировать goal в geni.pro.
6. Проверить работоспособность проекта.
Загрузка базы знаний
1. Модифицировать меню проекта.
2. Добавить код вызывающий стандартный диалог выбора файла dlg_GetFileName.
%BEGIN Task Window, id_file_open task_win_eh(_Win,e_Menu(id_file_open,_ShiftCtlAlt),0):-!, FILENAME = dlg_GetFileName("*.gni",["gni","*.gni"], "Загрузка базы знаний",[],"",_OutListFiles), consult (FILENAME, geni), !. %END Task Window, id_file_open
Оформление вызова целевого предиката
1. Создать целевой предикат.
Целевой предикат создается из модификации цели в файле geni.pro.
work if topic(MAINGOAL,PURPOSE), %write(PURPOSE),nl, Title="Начало работы", dlg_Note(Title, PURPOSE), go([],MAINGOAL). work if Title="Предупреждение", dlg_Note(Title,"База знаний не загружена!"). % dlg_Error("База знаний не загружена!").
2. Добавить в меню пункт «Консультация» и в текст программы вызов предиката work.
%BEGIN Task Window, id_ консультация task_win_eh(_Win,e_Menu(id_консультация,_ShiftCtlAlt),0):-!, work, <p>!. %END Task Window, id_ консультация</p>
Преобразование текстовых сообщений
Для преобразования текстовых сообщений использовать предикат concat.
Для преобразования диалога, организованного на предикате readchar, использовать диалог dlg_ask.
Рекомендации по вызову собственных диалогов или окон
Для вызова диалога или окна не из меню, необходимо выполнить два шага:
- ранее сохранить дескриптор окна в базе данных (тип дескриптора WINDOW);
- взять из базы данных дескриптор окна и его использовать для подстановки в предикат, вызывающий собственный диалог.
Контрольные вопросы и задания
- Какие существуют стандартные диалоги?
- Как создать окно, предназначенное для просмотра текста?
- Как создать окно редактора?
- Каким образом организовать просмотр базы данных?
- Почему база знаний в программе GENI создана на основе фактов?
- Как тип вывода используется в программе GENI?
- Является программа GENI оболочкой экспертной системы?
- Разработайте модуль просмотра базы знаний.
- Разработайте модуль редактирования базы знаний.
- Разработайте модуль добавления правил в базу знаний.