Продукционные модели. Разработка программы с продукционной моделью представления знаний на тему «Животные».

Страницы работы

Фрагмент текста работы

Министерство образования и науки РФ

Федеральное агентство по образованию

Государственное образовательное учреждение высшего профессионального образования

 «Комсомольский-на-Амуре Государственный Технический Университет»

Факультет компьютерных технологий

Кафедра МОП ЭВМ

Лабораторная работа №1

по курсу «ТВПС»

Выполнили:                                                                                                             Клименко В. А.

Зимин А. В.

Проверил:                                                                                                                Жбанов С. А.

Комсомольск-на-Амуре

2007


Тема:                         Продукционные модели.

Цель работы:          Изучить структуру, определить достоинства и недостатки используемой продукционной модели.

Задание:                    Разработать программу с продукционной моделью представления знаний на тему «Животные».


Алгоритм

Модель – набор правил, формул, систем уравнений, баз данных, которые описывают задачу.

Продукционная модель – модель, в которой все знания представляются в виде набора правил если…то.

Правило делится на 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

Похожие материалы

Информация о работе