如何在Anylogic中准确提取符合要求的代理数量?

问题描述 投票:0回答:1

我正在研究以下模型。模型结构如下,

参数是使用订单代理内部的两个函数预定义的,如下所示:

请注意,我的人口订单最初是空的,我正在将我的源代理添加到自定义人口订单中。

现在,我使用一个参数 ProductType 定义了另一种称为产品的群体,它最初也是空的,我将 Enter1、Enter2 和 Enter3 处的代理添加到自定义群体产品中。

现在,一旦我的订单到达以下延迟块(延迟完成后),就会调用以下代码,

*

for (int i=0; i<agent.quarts_fill;i++){
Product product=new Product(agent.getIndex());
enter1.take(product);
}
for (int i=0; i<agent.gallon_fill;i++){
Product product=new Product(agent.getIndex());
enter2.take(product);
}
for (int i=0; i<agent.bucket_fill;i++){
Product product=new Product(agent.getIndex());
enter3.take(product);
}

所以,我正在做的是,我根据使用 agent.getIndex() 函数获取的订单代理索引号定义代理人口产品的参数 ProductID。

现在,我要转到我困扰的部分了

在取货块中,我尝试使用以下函数来取货确切数量的代理(符合特定 ProductID 条件的产品)

(count(queue1, q-> q.ProductID==container.getIndex())== container.OrderSize)?
container.OrderSize : container.OrderSize

在某种程度上我对上面的代码很有信心,但问题是错误的陈述。您可以注意到,一旦 Java 三元表达式为 false,它将拾取几乎所有所需数量的代理(产品)。因此,它没有考虑 ProductID 标准。

如果队列1中具有特定ProductID的代理数量尚未等于container.OrderSize的数量,我该怎么做才能等待???

最近我注意到container.getIndex()是全新的,它并不代表((Order)agent).getIndex()。那么我应该怎么做才能引用Order get Index呢?

anylogic
1个回答
0
投票

使用 getIndex() 来为订单提供 id 是个坏主意。它运作良好,直到秩序开始离开人口的那一刻。第一个订单离开后, getIndex() 会产生误导,因为它忽略了那些旧订单。我建议您使用 self.out.count() 之类的东西,而不是使用 getIndex() 。此代码将引用当前块的“输出”端口,并为您提供订单 ID 的适当增量。

© www.soinside.com 2019 - 2024. All rights reserved.