我可以在 AnyLogic 拆分组件中将单个代理拆分为多个吗?
Can I split a single agent into multiple ones in an AnyLogic split component?
我有一个关于 AnyLogic PMI 库的 "split" 组件的问题。为了更好地解释案例,我将 post 一张我正在构建的场景的一部分的图片。 .
在上图中,左侧的源元素生成类型为 "Requirement" 的对象(它是从代理 class 继承的自定义 class)。这个 class 表示一个矩阵,每个产品 "Pi" 对每个客户 "Ci" 的要求(给出矩阵的示例):
这个矩阵可以看作是代理的集合,因为每一行都是与我的电路块的第一个其他相关的代理(逻辑上它包含有关要从产品供应商处订购的产品 Pi 的数量的信息) 并且每一列都是与我的电路块的第二个其他相关的代理(逻辑上它包含客户 Ci 的销售预测)。
有可能,在拆分块的 "on at enter" 事件中,构建一个脚本,首先迭代行并在 "out" 拆分的端口上发出每一行,然后迭代列并发出每个都在 "out-copy" split 的端口上。我将 post 我想放在 "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
}
我会在 nuove matrici
之后放置 Sink
或 Exit
块。使用 Sink
以防在生成代理后可以销毁初始代理矩阵,或者使用 Exit
如果初始代理应该保存并在以后以某种方式重用。 Split
块可以删除。代替块,将两个 Enter
块连接到相应的以下队列。
在 Sink\Exit
的 On Enter
动作中执行代码。可以使用 enterBlockName.take(new MyAgent(args...));
将生成的代理注入到相应的队列中
例如,考虑到代码生成 Agent
类型的实例,它将是:
matrix = (Requirement)agent;
Iterator<Object> reqIter = matrix.getRequirements(); //iterate the rows
while (reqIter.hasNext())
{
Object current = reqIter.next();
enter.take( new MyAgent(current) ); //PUSH current in the top flow
}
Iterator<Object> sellIter = matrix.getRequirements(); //iterate the columns
while (sellIter.hasNext())
{
Object current = sellIter.next();
enter1.take( new MyAgent(current) ); //PUSH current in the bottom flow
}
我有一个关于 AnyLogic PMI 库的 "split" 组件的问题。为了更好地解释案例,我将 post 一张我正在构建的场景的一部分的图片。
在上图中,左侧的源元素生成类型为 "Requirement" 的对象(它是从代理 class 继承的自定义 class)。这个 class 表示一个矩阵,每个产品 "Pi" 对每个客户 "Ci" 的要求(给出矩阵的示例):
这个矩阵可以看作是代理的集合,因为每一行都是与我的电路块的第一个其他相关的代理(逻辑上它包含有关要从产品供应商处订购的产品 Pi 的数量的信息) 并且每一列都是与我的电路块的第二个其他相关的代理(逻辑上它包含客户 Ci 的销售预测)。
有可能,在拆分块的 "on at enter" 事件中,构建一个脚本,首先迭代行并在 "out" 拆分的端口上发出每一行,然后迭代列并发出每个都在 "out-copy" split 的端口上。我将 post 我想放在 "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
}
我会在 nuove matrici
之后放置 Sink
或 Exit
块。使用 Sink
以防在生成代理后可以销毁初始代理矩阵,或者使用 Exit
如果初始代理应该保存并在以后以某种方式重用。 Split
块可以删除。代替块,将两个 Enter
块连接到相应的以下队列。
在 Sink\Exit
的 On Enter
动作中执行代码。可以使用 enterBlockName.take(new MyAgent(args...));
例如,考虑到代码生成 Agent
类型的实例,它将是:
matrix = (Requirement)agent;
Iterator<Object> reqIter = matrix.getRequirements(); //iterate the rows
while (reqIter.hasNext())
{
Object current = reqIter.next();
enter.take( new MyAgent(current) ); //PUSH current in the top flow
}
Iterator<Object> sellIter = matrix.getRequirements(); //iterate the columns
while (sellIter.hasNext())
{
Object current = sellIter.next();
enter1.take( new MyAgent(current) ); //PUSH current in the bottom flow
}