Глава 19. Индуктивное логическое программирование



:


предложению Clause. Новые литералы добавляются лишь до тех пор, пока не будет достигнута определяемая пользователем максимальная длина предложе­ния (заданная с помощью предиката inax_clause_length(MaxL)).

• refine_hyp{ Hyp, HewHyp). Позволяет усовершенствовать гипотезу Hyp и выработать гипотезу NewHyp, выбирая недетерминированным образом одно из предложений в Hyp и применяя один из способов усовершенствования этого предложения.

• induce [ Hyp). Осуществляет логический вывод совместимой и полной гипоте­зы Нур для указанной задачи обучения путем поиска с итеративным углубле­нием в графе усовершенствования, начиная от начальной гипотезы (которая задана с помощью предиката starthyp (StartHyp)).

• iter_deep ( Hyp, MaxD) . Находит полную и совместимую гипотезу Нур по методу поиска с итеративным углублением, начиная с предела глубины MaxD и увеличивая этот предел до тех пор, пока не будет найдена гипотеза Нур. Пол­ный поиск с итеративным углублением осуществляется с помощью вызова iter_deep(Hyp, 0) .

• depth_first( HypO, Hyp, MaxD). Выполняет поиск в глубину, ограничен­ный глубиной MaxD, начиная с гипотезы НурО. Если поиск завершается успе­хом в пределах MaxD, то Нур представляет собой полную и совместимую гипо­тезу, полученную в результате но больше чем MaxD последовательных усовер­шенствований гипотезы НурО.

• complete; Hyp). Принимает истинное значение, если гипотезаНур охватыва­ет все заданные положительные примеры (при условии осторожной интерпре­тации ответа Answer в предикате prove/3).

• consistent ( Hyp). Принимает истинное значение, если гипотезаНур не охва­тывает ни одного из заданных отрицательных примеров (при условии осто­рожной интерпретации ответа Answer в предикате prove/3).

Для использования программы M1NIHYPER необходимо загрузить в систему Prolog код, приведенный в листингах 19.2 и 19.3, наряду с часто применяемыми предикатами member/2, cone/3, not/1, once/1 и copy_term/2 и с определением за­дачи обучения (подобным приведенному в листинге 19.1). Безусловно, что параметры max_p-roof_length и max_clause_length могут быть переопределены в соответст­вии с требованиями конкретной задачи обучения.

Например, процесс изучения предиката has_daughter (X) в соответствии с усло­виями, заданными в листинге 19.1, выглядит следующим образом:

?- induce (H) .

MaxD = 0

MaxD = 1

MaxD = 2

MaxD = 3

MaxD = 4

К = [ [bas__daughter (A) , parent (A,B) , female (В) ] /[Д,в| )

Возрастающие пределы глубины при поиске с итеративным углублением отобра­жаются как MaxD = Limit. Совместимая и полная гипотеза обнаруживается на глу­бине усовершенствования 4 (см. рис. 19.1). Если бы в эту программу были введены счетчики гипотез, они показали бы, что количество всех выработанных гипотез со­ставляло 105, а 25 из них были усовершенствованы. Результирующая гипотеза Н, приведенная выше, после перевода на обычный синтаксис Prolog принимает сле­дующий вид: has_daughter(A) :- parent(А,В), female;в).

Это соответствует нашему целевому предикату.



Часть II. Применение языка Profog в области искусственного интеллекта