Заметки и краткие ответы на экзаменационные вопросы по дисциплине "Представление знаний в интеллектуальных системах", страница 5

-  Поиск начинается от начала программы и до конца и целевое утверждение унифицируется с предложением.

Получим:

   писатель (федя, «Доктор Нет»)

  X=федя Y=Доктор Нет

-  Тест GOAL ищет все решения. Таким образом

писатель (маша, «Моби Дик»)

 X=маша, Y=Моби Дик

 2 solution

2. goal

     писатель (X, «Моби Дик»).

Шаги:

-  Берётся целевое утверждение и производится унификация, то есть

  писатель (федя, «Доктор Нет»)

 соответствия нет

-  Проверяется следующий шаг

 писатель (маша, «Моби Дик»)

1 solution

3) goal

     сериал (X).

Шаги:

-  Prolog проверяет соответствие обращения к факту и заголовку правила.

-  Затем происходит согласование подцелей в правиле.

писатель (_, Название)

писатель (федя, «Доктор Нет»)

книга («Доктор Нет», ТОМ)

книга («Доктор Нет», 250)

  не выполняется

писатель (_, Название)

писатель (маша, «Моби Дик»)

книга («Моби Дик», ТОМ)

книга («Моби Дик», 310)

Анонимные переменные: используют для игнорирования ненужных значений (_).

Predicates

 Родитель (symbol, symbol)

Clauses

Родитель(саша, маша).

Родитель (маша, паша).

Родитель (паша, саша).

Goal

Родитель (Родитель,_).

Ответ:

Родитель = саша

Родитель = маша

Родитель = маша

Анонимные переменные можно использовать в фактах

ест(_)

носит(_, ботинки)

Вопрос №19.

Поиск с возвратом заключается в следующем:

1.  поиск начинается  с утверждения и в случае необходимости выбора альтернативного пути Prolog ставит маркер у места ветвления. Эта точка называется точкой отката. Затем выбирает первую подцель и проверяет её.

2.  если данная подцель не выполняется, то происходит возврат в точке отката и Prolog пробует проверить другую подцель.

Пример:

predicates

     любит (symbol, symbol)

     вкус (symbol, symbol)

     еда (symbol)

clauses

     любит (Вася, X):-

        еда (X), вкус (X, деликатес).

     вкус (омар, деликатес).

     вкус (эстонские_шпроты, не_вкусно).

     еда (эстонские_шпроты).

     еда (омар).

goal

     любит (Вася, Что).

Шаги:

-  подцель любит (Вася, Что) соответствует заголовку правила и переменная Что унифицируется с переменной X.

 любит (Вася, X)

-  после сопоставления заголовка Prolog двигается по телу правила и  обращается к первой подцели.

  еда (X)

Далее производится унификация

 еда (эстонские_шпроты)

Так как файлу еда существует ещё одно обращение, то Prolog ставит маркер возле еда(эстонские_шпроты)

-  если соответствие успешно, то исследуется следующая подцель правила

 вкус (X, деликатес)

 вкус (эстонские_шпроты, деликатес)

-  после возврата к маркеру Prolog освобождает все переменные, связанные после точки возврата.

еда (X)

еда (омар)

вкус (омар, деликатес)

Что=омар

1 solution

Вопрос №20.

Основные правила поиска с возвратом.

Пример:

Некоторые любят выпить, а некоторые – читать, так как они любознательные. А есть те, которые любят и выпить, и почитать.

domains

  имя, что-то= symbol

predicates

  любит (имя, что-то)

  читает (имя)

  любознательный (имя)

clauses

  любит (вася, вино).

  любит (петя, лыжи).

  любит (петя, книги).

  любит (петя, кино).

  любит (Z, книги):-

      читает (Z), любознательный (Z).

  читает (вася).

  любознательный (вася).

goal

  любит (X, вино),

  любит (X, книги).

Правило 1 Подцели должны быть согласованы по порядку сверху вниз.

Дерево подцелей:

Правило 2 Предикатные предложения проверяются в том порядке, в каком они появляются в программе сверху вниз.

 


Поиск согласования первой подцели Prolog пытается согласовать подцель справа. Далее поиск идёт по правилу (направо).

Z унифицируется с X, а X уже равно вася. И применяется правило 3.

Правило 3 Когда подцель соответствует заголовку правила далее должно быть согласовано тело этого правила. Таким образом тело правила образует новое множество подцелей для согласования.

                                                        

Правило 4

Цель доказано, когда соответствующие факты найдены для каждой вершины дерева целей.

X=вася

1 solution

Вопрос №21.

Prolog предлагает два инструмента поиска:

1.  предикат fail. Он предназначен для инициализации поиска с возвратом.

2.  предикат cut – называется отсечение и предназначен для запрета возможности возврата. Cut обозначается !

Предикат fail всегда вызывает неуспешное завершение и следовательно инициализирует возврат (2*2=5 неуспешно).

Пример:

Есть родители и дети. Определить кто чей папа.

domains

  имя=symbol

predicates

  отец (имя, имя)

  каждый

clauses

  отец (коля, вася).

  отец (петя, лена).

  отец (петя, яша).

  каждый:-

    отец (X,Y),

    write (X,”есть”,Y,”отец\n”),

    fail.

goal

  отец (X,Y).

Ответ: X=коля, Y=вася

     ...

     3 solution

goal

  каждый

Ответ: коля есть вася отец

     петя есть лена отец

     петя есть Яша отец 

     no solution

В этом случае: fail не может быть согласован, так как он всегда неуспешен. При поиске с возвратом fail обращается к последнему обращению, которое может привести к недетерминированному решению.

 domains

  имя=symbol

predicates

  отец (имя, имя)

  каждый

clauses

  отец (коля, вася).

  отец (петя, лена).

  отец (петя, яша).

  каждый:-

    отец (X,Y),

    write (X,”есть”,Y,”отец\n”),

    fail.

goal

  отец (X,Y).

Предикат WRITE yt может быть согласован, так как он не порождает новых решений. Поэтому fail выполняет откат (возврат) к первой подцели.

Ответ: коля есть вася отец

     1 solution

Прерывание поиска с возвратом (!).