- •Реалізація методів штучного інтелекту у середовищі Visual Prolog
- •Теоретична частина Методи розв’язання задач.
- •Розв’язання задач методом пошуку в просторі станів.
- •Загальна схема алгоритму Харта, Нільсона і Рафаеля
- •Розв’язання задач методом редукції.
- •Розв’язання задач дедуктивного вибору
- •Розв’язання задач, що використовують немонотонні логіки, імовірнісні логіки.
- •Експертні системи.
- •Експертна система, заснована на правилах
- •Експертні системи, що базуються на логіці.
- •Модуль (компонент) пояснення.
- •Модуль набуття знань (компонент набуття знань).
- •Етапи проектування ес.
- •Відмінність експертних систем від традиційних програм
- •Основи програмування на мові Visual Prolog Загальний огляд мови Пролог
- •Основні теоретичні відомості Основні визначення мови Visual Prolog (далі просто Пролог)
- •Структура програми на мові Пролог (для Visual Prolog 5.2)
- •Предикати введення - виведення
- •Об’єкти даних
- •Завдання 1.
- •Вбудовані механізми мови Пролог. Управління бектрекінгом.
- •Організація циклів. Рекурсія.
- •Моделювання недетермінованого скінченного автомата.
- •Використання динамічної бази даних
- •Рекомендації для створення програм на Пролозі.
- •Завдання 2.
- •Рекурсивні структури даних
- •Структура даних типу дерева
- •Обходи дерева
- •Бінарний пошук на дереві.
- •Сортування по дереву
- •Лексикографічне впорядкування
- •Реалізація деяких методів пошуку в просторі станів на Пролозі.
- •Завдання 3.
- •Короткі відомості про засоби програмування інтерфейсів (vpi) Visual Prolog 5.2
- •Створення найпростішого додатку.
- •Додавання пункту меню.
- •Додавання речення для реагування на вибір пункту меню
- •Вставка предикату dlg_Note в речення.
- •Використання діалогових вікон, створених користувачем.
- •Завдання 4.
- •Тема 1. Консультуюча інтерактивна експертна система по визначенню оптимальної конфігурації пеом.
- •Тема 2. Діагностична інтерактивна експертна система пошуку причини й усунення несправності кольорового телевізора lg cf-20f60k.
- •Тема 3. Консультуюча експертна система для вибору породи собаки.
- •Тема 4. Медична консультуюча експертна система на вибір лікарських трав.
- •Тема 5. Експертна система для визначення мінерального добрива.
- •Тема 6. Консультуюча інтерактивна експертна система,яка допомагає директору фірми при прийомі кандидата на роботу. Експертна система дозволяє визначити яку посаду у фірмі може зайняти кандидат.
- •Тема 7. Консультуюча експертна система прогнозу повені і необхідності евакуації міста n.
- •Тема 8. Діагностична медична експертна система.
- •Додаток Експертна система ідентифікації птахів Північної Америки.
- •Експертна система фінансового планування.
- •Список літератури.
Експертна система фінансового планування.
Консультуюча експертна система, що прогнозує ситуацію на фондовій біржі.
Основними вхідними фактами (даними) є дані про стан на фондовій біржі.
Зразкові правила для експертної системи:
Якщо процентні ставки падають, то рівень цін на біржі росте
Якщо процентні ставки ростуть, то рівень цін на біржі падає.
Якщо валютний курс долара падає, то процентні ставки ростуть.
Якщо валютний курс долара росте, то процентні ставки падають.
Якщо процентні ставки федерального резерву падають і гроші з федерального резерву додаються в банківську систему, то процентні ставки падають.
Особливості ЕС такі:
реалізований механізм прямого висновку;
інтерфейс користувача виконано з використанням VPI ( програма керується стандартними елементами управління – кнопки керування, елементи меню, діалогові вікна та ін.).
в інтерфейсі користувача застосована фразова форма діалогу з використанням морфологічного (лексичного) аналізу декларативним методом.
дані представлені у вигляді пар атрибут-значення.
база знань представляє собою набір продукцій (правил Якщо – То).
Узагальнений алгоритм роботи даної ЕС описується так:
отримання активних фактів в результаті діалогу;
запуск механізму прямого логічного висновку, спрацьовування відповідних продукцій і отримання висновків;
видавання результатів роботи ЕС.
/******************************************************************
Copyright (c) My Company
Project: STOCK
FileName: STOCK.PRO
Purpose: No description
Written by: Visual Prolog
Comments:
****************************************************************/
include "stock.inc"
include "stock.con"
include "hlptopic.con"
%BEGIN_WIN Task Window
/*************************************************************
Event handling for Task Window
*************************************************************/
predicates
task_win_eh : EHANDLER
constants
%BEGIN Task Window, CreateParms, 18:52:45-25.8.2005, Code automatically updated!
task_win_Flags = [wsf_SizeBorder,wsf_TitleBar,wsf_Close,wsf_Maximize,wsf_Minimize,wsf_ClipSiblings]
task_win_Menu = res_menu(idr_task_menu)
task_win_Title = "Stock"
task_win_Help = idh_contents
%END Task Window, CreateParms
/* Початок бази знань та механізму логічного висновку ЕС */
/***********************************************************/
constants
questions = 5 % кількість питань плюс один
domains
ref_string = reference string
list=integer* % список цiлих чисел
Database - data
q(string,string) quit(integer) % для допомiжних цiлей
% факти iнтерфейсного модуля
synonym(string синонім, string значення) %предикат для збереження синонімів слів,
%які визначають значення атрибутів
% предикати для формування активних фактiв
fact(string атрибут,string значення) %факти збереження пар атрибут-значення
buf(integer,string) % буфер видiлених слiв або фраз
predicates
start
w(integer,string) input(integer) % для обробки запитальника
%для обробки рядкiв:
nondeterm str_proc(integer,string)
nondeterm formact(integer) asform(integer,string) % для формування активних фактiв
nondeterm job % виклик механiзму висновку
nondeterm rule(ref_string атрибут,ref_string значення) % предикат для продукцій та
%органiзацiї механiзму висновку
nondeterm output % видача висновку
clauses
/*База знань ЕС
Основні правила прямого логічного висновку - продукції:*/
rule("stock","зростає"):-fact("interest","падає").
rule("stock","падає"):-fact("interest","зростає").
rule("interest","зростає"):-fact("dollar","падає").
rule("interest","падає"):-fact("dollar","зростає").
rule("interest","падає"):-fact("fedint","падає"),fact("fedmon","додаються").
/*Кінець бази знань ЕС*/
start:- retractall(buf(_,_)),retractall(fact(_,_)),
input(1), % опитування i формування вхiдних фактiв
formact(1), % формування активних фактiв
job, % виклик механiзму висновку
output,!. % висновок результатiв роботи
/* *************************************************************
*************** iнтерфейс iз користувачем *********************
*********** морфологiчний (лексичний) аналiз декларативним методом ******/
% Цикл опитування i формування активних фактiв
input(N):- not(w(N,_)),!.
input(N):-w(N,W),
Msg=W,
InitStr="",
Title="Дайте відповідь на питання",
_NewSTRING=dlg_GetStr(Title,Msg,InitStr),
upper_lower(_NewSTRING,S),
str_proc(N,S),
N1=N+1, input(N1),!.
% формуємо базу фактiв видiлених слiв чи фраз
str_proc(N,S):- assert(buf(N,S)).
str_proc(_,_).
% Запитальник
w(1,"Як змінюється процентна ставка (Зростає, падає, Вам невідомо) ?").
w(2,"Як змінюється курс долара (Зростає, падає, Вам невідомо) ?").
w(3,"Як змінюється процентна ставка федерального резерву(Зростає, падає, Вам невідомо) ?").
w(4,"Додаються чи видаляються із банківської системи гроші із федерального резерву, або Вам невідомо ?").
/* *************************************************************
*************** Формування активних фактiв *****************
***************************************************************/
formact(constants):- !.
formact(N):- buf(N, B), synonym(Syn,W),searchstring(B,Syn,_),
asform(N,W),N1=N+1,formact(N1).
formact(N):- N1=N+1,formact(N1).
synonym("падає","падає").
synonym("впала","падає").
synonym("впав","падає").
synonym("вниз","падає").
synonym("зростає","зростає").
synonym("зріс","зростає").
synonym("зросла","зростає").
synonym("вгору","зростає").
synonym("додаються","додаються").
synonym("додалися","додаються").
synonym("додавалися","додаються").
% одержуємо активнi факти для рiзних груп
asform(1,A):-assert(fact("interest",A)).
asform(2,A):-assert(fact("dollar",A)).
asform(3,A):-assert(fact("fedint",A)).
asform(4,A):-assert(fact("fedmon",A)).
% Запуск механізму прямого логічного висновку
job:-rule(X, Y), not(fact(X,Y)),assert(fact(X,Y)),rule(_, _).
job.
% Видача сформованих висновкiв
output:-
fact("stock",X),
fact("interest",Y),
Title="Висновки системи: ", concat("Ціни на фондовій біржі ", X, String1),
dlg_Note(Title,String1),concat("Процентні ставки ", Y, String2),
dlg_Note(Title,String2).
output:-
Title="Висновки системи: ",dlg_Note(Title,"Вибачте, відповіді немає").
/********************************************************************/
/*Далі іде код, сформований автоматично системою програмування Visual Prolog*/
clauses
%BEGIN Task Window, e_Create
task_win_eh(_Win,e_Create(_),0):-!,
%BEGIN Task Window, InitControls, 18:52:45-25.8.2005, Code automatically updated!
%END Task Window, InitControls
%BEGIN Task Window, ToolbarCreate, 18:52:45-25.8.2005, Code automatically updated!
tb_project_toolbar_Create(_Win),
tb_help_line_Create(_Win),
%END Task Window, ToolbarCreate
ifdef use_message
msg_Create(100),
enddef
!.
%END Task Window, e_Create
%MARK Task Window, new events
%BEGIN Task Window, id_consult
task_win_eh(_Win,e_Menu(id_consult,_ShiftCtlAlt),0):-!,
start, %при виборі пункта меню Consult починається робота ЕС
!.
%END Task Window, id_consult
%BEGIN Task Window, id_help_contents
task_win_eh(_Win,e_Menu(id_help_contents,_ShiftCtlAlt),0):-!,
vpi_ShowHelp("stock.hlp"),
!.
%END Task Window, id_help_contents
%BEGIN Task Window, id_help_about
task_win_eh(Win,e_Menu(id_help_about,_ShiftCtlAlt),0):-!,
dlg_about_dialog_Create(Win),
!.
%END Task Window, id_help_about
%BEGIN Task Window, id_file_exit
task_win_eh(Win,e_Menu(id_file_exit,_ShiftCtlAlt),0):-!,
win_Destroy(Win),
!.
%END Task Window, id_file_exit
%BEGIN Task Window, e_Size
task_win_eh(_Win,e_Size(_Width,_Height),0):-!,
ifdef use_tbar
toolbar_Resize(_Win),
enddef
ifdef use_message
msg_Resize(_Win),
enddef
!.
%END Task Window, e_Size
%END_WIN Task Window
/********************************************************************
Invoking on-line Help
*******************************************************************/
project_ShowHelpContext(HelpTopic):-
vpi_ShowHelpContext("stock.hlp",HelpTopic).
/********************************************************************
Main Goal
********************************************************************/
goal
ifdef use_mdi
vpi_SetAttrVal(attr_win_mdi,b_true),
enddef
ifdef ws_win
ifdef use_3dctrl
vpi_SetAttrVal(attr_win_3dcontrols,b_true),
enddef
enddef
vpi_Init(task_win_Flags,task_win_eh,task_win_Menu,"stock",task_win_Title).
%BEGIN_TLB Project toolbar, 18:52:45-25.8.2005, Code automatically updated!
/********************************************************************
Creation of toolbar: Project toolbar
********************************************************************/
clauses
tb_project_toolbar_Create(_Parent):-
ifdef use_tbar
toolbar_create(tb_top,0xC0C0C0,_Parent,
[tb_ctrl(id_file_new,pushb,idb_new_up,idb_new_dn,idb_new_up,"New;New file",1,1),
tb_ctrl(id_file_open,pushb,idb_open_up,idb_open_dn,idb_open_up,"Open;Open file",1,1),
tb_ctrl(id_file_save,pushb,idb_save_up,idb_save_dn,idb_save_up,"Save;File save",1,1),
separator,
tb_ctrl(id_edit_undo,pushb,idb_undo_up,idb_undo_dn,idb_undo_up,"Undo;Undo",1,1),
tb_ctrl(id_edit_redo,pushb,idb_redo_up,idb_redo_dn,idb_redo_up,"Redo;Redo",1,1),
separator,
tb_ctrl(id_edit_cut,pushb,idb_cut_up,idb_cut_dn,idb_cut_up,"Cut;Cut to clipboard",1,1),
tb_ctrl(id_edit_copy,pushb,idb_copy_up,idb_copy_dn,idb_copy_up,"Copy;Copy to clipboard",1,1),
tb_ctrl(id_edit_paste,pushb,idb_paste_up,idb_paste_dn,idb_paste_up,"Paste;Paste from clipboard",1,1),
separator,
separator,
tb_ctrl(id_help_contents,pushb,idb_help_up,idb_help_down,idb_help_up,"Help;Help",1,1)]),
enddef
true.
%END_TLB Project toolbar
%BEGIN_TLB Help line, 18:52:45-25.8.2005, Code automatically updated!
/********************************************************************
Creation of toolbar: Help line
********************************************************************/
clauses
tb_help_line_Create(_Parent):-
ifdef use_tbar
toolbar_create(tb_bottom,0xC0C0C0,_Parent,
[tb_text(idt_help_line,tb_context,452,0,4,10,0x0,"")]),
enddef
true.
%END_TLB Help line
%BEGIN_DLG About dialog
/********************************************************************
Creation and event handling for dialog: About dialog
********************************************************************/
constants
%BEGIN About dialog, CreateParms, 18:52:45-25.8.2005, Code automatically updated!
dlg_about_dialog_ResID = idd_dlg_about
dlg_about_dialog_DlgType = wd_Modal
dlg_about_dialog_Help = idh_contents
%END About dialog, CreateParms
predicates
dlg_about_dialog_eh : EHANDLER
clauses
dlg_about_dialog_Create(Parent):-
win_CreateResDialog(Parent,dlg_about_dialog_DlgType,dlg_about_dialog_ResID,dlg_about_dialog_eh,0).
%BEGIN About dialog, idc_ok _CtlInfo
dlg_about_dialog_eh(_Win,e_Control(idc_ok,_CtrlType,_CtrlWin,_CtrlInfo),0):-!,
win_Destroy(_Win),
!.
%END About dialog, idc_ok _CtlInfo
%MARK About dialog, new events
dlg_about_dialog_eh(_,_,_):-!,fail.
%END_DLG About dialog
