artificial-intelligence - Jason/AgentSpeak 试图同步代理

标签 artificial-intelligence agent

您好,我正在尝试为 8 个数字实现树排序。我创建了 15 个树节点代理和一个管理代理。我想要实现的是同步树中的叶子并将它们生成的数字发送到管理器节点。我的问题是在我的 for 循环中,叶子没有同步,所以经理正在等待下一个叶子,但那个叶子可能已经发送了它的编号。有没有办法同步这些叶子,以便经理等待每个叶子,然后打印出收到的数字?

以下是代理:

treeSort.mas2j

MAS treeSort {
    infrastructure: Centralised
    agents:
        manager;
        agent#15;
}

经理.asl:
!start.
+!start : true <-
    for ( .range(I,8,15) ) {
        .concat("agent",I,TempAgent);
        .print("waiting from ",TempAgent);
        .wait(recievedNum(Y,X) & Y=TempAgent);
        .print("from ",Y," recvd ",X);    
    };
    .println(" done").

代理.asl
!start.

@p1 +!start : .my_name(agent8) | .my_name(agent9)| .my_name(agent10)|.my_name(agent11)
        | .my_name(agent12) | .my_name(agent13) | .my_name(agent14) |my_name(agent15) <- +myNum(math.round(math.random(100)));
    ?myNum(X);
    +iam(leaf);
    .my_name(Y);
    .send(manager, tell, recievedNum(Y,X)).

@p2 +!start : .my_name(agent7) | .my_name(agent6)|  .my_name(agent5) |.my_name(agent4)
        | .my_name(agent3) | .my_name(agent2) <- +iam(node).

@p3 +!start : .my_name(agent1) <- +iam(root).

最佳答案

.concat 产生一个字符串(因此 TempAgent 是一个字符串),但 receivedNum 的第一个参数是一个原子,两者都没有统一。解决方案:

!start.
+!start : true <-
    for ( .range(I,8,15) ) {
        .concat("agent",I,TempAgent);
        .print("waiting from ",TempAgent);
        .term2string(YT,TempAgent);
        .wait(recievedNum(YT,X));
        .print("from ",YT," recvd ",X);    
    };
    .println(" done").

关于artificial-intelligence - Jason/AgentSpeak 试图同步代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49896288/

相关文章:

python - Python 中的 AI 工具入门

machine-learning - 构建决策树时没有剩余示例的情况

algorithm - 我们如何在此类数据上使用机器学习算法?

artificial-intelligence - CNTK:读取输入文件时达到允许的最大错误数

java - 自动异常处理

iphone - 创建 iOS 分发证书需要什么角色?

azure - 显示 azure-pipeline 输出的进度

machine-learning - 使用具有不同输入形状和类模型的预训练模型

TFS 2017 本地构建代理

concurrency - 使用代理来完成 STM 交易中的副作用