当前位置: 首页 > 知识库问答 >
问题:

AnyLogic:如何批处理具有相似参数的代理?

涂羽
2023-03-14

我真的很感激你能提供的任何帮助。

共有1个答案

束俊材
2023-03-14

有许多方法可以做到这一点,但是考虑到批处理不一致(即批处理为10个,最后一个是9个),我会首先将所有代理放在wait块中(或者可以使用queue),然后以编程方式控制它们

举下面这个小例子

我一直等到我的200个“产品”代理到达等待块,然后按下按钮“Check BatchLeleaseCheck()调用函数”Check BatchReleaseCheck“

LinkedHashMap<Integer, List<Product>> productsWaiting = new LinkedHashMap<Integer, List<Product>>();
for (int i = 0; i < wait.size(); i ++){
    Product product = wait.get(i);
    int sp = product.sp;
    if (!productsWaiting.containsKey(sp)) productsWaiting.put(sp, new ArrayList<Product>());
    productsWaiting.get(sp).add(product);
    
    //Check the batch size if sufficient we release it
    if (productsWaiting.get(sp).size() == batchSize) {
        for (Product p:productsWaiting.get(sp)) {
            wait.free(p);
        }
        return; // we exit the loop since we have released a batch
    } 
}

// If we get to the end of the loop we were not able to release any batch we now release each SP type regardless of their current batch size

for (int i = 1; i < 6; i ++) {
    if (productsWaiting.get(i) == null) continue;
    for (Product p:productsWaiting.get(i)) {
        wait.free(p);
    }
    batch.set_batchSize(productsWaiting.get(i).size()); //Since the batch is less than the standard we need to change it to what ever we are releasing
    return; // we exit the loop since we have released a batch
} 

创建一个映射,根据产品的sp编号将产品存储在列表中。如果在任何时候您发现您有足够的单位创建一个批处理,我们停止并释放他们从等待块。

如果我们到了forhtml" target="_blank">循环的末尾,我们没有任何sp编号,它有足够的单位来组成一整批,我们简单地释放我们所拥有的。

在本例中,每次释放批处理都需要单击该按钮,或者,您可以将批处理检查函数调用添加到批处理对象的on release代码中。这一切都将依次发生,但同时

 类似资料:
  • 我正在创建一个我想经常重用的AnyLogic代理。在许多AnyLogic代理和组件中,有一些空间可以输入代码,如“on receive”、“Action”或“function body”。在构建模型时,这些将被编译到代理中。普通程序员是如何做到这一点的? 例如,假设我有这个代理(显然是伪代码): 客户端可能会使用它如下: 这可能吗?

  • 我有一个名为products的代理,在这个代理中,我分配了一个名为sp的参数;在模拟中,我有一个相同的代理,不同的sp范围从1到5。我想在同一批中批量使用相同sp的代理,这取决于sp。所以如果我有200个代理,其中49个sp等于1,我想把它们分成4批,因为这个sp的批量是10个,剩下的9个代理等到下一个周期,而sp等于2,我有33个代理,批量是7个,我想把它们分成4批,剩下的5个代理等到下一个周期

  • 关于Anylogic中的批处理过程,我有一个非常简短的问题。 我想打印出已经退出前一个批处理元素的代理的ID,它们是在一起批处理的。因此,它们位于不同的元素(准确地说是发布),我正在努力在批处理中找到它们的ID。我唯一的想法是先取消批处理,然后打印出ID。 有没有一种方法可以在不拆分的情况下做到这一点? 事先非常感谢。 亲切的问候

  • 如何将批次大小I.t.o设置为要批次的重量?我目前正在模拟一种马铃薯植物。由于土豆的随机性,土豆(代理)都有自己的重量,但现在我必须将它们分装成10公斤的袋子。重量应该在10kg以上,但不能更小,所以它将是9.9kg加上一个土豆。 F1帮助功能建议使用自定义队列。但我不知道如何继续这一选择。 任何帮助都将不胜感激

  • 我创建了一个带有一些属性(列)的电子表格;然后在Anylogic中创建一个代理(代理群体)并从DB加载它。运行模型。工作完美,它显示我有一个代理人口“产品”与6个代理…(型号有流体源,管道,槽,阀门,流体处理,所有基本配置)

  • 我面临着一个逻辑问题。我创建了一个带参数的函数。参数为代理消息。但是,该函数无法获取当前代理。这个论点似乎是空的。为什么?