【问题标题】:Anylogic - Block and unblock based on conditionAnylogic - 根据条件阻止和解除阻止
【发布时间】:2021-06-03 11:12:32
【问题描述】:

是否可以在 Hold 块的阻塞条件中使用简单的真/假语句来在条件为真时阻塞代理并在条件为假时解除阻塞?如果没有,还有其他方法吗?

如果条件 resourcePool1.idle()==0 为真,我需要 Hold 块来阻止,否则我需要它来解除阻止。我尝试了几种不同的说法,但都没有奏效。

【问题讨论】:

  • 你到底尝试了什么?你所描述的似乎有道理。
  • 我尝试过使用像 resourcePool1.idle()==0 这样的语句? true : false 并使用 setblocked() 函数,但它只阻塞并且如果为 false 似乎不会解除阻塞。
  • 下面的新答案有效吗?

标签: java simulation anylogic


【解决方案1】:

由于您的病情与资源有关,我建议如下:

在 on capture 和 on release 字段中,写下以下内容:

if(resourcePool.idle() == 0)
    hold.setBlocked(true);
else
    hold.setBlocked(false);

请注意,由于您在资源池中,因此可以将其名称替换为self

通过这种方式,您可以优化您的模型,因为只有在其结果可能发生变化时(即资源被占用或释放时)才会评估块条件。无需在其他时间检查条件。

【讨论】:

    【解决方案2】:

    保持块可能不会动态地检查您的情况,而只会在开始时检查一次。您有责任告诉它病情已发生变化。 (否则它需要不断检查,这是糟糕的设计和计算成本)。

    因此,请重新设计您的模型,以便在出现情况时显式更新 Hold 块(更改为“手动”模式)。在您的情况下,每当资源空闲时,它应该检查是否所有资源都处于空闲状态,然后手动更改 Hold 块。

    【讨论】:

      猜你喜欢
      • 2012-12-05
      • 2011-10-13
      • 1970-01-01
      • 2018-05-30
      • 2018-04-21
      • 1970-01-01
      • 1970-01-01
      • 2022-07-01
      • 1970-01-01
      相关资源
      最近更新 更多