Как выполнить второй план, когда первый провал в qwery, на языке ДЖЕЙСОНА Агнет

#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 , в противном случае это переменная.)

Есть много способов решить вашу проблему:

  1. используйте перформатив achieve вместо tell , чтобы у получателя была новая цель вместо нового убеждения. Тогда план может быть !i_can_enter(R) ... с провалом плана -!i_can_enter(R) ... .
  2. поместите тест в контекст плана:
  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").
 
  1. используйте 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. Спасибо, теперь разбирайтесь в содержании планов, это очень полезно!