Листинг 19.10. Изучение понятия арки
% Изучение понятия арки
backliteraK isa[X,Y) , (X:object], []) :-
member С Y, [polygon,convex_poly,stable_poly,unstable_poly,triangle,
rectangle, trapezium, unstable_triangle, hexagon]). % Y - эя блок
% с любой из указанных форм
backliteraK support (X, Y) , [X:object, Y:object], []). backliteraK touch(X,Y), [X:object, Y:object] , []). backliteral ( not C -, [X: object, Y: object] , [)) :-G = touch(X,Y); G = support(X,Y),
prolog_predicate( isa [X,Y)). prolog^predicate( support(xrY)). prolog_predicate( touch(X,Y)).
prolog__predicate( not G) .
ako( polygon, convex_poly> . % Блок выпуклой многоугольной формы
« представляет ссоой одну из разновидностей блоков многоугольной формы ako( convex poly, stable_poly). I Блок устойчивой формы представляет
% собой одну из разновидностей блоков выпуклой многоугольной формы ako< convex_poly, unstablejpoly! . * Блок неустойчивой формы представляет
% СОООЙ одну из разновидностей Блоков выпуклой многоугольной фермы aicof stable poly, triangle), % Блок треугольной формы представляет
% собой одну из разновидностей блоков устойчивой формы ako( stable_poly, rectanple). * Блок прямоугольной формы прерставляет
% собой одну из разновидностей блоков устойчивой формы ako( Stable poly, trapezium) . ■ Блок трапециедальной формы представляет
% соОой одну из разновидностей блоков устойчивой формы akot unstable_poly, unstable_triangle). % Блок неустойчивой треугольной формы Ь представляет собой одну из разновидностей блоков неустойчивой формы ako{ unstable poly, hexagon) . I Блок шестиугольной формы представляет собой одну КЗ разновидностей блоков неустойчивой формы
akoi rectangle, X) :-
member! X, [alr aZ, аЗ, а4,а5,Ы,Ь2,ЬЗ,М, Ь5, cl,c2, сЗ I ) . г Прямоугольные блоки
akoC triangle, с4) .
ako( unstable_triangle, c5).
isa С zFigurel, FigureZ) :-а ко I Figure2, Figure!).
% Блок устойчивой треугольной формы % Блок треугольной формы, перевернутый % основанием вверх
4 Блок Figure 1 предстааляет собой блок Figure2
isa( FigO, Fig) :-ako{ Figl, FigO), isa( Figl, Fig) .
support(al,cl). support Ca3,c3) . support (a.4, c4) . support(45,c5) .
support lbl,cl) . support (b3,c3) . support(b4, c4). support(b5,c5)■
touch (a3,b3)
st.art_clause[ [arch (X, Y, Z ) ] / [X: object, Y: object, Z : object) I-
Глава 19. Индуктивное логическое программирование
ex<arch(al,bl,cl) ) .
су. ( arcri<a4,b4,c4) ) .
next arch[а2,Ь2,с2) ) . nex( arch(a3,b3, c3) ) . nextarch (a5, bS,c5) > . пек( arch{al,b2,cl)). nextarch(a2,bl,cl) )
Резюме
■ Индуктивное логическое программирование (ILP) представляет собой сочетание логического программирования и машинного обучения.
■ ILP — это метод индуктивного обучения, в котором в качестве языка гипотез используется логика предикатов. Кроме того, ILP представляет собой один из подходов к осуществлению автоматического программирования на примерах.
■ По сравнению с другими подходами к машинному обучению метод ILP характеризуется следующими особенностями: во-первых, в нем используется более выразительный язык гипотез, который позволяет формировать рекурсивные определения гипотез, во-вторых, он обеспечивает применение фоновых знаний в более общей форме, и, в-третьих, в целом характеризуется большей комбинаторной сложностью по сравнению с обучением на основе атрибутов и значений.
■ В графе усовершенствования предложений узлы соответствуют логическим предложениям, а дуги — отношениям усовершенствования между предложениями.
■ В графе усовершенствования гипотез узлы соответствуют множествам логических предложений (программам Prolog), а дуги - отношениям усовершенствования между гипотезами.
в Усовершенствование предложения (гипотезы) приводит к более определенному предложению (гипотезе).
■ Предложение может быть усовершенствовано с помощью следующих операций: во-первых, путем согласования двух переменных в предложении, или, во-вторых, в результате замены переменной термом, или, в-третьих, с помощью добавления литерала к телу предложения.
■ Тэта-классификация— это отношение обобщения между предложениями, которое может быть определено синтаксически на основе замены переменных.
■ Программа HYPER, разработанная в этой главе, осуществляет логический вывод программ Prolog на основании примеров, выполняя поиск среди гипотез в графе усовершенствования.
■ В настоящей главе рассматривались следующие понятия:
• индуктивное логическое программирование;
• усовершенствование предложения;
• усовершенствование гипотезы;
• графы усовершенствования предложений или гипотез;
• тэта-классификация;
• автоматическое программирование на примерах.
476 Часть II. Применение языка Prolog в области искусственного интеллекта