【问题标题】:Assign priorities for multiple Seize Blocks for the same resource in AnyLogic在 AnyLogic 中为同一资源分配多个 Seize Blocks 的优先级
【发布时间】:2020-12-18 06:22:08
【问题描述】:

我有一个不太典型的情况,我不知道如何进行:

  • 有两个站点位于两个不同的位置。
  • 两个站点需要相同的资源。
  • 一旦释放,资源就会从一个站点移动到另一个站点。所以它不断地从 1 号站到 2 号站再到 1 号站,以此类推,直到再次被扣押。这是通过从发布块的资源进程端口添加一个链接来建模的。因此,除非有条件,否则它不会完全释放。条件是有代理在同一资源的占用块队列中等待。所以它应该继续移动,直到再次需要它。棘手的部分是该资源有两个占用块,每个站点一个。代理可能已准备好并在两个站点的资源占用元素中等待。我在发布时添加了资源进程的图像。所以在“selectOuput4”它检查站 1 的占用元素是否有代理等待,如果有,资源被释放并且可以被占用。否则,它移动到站 2 并检查相同的站,但站 2。

我担心的是,可能会出现两个站点都有特工在各自的抢占区等待的情况。如何确保资源将被站点 1 的占用元素而不是站点 2 占用,反之亦然。在两个占用元素正在等待它的情况下,有没有办法控制资源的去向?还是总是随机的?

我为这篇冗长的帖子道歉,我希望我能够正确地表达我的想法。

【问题讨论】:

  • 另一种提问方式如下:能否以资源位置为条件获取元素行为?我正在考虑的一个潜在解决方案是在抓住元素之前使用“等待”块。
  • 所以解决方案如下:在每个占用元素之前添加一个队列块,后跟一个容量为 1 的等待块。如果等待块包含 1 个代理,则“selectOutput4”处的条件为真,因此资源将被释放,相关站之前的等待块将被释放代理。这种方式将控制哪个抓取元素正在抓取。这有意义吗?

标签: anylogic


【解决方案1】:

首先,我认为你的设计有点奇怪,因为你总是占用资源。

我要做的是首先在资源中创建一个状态图,控制资源从一个地方到另一个地方的移动,这样您就可以更好地控制它。状态图仅在未被占用时用于移动您的资源。这将允许您的资源从 1 号站移动到 2 号站的情况,但有些东西进入了 1 号站队列,资源可以立即做出反应并在到达 2 号站之前返回到 1 号站(如果您认为这将是一个很好的选择)想法这样做)

第二个是seize块定义了agent到达seize块时任务的优先级,而你的情况需要动态改变那个优先级,据我所知是做不到的,所以wait块不幸的是,在抓住块之前是一个不错的选择。

【讨论】:

  • 感谢您的建议。那么在这种情况下,该模型是否会被视为多方法仿真模型(DES + ABM)?状态图会和 ABM 一样工作吗?例如通过使用“this”来控制代理动作?再次感谢您的回答,无论哪种方式都很有见地。我真的很喜欢使用“等待”块,它增加了对模型的大量控制。我的方法是使用一个队列,后跟一个大小为 1 的等待块,以便于控制。
  • 如果你有一个状态图,它已经是 AB,如果你有 1 个进程块它是 DE,所以是的,它会被认为是一个多方法模型
  • 很抱歉再次打扰您,但是您如何从资源代理中访问 main 呢?我尝试在资源代理窗口中添加状态图,但我无法从那里访问 main...
  • 我的猜测是我需要创建一个 ABM 代理而不是资源单元代理,并在属性中指定它应该用作资源单元。
  • 只需在您的资源类型的 main 中创建一个不执行任何操作的空填充...然后您可以从资源访问 main
猜你喜欢
  • 2021-07-23
  • 2021-08-15
  • 2021-10-05
  • 2020-12-04
  • 2016-02-24
  • 2019-11-26
  • 1970-01-01
  • 2018-05-06
  • 1970-01-01
相关资源
最近更新 更多