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

4.3 Запуск демонстрационных примеров

Jason поставляется с библиотекой примеров, которые условно разделены на 2 категории:

- примеры, демонстрирующие отдельные возможности и приемы программирования, расположены в каталоге «demos»;

- примеры, представляющие собой простые МАС, расположены в каталоге «examples».

Чтобы открыть пример, нужно найти в соответствующем каталоге файл проекта, который имеет расширение «.mas2j».

Для запуска проекта необходимо нажать привычную многим кнопку со значком «Play».

Мы не будем заниматься разбором демонстрационных примеров, поскольку есть раздел «Выполнение лабораторных работ», в котором очень подробно разобрана достаточно большая программа.

4.4 Основы программирования на языке AgentSpeak

Проект МАС в Jason состоит из файла проекта, имеющего расширение «.mas2j», файлов с программами агентов (минимальное количество агентов – один), которые должны иметь расширение «.asl», файлов модели среды и пользовательского интерфейса (не обязательно), написанных на Java. Организация файла проекта упрощенно будет рассмотрена в разделе 5.2.5.6.

Программа каждого агента пишется на языке AgentSpeak и структурно состоит из трех частей, относительное расположение которых фиксировано:

- изначальные убеждения и правила;

- изначальные цели;

- планы достижения целей.

Рассмотрим синтаксические конструкции языка, позволяющие описать все эти составляющие программы агента.

4.4.1 Убеждения

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

Предикатные символы и высказывания всегда обозначаются, начиная с маленькой буквы, а термы – в зависимости от их типа:

- переменные – обозначаются с заглавной буквы;

- числовые константы – естественно, цифрами;

- индивидные константы, функциональные переменные и функциональные константы – обозначаются, начиная с маленькой буквы;

- строки – в двойных кавычках;

- списки – в квадратных скобках через запятую.

Как и в Прологе, для обозначения неопределенной переменной (т.е. переменной, конкретизация которой несущественна в некотором случае), используется символ «_» (нижнее подчеркивание).

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

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

Приведем примеры простых убеждений.

a) started. – убеждение в форме высказывания.

b) factorial(0,1). – убеждение-предикат, утверждающее, что факториал нуля равен единице.

с) money(25). – предикат с числовой константой, описывающий некую наличность.

d) inLove(bob, lucy). – предикат, утверждающий, что Боб влюблен в Люси. При этом bob и lucy – индивидные константы.

e) inLove(bob, X). – предикат, утверждающий, что Боб в кого-то влюблен. X – предметная переменная.

f) names(“Bob”, “Lucy”). – предикат со строковыми термами.

g) p(q(15)). – предикат с термом функциональной константой.

h) k(m(N,10)). – предикат с функциональной переменной в качестве терма.

i) inLove(_, _). – предикат с неопределенными переменными.

j) list([a,b,2,“this is a string”]). – предикат с термом-списком, содержащим разнородные элементы.

Приведем примеры правил.

a) p(X,Y):-q(X,Z)&d(Z,Y). – предикат p(X,Y) станет убеждением, если имеются 2 убеждения q(X,Z) и d(Z,Y) с общим термом Z.

b) clear(X) :- not(on(Y,X)). – предикат clear(X) станет убеждением, если отсутствует убеждение on(Y,X).

с) price(X) :- .random(R) & X = (10*R)+100. – переменная X в предикате price(X) вычисляется случайным образом. Здесь «.random(R)» вызов внутренней функции получения случайного числа (см. справочник). После ее срабатывания происходит вычисление выражения «X = (10*R)+100» и конкретизация X в price(X).

Заключения правил вычисляются не сразу при запуске программы агента, а только при обращении к ним.