по курсу «ТВПС»
Выполнили: Клименко В. А.
Зимин А. В.
Проверил: Жбанов С. А.
Комсомольск-на-Амуре
Цель работы: Изучить структуру, определить достоинства и недостатки используемой продукционной модели.
Задание: Разработать программу с продукционной моделью представления знаний на тему «Животные».
Алгоритм
Модель – набор правил, формул, систем уравнений, баз данных, которые описывают задачу.
Продукционная модель – модель, в которой все знания представляются в виде набора правил если…то.
Правило делится на 3 части:
· Предусловие
· Ядро
· Постусловие
В данной лабораторной работе сферой применения продукционной модели является множество животных. Пользователю последовательно задаются 3 вопроса: Q1, Q2, Q3.
Множество ответов пользователя (А1,А2,А3) состоит из ответов да/нет.
Далее множество (А1,А2,А3) передается предикату P(А1,А2,А3), который, соотносит полученные ответы с базой фактов и называет животное, которому соответствует данный пользователем набор ответов.
Таким образом, условно в качестве предусловия можно выделить положительный или отрицательный ответ на первый вопрос модели, т.к. этот ответ сокращает множество возможных решений. Ядром является наличие или отсутствие последующих свойств, указанное пользователем. Постусловием можно назвать найденное продукционной моделью решение.
Описание предикатов
askpred(string, integer, WINDOW) – задает вопрос пользователю и принимает ответ
sortansw(integer, WINDOW) – определяет ответ пользователя, выводит наличие или отсутствие свойства в окно ("да"/ "нет")
recognize(WINDOW) - читает факты из файла во внутреннюю базу фактов animal, ищет совпадение с базой, выводит название животного, если оно присутствует в базе, иначе выводит сообщение, что животное не определено.
addpred(WINDOW, WINDOW) - добавляет информацию о животном в базу фактов, находящуюся в файле.
Текст программы
Copyright (c) My Company
Project: TVPS_1
FileName: TVPS_1.PRO
Purpose: No description
Written by: Visual Prolog
Comments:
******************************************************************************/
include "tvps_1.inc"
include "tvps_1.con"
include "hlptopic.con"
%BEGIN_WIN Task Window
/***************************************************************************
Event handling for Task Window
***************************************************************************/
database - f1
animal(string, string)
predicates
askpred(string, integer, WINDOW)
sortansw(integer, WINDOW)
recognize(WINDOW)
addpred(WINDOW, WINDOW)
clauses
askpred(A,W,H) :- W=dlg_ask("Дайте ответ на вопрос",A,["Да","Нет",""]), sortansw(W, H).
sortansw(resp_default,H) :- S1=win_GetText(H), concat(S1,"да",S2), %ответ "да"
win_SetText(H, S2).
sortansw(resp_2,H) :- S1=win_GetText(H), concat(S1,"нет",S2), %ответ "нет"
win_SetText(H, S2).
recognize(H) :- S=win_GetText(H),
consult("tvps_1.txt",f1), %Читает факты из файла во внутр. базу фактов animal
animal(S, X), %если есть совпадение с базой (есть ли такое животное)
concat("Вероятно это ", X, S1), dlg_Note("Решение", S1).%печатаем имя животного
recognize(_) :- dlg_Note("Сообщение", "Я не знаю кто это"). %если нет в базе животного
%Добавление инфы о животном в базу
addpred(H1, H2) :- S1 = win_GetText(H1), S2 = win_GetText(H2), S1<>"", S2<>"",
retractall(animal(_,_),f1),consult("tvps_1.txt",f1),asserta(animal(S2, S1)),
save("tvps_1.txt",f1),win_SetText(H1, ""), dlg_Note("Сообщение","Животное добавлено").
addpred(_, _):-dlg_Note("Ошибка","Недостаточно данных").
predicates
task_win_eh : EHANDLER
constants
%BEGIN Task Window, CreateParms, 08:49:26-28.9.2007, Code automatically updated!
task_win_Flags = [wsf_SizeBorder,wsf_TitleBar,wsf_Close,wsf_Maximize,wsf_Minimize]
task_win_Menu = res_menu(idr_task_menu)
task_win_Title = "Поиск животных"
task_win_Help = contents
%END Task Window, CreateParms
clauses
%BEGIN Task Window, e_Create
task_win_eh(_Win,e_Create(_),0):-!,
%BEGIN Task Window, InitControls, 08:49:26-28.9.2007, Code automatically updated!
win_CreateControl(wc_PushButton,rct(6,2,156,39),"Поиск животного",_Win,[wsf_Group,wsf_TabStop],idc_push_button),
win_CreateControl(wc_Edit,rct(6,45,156,71),"",_Win,[wsf_AlignCenter,wsf_Group,wsf_TabStop,wsf_AutoHScroll,wsf_ReadOnly],idc_edit),
win_CreateControl(wc_PushButton,rct(188,2,301,39),"Добавить",_Win,[wsf_Group,wsf_TabStop],idc_push_button1),
win_CreateControl(wc_Edit,rct(188,45,301,71),"",_Win,[wsf_AlignCenter,wsf_Group,wsf_TabStop,wsf_AutoHScroll],idc_edit1),
win_move(_Win,rct(300,200,614,400)),% change window place/size
%END Task Window, InitControls
%BEGIN Task Window, ToolbarCreate, 08:49:26-28.9.2007, Code automatically updated!
%END Task Window, ToolbarCreate
ifdef use_message
msg_Create(100),
enddef
!.
%END Task Window, e_Create
%MARK Task Window, new events
%BEGIN Task Window, idc_push_button1 _CtlInfo
task_win_eh(_Win,e_Control(idc_push_button1,_CtrlType,_CtrlWin
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.