【问题标题】:How to execute a second plan, when the first fail in qwery, in JASON AgnetSpeak当第一个查询失败时,如何在 JASON AgentSpeak 中执行第二个计划
【发布时间】:2021-06-22 18:14:14
【问题描述】:

我的程序有一点问题,一个代理 X 在某个部分向代理 Y 发送了一个tell,这个代理检查他的信念基础以验证事实,问题是当计划失败时,他尝试添加 -plan 但它不起作用,感谢任何帮助,我已经更改了问题的上下文以便更好地理解它,但主要思想是相同的

/* Initial beliefs and rules */

婚礼宾客(约翰)。 婚礼宾客(安娜)。 婚礼客人(鲍勃)。 婚礼客人(编辑)。

/* 初始目标 */

/* 计划 */

+I_can_enter(R)[来源(Ag)]

-I_can_enter(R)

【问题讨论】:

    标签: agent multi-agent


    【解决方案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 中的第四项与答案统一。

    【讨论】:

    • 谢谢你,现在明白plan的contxt了,很有用!
    猜你喜欢
    • 2020-01-24
    • 2017-09-24
    • 1970-01-01
    • 2015-03-29
    • 2020-03-09
    • 2021-02-27
    • 1970-01-01
    • 2017-06-25
    • 2016-12-30
    相关资源
    最近更新 更多