Разработка прототипа экспертной системы

При разработке прототипа экспертной системы, использующей продукционную модель представления знаний, можно использовать демонстрационный проект \EXAMPLES\GENI.VPR.

Статья 103 - Картинка 1

Рис. 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, выполнить действия, представленные на рисунках.

Статья 103 - Картинка 2

Статья 103 - Картинка 3

Статья 103 - Картинка 4

3. В опция компиляции (Options – Project (.VPR) – Compiler Options) выставить соответствующие параметры.

Статья 103 - Картинка 5

4. Добавить запись

include "geni.pro"

в файл geniwin.pro

5. Закомментировать goal в geni.pro.

6. Проверить работоспособность проекта.

Статья 103 - Картинка 6

Загрузка базы знаний

1. Модифицировать меню проекта.

Статья 103 - Картинка 7

Статья 103 - Картинка 8

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);
  • взять из базы данных дескриптор окна и его использовать для подстановки в предикат, вызывающий собственный диалог.

Контрольные вопросы и задания

  1. Какие существуют стандартные диалоги?
  2. Как создать окно, предназначенное для просмотра текста?
  3. Как создать окно редактора?
  4. Каким образом организовать просмотр базы данных?
  5. Почему база знаний в программе GENI создана на основе фактов?
  6. Как тип вывода используется в программе GENI?
  7. Является программа GENI оболочкой экспертной системы?
  8. Разработайте модуль просмотра базы знаний.
  9. Разработайте модуль редактирования базы знаний.
  10. Разработайте модуль добавления правил в базу знаний.
Расскажи друзьям