Метод отсечения и отката




Предмет ИИ Хар-ка понятия интеллектуальности

Назовем деятельность интеллектуальной если она имеет дело с трудноформализуемыми проблемами,т.е не существует простого алгоритма решений.ИИ-это область информатики, которая занимается трудноформализуемыми задачами, т.е. для которых не существует простого алгоритма решения.

Направления ИИ:

1. Моделирование знаний

2. распознование образов

3. робототехника

4. Обработка текстов на естественном языке

Тест тьюринга:смысл: компьютер считается мыслящим, если невозможно определить кто из 2 субъектов является человеком, а кто нет. Если это невозможно из вне, то машина считается интеллектуальной.

Декларат и процедур.

Цель-смоделировать человеческие рассуждения.

Пролог относится к декларативной парадигме-состоит в том, что главный акцент делается на описание входных данных и целей. В процедурном - основное внимание уделяется алгоритмам.

Понятие предиката.логика рассуждений.

Предикат-(n-местный)-основной объект в прологе. Это n-местная функция, которая возвращает значение истина или ложь. Предикат лингвистически это сказуемое.В философии-свойство. Любое сказуемое можно представить в виде свойства-свойства быть идущим.Местность предиката количество аргументов(кол-во объектов к которым относится свойства.Предикат записывается: зеленый(х) «х является зеленым» холодно()-ноль местный предикат.

Структура программы(разделы в языке пролог)

Editor-окно редактирования

Dialog-диалоговое окно

Message-сообщение

Trace-трассировка(для отладки)

Пролог программа делится на несколько разделов, ни один из разделов не является обязательным.

Domains-раздел доменного

Predicates-раздел объявления предикатов(имя+домен аргументов)

Douses- раздел предложений(фактов и правил)

Goal- раздел цели

Понятие цели, внутренняя и внешняя

Цель это логическое выражение, которое должно быть истинным.в цели могут быть переменные.Если в цели нет переменных, то среда пролог вычисляет значение цели-истину или ложь.Если в цели встречаются переменные, то среда пролог ищет их значения при которых цель- истинна.Если в программе есть раздел цели, то ищется только первое решение.Если в программе нет раздела цели, то цель указывается в диалоговом окне.

Цель:Внутренняя(раздел пролог программы);Внешняя(указывается в диалоговом окне)

Отличие внутр. От внешней цели:

1.Во внешней ищутся все решения(пути решения) Во внутренней только одно.

2.Внеш. автоматически выводит все решения на экран.Внутреняя использует write

Как с помощью внутренней цели вывести все, что нам нужно

Написать:write(X),1=2 или fail

Факты и правила

Правило нужно, чтобы сократить размер программы.В правиле выражена некоторая закономерность.Несколько правил с одинаковой головой можно объединить в одно правило с помощью дизъюнкции хвостов.ta.sty:-fruit(x);vegetable(x).обратная импликация

Запись с помощью одного предиката- факт. Зеленая (трава) Зеленая(трава,лето)

Откат и отсечение

Отсечение-это способ сокращения,запрет на откат.

Max2(x,y,z):-x>=y,Z=x,!.

Max2(x,y,z):-z=y.

Возьмем функцию максимум 2 чисел, но он трехместный.

Predicates

Max2(integer, integer, integer)

Clauses

Max(x,y,z):-x<y,z=y.

Откат-возврат к следующему варианту.

Fruit(x),write(x),nl,fail где nl –возвращает истину,fail-возвращает ложь.Возврат происходит в ближайшую точку.

Метод отсечения и отката

Для того, чтобы иметь возможность выбирать из программы данные, удовлетворяющие некоторым условиям, необходимо иметь средства управления откатом. В Прологе для этой цели используется предикат cut (отсечение), который в программе обозначается символом восклицательного знака!. Этот предикат, вычисление которого всегда завершается успешно, заставляет внутренние программы сопоставления "забыть" все указатели отката, установленные во время попыток вычислить предыдущие подцели. Так например, вычисление правила pr:-a,b,!,c., в котором имеется предикат отсечения, представьте таким образом: при вычислении подправилa а, затем b осуществляется последовательный поиск решений с откатами до тех пор, пока не будут удовлетворены эти подцели; далее произойдет успешное завершение предиката отсечения!; затем начнется вычисление подцели с, но здесь откаты возможны только при поиске решений дляс и благодаря отсечению становятся невозможными откаты для нового поиска альтернативных решений для подцелей a, b. Рассмотрим, использование отсечения. Пусть имеется набор фактов, описывающих некоторые числа.

PREDICATES

tens (string)

ones (string)

numbers

CLAUSES

tens ("двадцать").

tens ("тридцать").

ones ("два").

ones ("три").

numbers:- tens (Tens_number), ones(Ones_number),
write (Tens_number, " ", Ones_number), nl, fail.

numbers.

GOAL

numbers.

Результатом работы программы будет вывод следующих строк:

двадцать два

двадцать три

тридцать два

тридцать три

(выполнение программы завершится с успехом)

В данном случае в программе будет две точки возврата, которые и дадут этот эффект. Вместо подробного описания работы программы ниже дается трассировка (с некоторыми существенными сокращениями), из которой становится ясной логика работы программы. Следует заметить, что выполнение программы завершится с успехом.

CALL: numbers ()

CALL: tens (_)

RETURN: *tens ("двадцать")

CALL: ones (_)

RETURN: *ones ("два")

write ("двадцать", " ", "два")

REDO: ones (_)

RETURN: ones ("три")

write ("двадцать", " ", "три")

REDO: tens (_)

RETURN: tens ("тридцать")

CALL: ones (_)

RETURN: *ones ("два")

write ("тридцать", " ", "два")

REDO: ones (_)

RETURN: ones ("три")

write ("тридцать", " ", "три")

REDO: numbers ()

RETURN: numbers ()

Если теперь добавить в правило вывода отсечение,

numbers:tens (Tens_number),!, ones (Ones_number),
write (Tens_number, " ", Ones_number), nl, fail.

то это существенно изменит результат работы программы:

двадцать два

двадцать три

(выполнение программы завершится с неуспехом)

Рассмотрим, каким образом был получен результат с использованием отсечения. Когда выполняется последовательное доказательство целей слева направо, то цель! (отсечение) доказывается всегда и при этом выполняется еще одно очень важное действие – отсечение уничтожает все точки возврата, которые остались слева от отсечения. Следовательно, когда цель! была успешно доказана, точка возврата для цели tens (Tens_number) была уничтожена, а с точкой возврата для цели ones (Ones_number) ничего не произошло. Когда предикат fail инициализировал поиск с возвратом, «в живых» осталась только одна точка возврата, для цели ones (Ones_number), то есть только для этой цели перебирались все возможные решения. Другими словами, после того, как доказательство целей миновало отсечение, поиск с возвратом возможен только справа от отсечения (нужно отметить, что, до тех пор, пока цель отсечение не доказана, поиск с возвратом возможен и слева от цели!). Пример трассировки для второго варианта правила.

Организация рекурсии

Рекурсия относится больше к декларативному, чем к процедурному.В рекурсивном указывается свойства, а не алгоритм его вычисления.Рекурсия это родная техника одна из основных технологий искусственного интеллекта. рекурсивное определение предиката или функции это в котором присутствуют вызовы этого предиката или функции.

Обычно в большинстве рекурсивных определений можно выделить база+шаг



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-11-19 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: