AnyLogic: Select 基于条件的特定资源集
AnyLogic: Select specific resource set based on condition
我在 AnyLogic 中创建了一个简单的模型(见截图)。现在我想添加一个条件来选择服务块中的两个资源集之一。作为示例,应适用以下场景:如果队列中有 5 个以上的部件,则工人 3 和工人 4 应执行服务。如果队列中有 <= 5 个零件,则服务应由工作人员 1 和工作人员 2 执行。这只是一个简化的示例。我主要对使用条件解决此问题感兴趣。我已经尝试过不同的方法,但没有成功。有谁知道这种情况的 Java 代码是什么样子的?
一种简单的方法是使用 Seize
和 Delay
(完成后 Release
)块而不是 Service
。在 Seize
之前,您可以将条件放在 SelectOutputOut
块中。像这样:
首先,您不需要队列,因为服务块已经有一个队列...因此对于资源选择条件中的这个特定示例,您将执行以下操作:
service.queueSize()>5 ? (worker3.containsUnit(unit) || worker4.containsUnit(unit))
:
(worker1.containsUnit(unit) || worker2.containsUnit(unit))
如果您坚持使用队列,可以将service.queueSize() 更改为queue.size()。之后你需要确保在需要时重新计算条件,对于这个特定的例子我认为你只需要在服务块的退出操作上重新计算它们:
self.recalculateResourceChoiceConditions();
我在 AnyLogic 中创建了一个简单的模型(见截图)。现在我想添加一个条件来选择服务块中的两个资源集之一。作为示例,应适用以下场景:如果队列中有 5 个以上的部件,则工人 3 和工人 4 应执行服务。如果队列中有 <= 5 个零件,则服务应由工作人员 1 和工作人员 2 执行。这只是一个简化的示例。我主要对使用条件解决此问题感兴趣。我已经尝试过不同的方法,但没有成功。有谁知道这种情况的 Java 代码是什么样子的?
一种简单的方法是使用 Seize
和 Delay
(完成后 Release
)块而不是 Service
。在 Seize
之前,您可以将条件放在 SelectOutputOut
块中。像这样:
首先,您不需要队列,因为服务块已经有一个队列...因此对于资源选择条件中的这个特定示例,您将执行以下操作:
service.queueSize()>5 ? (worker3.containsUnit(unit) || worker4.containsUnit(unit))
:
(worker1.containsUnit(unit) || worker2.containsUnit(unit))
如果您坚持使用队列,可以将service.queueSize() 更改为queue.size()。之后你需要确保在需要时重新计算条件,对于这个特定的例子我认为你只需要在服务块的退出操作上重新计算它们:
self.recalculateResourceChoiceConditions();