НГТУ
Кафедра ПС и БД
Тема: “ Выводы по аналогии”
Факультет: ПМИ
Группа : ПМ-83
Студенты: Арифуллин Д.
Кирилов П.
Пахомов А.А.
Преподаватель:
Целебровская М.Ю.
г. Новосибирск
2001 г.
Цель работы: Изучение аналогии как механизма вывода, используемого в интеллектуальных системах
Задание
![]() |
![]() |
![]() |
?
![]() |
![]() |
Рассмотрим
одну из простейших постановок в форме так называемой причинно-следственной
аналогии.
A B
![]() |
![]() |
A’ B’
?
match( inside(X, Y), inside(Y,X), invert ).
Интерпретация данной задачи следующая:
“Фигура A находится в таком же
соответствии к фигуре B, как фигура A’ к фигуре B’ . Требуется определить фигуру B’ ” .
Причинно-следственную связь A B можно
рассматривать как прецедент. В
настоящее время существует целый класс экспертных систем, основанный на
механизме CBR. Знания проще представить в
виде хорошо подобранных прецедентов (случаев из практики), чем в виде правил.
Процесс общения с экспертной системой в этом случае сводится к формулировке проблемы
на некотором языке, поиске близкого прецедента, адаптации прецедента к данной
проблеме.
Рассмотрим один из возможных подходов к реализации аналогии . Идея данного подхода заключается в том, что из причинно-следственного перехода A -> B извлекается закономерность (правило), которое затем применяется к A’-> B’. Действительно, из факта A->B (см. рис), можно заключить , что если одна фигура находится внутри другой, то в результате перехода внутренняя фигура становится внешней. Реализовать данный мезанизм вывода можно с помощью механизма унификации , который является базовым в Прологе. Как всегда следует выбрать подходящую структуру данных для представления задачи.
Ниже приводится один вариантов программы аналогии.
Текст программы:
domains
% figure1=square;circle;triangle
figure=
square; % квадрат
circle; % круг
triangle; % треугольник
above(figure,figure); % быть рядом
inside(figure,figure) % быть внутри
figurelist=figure* %имя правила
pair=is_to(figure,figure) % причинно-следственное отношение
predicates
match(figure,figure,symbol) % правила перехода от фигуры к фигуре
analogy(pair,pair,figurelist) % задание аналогии
figures(symbol,figure,figure,figure)
answers(symbol,figurelist)
test_analogy(symbol,figure)
member(figure,figurelist)
clauses
analogy(is_to(A,B),is_to(C,X),Answers):match(A,B,Rule),
match(C,X,Rule),
member(X,Answers).
match(inside(Figure1,Figure2),
inside(Figure2,Figure1),invert).
match(inside(Figure1,Figure2),
inside(Figure1,Figure2),equal).
match(inside(Figure1,inside(Figure2,Figure3)),
inside(Figure1,above(Figure2,Figure3)),
inserttoabove).
test_analogy(Name,X):figures(Name,A,B,C),
answers(Name,Answers),
analogy(is_to(A,B),is_to(C,X),Answers),!.
figures(test1,inside(square,triangle),
inside(triangle,square),
inside(circle,square)).
figures(test2,inside(square,triangle),
inside(square,triangle),
inside(circle,square)).
figures(test3,inside(square,inside(circle, triangle)),
inside(square, above(circle, triangle)),
inside(triangle, inside(square, circle))).
answers(test1,[inside(circle,triangle),
inside(square,circle),
inside(triangle,square)]).
answers(test2,[inside(circle,square),
inside(square,circle),
inside(triangle,square)]).
answers(test3,[inside(triangle,above(square, circle)),
inside(square, square),
inside(circle, above(circle, square))]).
member(X,[X|Xs]):-!.
member(X,[Y|Xs]):-member(X,Xs).
Предикат match () может иметь различные альтернативы, которые описывают правила перехода от фигуры к фигуре. Можно значительно расширить множество вариантов отношений, описывающих взаимное расположение фигур.
Развитие приведенной программы сделано с расчетом на то, что полной аналогии может и не быть. Также, что некоторые отношения, например «быть рядом» являются коммутативными. В силу этого может возникнуть множество изоморфных структур для одного и того же объекта.
Тесты:
Goal: match(inside(circle,square),inside(square,Y),Answers).
Y=circle, Answers=invert
1 Solution
....................................
Goal: match(inside(triangle,circle),X,Answers).
X=inside(circle,triangle), A
nswers=invert
X=inside(triangle,circle), A
nswers=equal
2 Solutions
...................................
Goal:match(X,Y,Z)
X=inside(_,_), Y=inside(_,_), Z=invert
X=inside(_,_), Y=inside(_,_), Z=equal
X=inside(_,inside(_,_)), Y=inside(_,above(_,_)), Z=inserttoabove
3 Solutions
.......................................
Goal: analogy(is_to(A,B),is_to(C,X), Answers).
A=inside(_,_), B=inside(_,_), C=inside(_,_), X=inside(_,_), Answers=[inside(_,_)|_]
A=inside(_,_), B=inside(_,_), C=inside(_,_), X=inside(_,_), Answers=[inside(_,_)|_]
A=inside(_,inside(_,_)), B=inside(_,above(_,_)), C=inside(_,inside(_,_)),
X=inside(_,above(_,_)), Answers=[inside(_,above(_,_))|_]
3 Solutions
......................................
Goal: analogy(is_to(inside(circle,triangle),inside(circle,square)),is_to(inside(circle,square),
inside(X,Y)).
No Solutions
.......................................
Goal: test_analogy(test1,X).
X=inside(square,circle)
1 Solution
........................................
Goal: test_analogy(test2,X).
X=inside(circle,square)
1 Solution
.........................................
Goal: test_analogy(test3,X).
X=inside(triangle,above(square,circle))
1 Solution
..........................................
Goal: figures(test1,A,B,C).
A=inside(square,triangle), B=inside(triangle,square), C=inside(circle,square)
1 Solution
.............................................
Goal: figures(test2,A,B,C).
A=inside(square,triangle), B=inside(square,triangle), C=inside(circle,square)
1 Solution
............................................
Goal: figures(test3,A,B,C).
A=inside(square,inside(circle,triangle)),
B=inside(square,above(circle,triangle)), C=inside(triangle,inside(square,circle))
1 Solution
............................................
Goal:answers(X,Y).
X=test1,
Y=[inside(circle,triangle),inside(square,circle),inside(triangle,square)]
X=test2,
Y=[inside(circle,square),inside(square,circle),inside(triangle,square)]
X=test3,
Y=[inside(triangle,above(square,circle)),inside(square,square),inside(c
ircle,above(circle,square))]
3 Solutions
............................................
Goal: member(X,Y).
X=_, Y=[_|_]
1 Solution
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.