使用循环将代理类型设置为空闲,当处于该状态时将接受代理,如果繁忙则拒绝

Using loops to set an agent type as idle that will accept an agent when in that state and reject if busy

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

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

[来源]

(原码)

agent=ProductionOrder
agent.assignedSuite = productionSuite(uniform_discr(0,2));
deliver("Suite is Scheduled", agent.assignedSuite);

(新代码)

操作:

`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");`

我得到的错误是空闲不能作为变量解析。虽然我不确定这是最好的使用方法。还可以针对何时对套件进行分组或者我是否应该单独定义它们提供一些指导。

该错误是因为您的 Source 对象不知道 "idle"。您需要重写如下:

if (productionSuite(0).inState(ProductionSuite.idle))

假设您的 productionSuite 代理属于 ProductionSuite 类型(注意大写字母)。简而言之,您需要告诉检查状态的代码该状态属于哪种代理类型,以便它知道去哪里查看。

希望对您有所帮助