Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пособие_по_jason_(итог).doc
Скачиваний:
79
Добавлен:
21.03.2016
Размер:
1.79 Mб
Скачать

4.4.2 Типы данных

При рассмотрении убеждений в предыдущем разделе мы для большей ясности использовали привычную для нас терминологию, освоенную в рамках исчисления предикатов. Однако, терминология авторов Jason немного отличается от нашей, что нашло отражение в названиях некоторых функций языка. Покажем эти различия на рис. 5.

Рис. 5

Как видно из рисунка, индивидные константы названы атомами, а функциональные переменные, функциональные константы и списки подпадают под структурный тип данных.

4.4.3 Сильное и слабое отрицание

В программах на AgentSpeak можно использовать логическое отрицание двух видов:

- сильное отрицание (обозначается символом тильда «~»);

- слабое отрицание (обозначается как «not»).

Понятие сильного отрицания подразумевает абсолютную убежденность в ложности некоторой информации, т.е. в базе убеждений агента содержится отрицание факта, например:

~a.

~on(X,Y).

~inLove(bob, helen).

Понятие слабого отрицания допускает истинность информации, просто нам об этом наверняка неизвестно. Иначе говоря, в базе убеждений агента отсутствует эта информация, например:

not a – в базе убеждений отсутствует утверждение «a»,

not p(X,Y) - в базе убеждений отсутствует p(X,Y).

Таким образом, комбинация операторов «~» и «not» дает нам следующие четыре вида выражений (см. табл. 1).

Таблица 1

Обозначение

Расшифровка

F

F содержится в базе убеждений агента (т.е. агент убежден, что F истина)

~F

~F содержится в базе убеждений агента (т.е. агент убежден, что F ложно)

not F

F не содержится в базе убеждений агента (т.е. агент ничего не знает про F)

not ~F

~ F не содержится в базе убеждений агента (т.е. агент ничего не знает про F)

4.4.4 Цели

Цели подразделяются на достигаемые и цели-проверки.

Достигаемые цели – это желаемые убеждения, для формирования которых в обязательном порядке должен существовать план.

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

Достигаемые цели образуются от имен убеждений, путем добавления знака «!», который ставится спереди.

Например.

!ended.цель – формирование убеждения ended.

!print_fact(5).цель – формирование убеждения print_fact(5).

Достигаемые цели могут присутствовать в базе убеждений изначально, а могут ставиться в планах в качестве подцелей (подзадач). При вызове подзадачи в теле плана у разработчика есть возможность повлиять на расположение операций плана в стеках намерений (см. п.). По-умолчанию операции подзадачи располагаются в стеке намерений основной задачи. Однако иногда полезно (особенно в рекурсивных планах) расположить операции подзадачи в отдельном стеке. Для этого вместо префикса «!» при вызове подзадачи следует использовать префикс «!!».

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

Цели-проверки также образуются от имен убеждений, но с использованием знака «?».

Например.

?money(Y). – в базе убеждений будет найден «наиболее свежий» предикат money(Y) и произойдет конкретизация переменной Y.

?inLove(bob, X). – аналогично, в базе убеждений будет найден предикат inLove(bob, X) и произойдет конкретизация переменной X.

?p(X,_,Z). - в базе убеждений будет найден предикат p(X,_,Z) и произойдет конкретизация первого и третьего термов.

?p(_,_). – цель не достижима, т.к. нет свободных переменных для конкретизации. Обработка цели приведет к ошибке.

?p(a,b). – цель не достижима, т.к. нет свободных переменных для конкретизации. Обработка цели приведет к ошибке.