【问题标题】:AnyLogic how to link one agent to anotherAnyLogic 如何将一个代理链接到另一个代理
【发布时间】:2018-11-16 06:27:43
【问题描述】:

对于任何逻辑,我是一个相对的菜鸟,但我的作业中有一项任务要做,所以我的问题来了:

我创建了一个全是患者的代理群体...这些患者生病的概率可以说是 30%...我已经实施了这个但现在我的任务是添加一种使用新代理的药物这个问题可以治愈他们……但是我如何将这个新代理与已经存在的代理联系起来呢?我的第一个代理被一条消​​息触发..因此我们必须使用一个事件将此消息发送给第一个被感染的人等..

谁能帮助我如何创建一个新代理并将其链接到旧代理以治愈人们?

非常感谢!

【问题讨论】:

  • 这完全取决于您如何使用药物...我想例如,您可以有两种状态的药物(使用过,未使用过),如果有人生病,它会检查药物是否具有状态未使用,如果确实如此,它会向有问题的药物发送一条消息,以便它被使用,同时患者进入一个他被治愈的新状态......但我不知道......这取决于你的系统是如何工作的......这是一个设计问题,所以不太适合stackoverflow
  • 感谢您的快速回复!是的,这正是我想要的...我现在刚刚创建了一种具有您上面提到的两种状态(使用和未使用)的药物...我得到了一个状态我的病人叫“病了”,我现在如何检查一种药物是否处于未使用状态,然后向该药物发送该药物已使用的消息?

标签: anylogic agents


【解决方案1】:

好的,既然这是你需要的,我会把它作为答案发布

medicine 有一个称为 SC 的状态图,其中包含一个已使用的初始状态和一个未使用的第二个状态,您可以通过从一个到另一个的消息转换获得。

当病人进入sick状态时,需要找一个处于notUsed状态的agent Medicine才能痊愈,所以你用下面的代码找到它:

Medicine med=findFirst(main.medicines,m->m.inState(m.notUsed));
if(med!=null){//meaning that there is at least one not used medicine
    med.SC.fireEvent("use medicine");
    send("get better",this);
}

你将不得不做同样的事情,当一种新药被创造出来时,你用同样的方法来找到一个处于“生病”状态的人。 我假设您在患者代理中调用此函数,但根据您调用它的时间,它可能会有所不同。

【讨论】:

  • 谢谢!还有几个问题: 1. 我需要在哪里输入代码?在哪个州或其他地方? 2. 我的代理类型名称是 Medicine 并且我的代理群体名称是 Medicines ... 代码是否更改?你保护了我的生命!谢谢
  • 我不知道你应该在哪里写代码..这取决于你的模型是如何工作的......可能在病人的进入状态生病动作和进入不使用的动作药……但我只是猜测
  • 除了 Medicines 有一个大写字母外,代码没有变化
  • 我真的无法让它运行......我知道它可能对你来说可能是最简单的事情,但我只是没有完成它。你能检查我的文件吗?太感谢了! ufile.io/owypa
猜你喜欢
  • 2021-06-03
  • 2016-02-17
  • 2019-08-17
  • 2021-07-10
  • 2021-10-12
  • 2021-10-19
  • 1970-01-01
  • 2017-06-20
  • 2022-09-26
相关资源
最近更新 更多