我可以在AnyLogic拆分组件中将单个代理拆分为多个代理吗?

时间:2016-12-29 08:09:47

标签: java anylogic

我对AnyLogic PMI库的“拆分”组件提出了疑问。为了更好地解释这个案例,我将发布我正在构建的场景的一部分图片。 AnyLogic circuit

在上图中左侧的source元素生成“Requirement”类型的对象(它是从Agent类继承的自定义类)。此类表示一个矩阵,其中包含每个客户“Ci”的每个产品“Pi”的要求(给出矩阵的示例):

Requirement Matrix

此矩阵可以被视为代理的集合,因为每一行都是与我的电路块的第一个相关的代理(逻辑上它包含有关从产品供应商订购的产品Pi数量的信息)和每一列都是一个代理,我的电路块的另一个是另一个代理(逻辑上它包含客户Ci的销售预测)。

可能的是,在拆分块的“on at enter”事件中,构建一个脚本,该脚本首先迭代行并在“out”split的端口上发出每个行,然后迭代列并发出每个列。 “out-copy”分裂的端口。我将发布一个我正考虑在“on at enter”事件中放置的脚本伪代码:

matrix = (Requirement)agent;
Iterator<Object> reqIter = matrix.getRequirements(); //iterate the rows
while (reqIter.hasNext())
{
   Object current = reqIter.next();
   //PUSH current in the out port of the split
}

Iterator<Object> sellIter = matrix.getRequirements(); //iterate the columns
while (sellIter.hasNext())
{
   Object current = sellIter.next();
   //PUSH current in the out-copy port of the split
}

1 个答案:

答案 0 :(得分:2)

我会在Sink之后设置Exitnuove matrici阻止。如果在生成代理后可以销毁初始代理矩阵,则使用Sink;如果初始代理应该保存并稍后以某种方式重用,则使用Exit。可以删除Split块。将两个Enter块连接到相应的后续队列而不是块。

On Enter的{​​{1}}内部操作执行代码。生成的代理可以使用Sink\Exit

注入相应的队列

例如,考虑到代码生成enterBlockName.take(new MyAgent(args...));类型的实例,它将是:

Agent