Loops 使用循环将代理类型设置为空闲,该类型将在代理处于该状态时接受代理,并在忙时拒绝

Loops 使用循环将代理类型设置为空闲,该类型将在代理处于该状态时接受代理,并在忙时拒绝,loops,anylogic,statechart,Loops,Anylogic,Statechart,我有3个相同的套件,由productionSuite的一种代理类型表示,我想使用循环将套件设置为空闲和繁忙。productionOrder的代理只需要发送到空闲的房间 我在ProductionOrder代理中有一个参数assignedSuite,它等于在main上的源中拾取的随机套件。我开始在这个源代码中尝试与ProductionSuite代理的状态图相关的循环。我想我需要一段代码将ProductionSuite定义为0,1,2,然后用循环检查它们是否有ProductionOrder [来源]

我有3个相同的套件,由productionSuite的一种代理类型表示,我想使用循环将套件设置为空闲和繁忙。productionOrder的代理只需要发送到空闲的房间

我在ProductionOrder代理中有一个参数assignedSuite,它等于在main上的源中拾取的随机套件。我开始在这个源代码中尝试与ProductionSuite代理的状态图相关的循环。我想我需要一段代码将ProductionSuite定义为0,1,2,然后用循环检查它们是否有ProductionOrder

[来源]

(原代码)

(新守则)

行动:

`if ( productionSuite(0).inState(idle))
agent.assignedSuite = productionSuite(0);
agent.receive("Suite is Scheduled");

if ( productionSuite(1).inState(idle))
agent.assignedSuite = productionSuite(1);
agent.receive("Suite is Scheduled");

if ( productionSuite(2).inState(idle))
agent.assignedSuite = productionSuite(2);
agent.receive("Suite is Scheduled");`

我得到的错误是idle不能作为变量解析。虽然我不确定这是最好的方法。还可以在何时对套件进行分组或是否应单独定义套件时使用一些指示。

该错误是由于源对象不知道“空闲”而导致的。您需要将其重写如下:

if (productionSuite(0).inState(ProductionSuite.idle))
假设您的productionSuite代理属于productionSuite类型(请注意大写字母)。简而言之,您需要告诉代码检查状态所属的代理类型,以便它知道在哪里查找


希望这能有所帮助

谢谢代码,但它会一直将每个新生产订单分配给同一套件。在ProductionSuite的状态图中,它从“空闲”状态开始,在进入“已计划”状态之前,等待“套件已计划”转换中的消息。我想现在我正在寻找一种方法来捕获或关闭分配了订单的特定套件,因为移动到“计划”状态似乎不够。我只是重写了一些消息代码,现在就可以更改状态了。但当我点击按钮创建第二个新订单时,模型会出现大量错误和崩溃。现在,它还将所有3个套件的状态更改为“预定”,即使其中只有一个获得了订单。我认为所有的错误都是因为它试图将订单分配给“预定”状态套件。新代码:if(productionSuite(0).inState(productionSuite.idle)){agent.assignedSuite=productionSuite(0);deliver(“套件已安排”,agent.assignedSuite);}-然后对Harrison的套件1和套件2重复此操作,这不再清楚。建议您提出一个新的、清晰的问题,显示错误并确保其结构良好(检查支持)。很乐意帮助:-)我在上面的链接中将它变成了一个新问题。“pythonidle”标记用于IDE,而不是“busy”的反面;-)。
if (productionSuite(0).inState(ProductionSuite.idle))