java - AnyLogic 汇编程序作为网关

标签 java anylogic

早上好 我是 AnyLogic 平台的新手,我已经开始研究它,因为我想用它来映射公司的业务流程。我打算使用该工具的流程模型库对不同部门进行建模,目的是研究现在如何实现部门之间的信息流。

我的图表将由“源”元素和不同的“汇编器”元素组成,我希望最后的元素(汇编器)充当网关。我附上一个简单的图表来更好地说明情况 (example) .

假设“sourceA”和“sourceB”(位于不同部门)生成两个不同的文档,使用两个自定义代理实现(例如,从“sourceA”生成的代理具有“orderID”参数和从''sourceB''生成的代理有一个''qualityCheckID''参数)在到达组装器组件(放置在不同的部门)之前在各自的队列上传送。由于部门不同步,队列很可能在模拟期间未对齐(queue[10] = agent.orderID 设置为 10,queue[10] = agent.qualityIDCheck 设置为 9)。我希望组装器作为网关工作,因此它等待“orderID”等于“qualityCheckID”的代理(这意味着特定订单上的产品已经过质量部门的验证)。

阅读文档我看到代理在空闲时到达汇编器端口,否则在队列中等待。由于异步可能会发生,在汇编器端口中存在不具有 orderID 等于 qualityCheckID 的代理,在这种情况下,我不希望产生汇编器的输出。可能发生必要的代理在队列中而不是在端口中,因此“组装程序”必须在队列中搜索以查找相应的代理是否存在以及是否将其从队列中删除(替换错误的代理端口将最后一个放入队列并产生输出)

有人可以帮助我了解如何实现这种情况。

最佳答案

早上好,安德里亚。

有一些替代方案。 如果两个 ID 都是递增生成的(1、2、3、....、N),您可以使用 Match block ,它将同步您的流程。另外,您可以删除队列元素,因为此 block 已经合并了队列。

但是,如果 ID 是随机生成的,您可能需要做一些变通并使用 Java 代码和函数。 我会做的是:

我不会使用Queue(它会在下一个 block 可用时立即发送代理)我会使用Wait block (这几乎是一个< strong>Queue 但不会对元素进行排序,也不会在您需要之前发送代理。阅读 AnyLogic 上的描述,它会很清楚。

每当代理进入一个Wait block 时,我会将它添加到一个LinkedHashMapHashMap 集合中,其中包含一个 Integer(或您的类型)订单参数) key 和代理值(每个等待 block 一个)。这将允许更容易的信息访问(而不是每次我想检查特定代理是否存在时搜索整个 Wait 内容)。 下一步将是简单地检查在其他等待 block 上是否有我需要执行组装任务的元素。如果是这样,请释放它们(以及当前代理)。

代码如下:

输入时:

WaitBlockHashMap.put(agent.orderID, agent)
if (WaitBlockHashMap2.get(agent.orderID)!=null) { //if the matching element 
                                                  //is on the other Wait Block
    self.free(agent);
    WaitBlock2.free(WaitBlockHashMap2.get(agent.orderID));
}

WaitBlockHashMap.put(agent.qualityCheckID, agent)
if (WaitBlockHashMap2.get(agent.qualityCheckID)!=null) { //if the matching element 
                                                         //is on the other Wait Block
    self.free(agent);
    WaitBlock2.free(WaitBlockHashMap2.get(agent.qualityCheckID));
}

取决于等待 block 中的代理类型。

希望对你有帮助 路易斯

关于java - AnyLogic 汇编程序作为网关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39830403/

相关文章:

database - 无法读取更新的 AnyLogic DB 值

java - 尝试在分层模型中移动代理时出现 AnyLogic 错误

java - 服务使用资源对象时如何访问资源对象?

java - (Java)统计分析作业

java - 在junit5中进行单元测试dropwizard时如何注入(inject)HttpSession和HttpServletRequest?

Anylogic:如何获得行人选择的路线的距离

error-handling - Anylogic - 内部错误 : Engine still has x events scheduled: xyz: [null]

Java (Android) 解密带有 IV 的 msg

java - 16 位转换的相对 8 位颜色

java - 将 List<Character> 转换为 char[],然后再转换为 String