#agent #multi-agent
Вопрос:
У меня есть небольшая проблема с моей программой, в один secction один агент Икс отправить tell
с агентом Y и этот агент, проверяет свою веру базы, чтобы проверить этот факт, проблема, когда план проваливается, он пытался добавить -plan
, но не работал, я ценю любую помощь, я изменил контекст проблемы, так что лучше его понял, но основная идея та же
/* Initial beliefs and rules */
свадебные приглашения(Джон).
свадебные приглашения(Анна).
свадебные приглашения(боб).
свадебные приглашения(ред.).
/* Первоначальные цели */
/* Планы */
I_can_enter(R)[источник(Ag)]
-I_can_enter(R)
Ответ №1:
планы неудач могут использоваться только для достижения целей, и в вашем случае план i_can_enter...
реагирует на новые убеждения, а не на новые цели. План -i_can_enter....
реагирует на удаление такого убеждения. (обратите внимание , что нижний регистр в i_can_enter
, в противном случае это переменная.)
Есть много способов решить вашу проблему:
- используйте перформатив
achieve
вместоtell
, чтобы у получателя была новая цель вместо нового убеждения. Тогда план может быть!i_can_enter(R) ...
с провалом плана-!i_can_enter(R) ...
. - поместите тест в контекст плана:
i_can_enter(R)[source(Ag)] : wedding_guests(R) <- .print(R,"You are on the guest list").
i_can_enter(R) <- .print("You can not pass").
- используйте
askOne
перформатив. В приемнике:
?can_enter(R,ok) : wedding_guests(R). // R can enter if it is a wedding guest
?can_enter(R,nok). // R cannot otherwise
в отправителе:
.send(receiver_name, askOne, can_enter(john,_), can_enter(_,ok)); // only continue if answer is "ok"
или
.send(receiver_name, askOne, can_enter(john,_), can_enter(_,A));
.print("it is ",A," for john to enter");
Четвертый член в .send объединяется с ответом.
Комментарии:
1. Спасибо, теперь разбирайтесь в содержании планов, это очень полезно!