Глава 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 в области искусственного интеллекта