【问题标题】:Anylogic change sequence in service block服务块中的 Anylogic 更改序列
【发布时间】:2019-04-13 07:16:55
【问题描述】:

亲爱的 AnyLogic 社区,

我创建了一个模型来评估不同的自主控制方法。

我的代理人有不同的截止日期,并希望最先为截止日期最快的代理人提供服务。目前,传入的代理没有以任何方式排序,而是根据 FIFO 规则提供服务。

是否有可能在不添加单独队列的情况下修改服务块中代理的顺序?

非常感谢您的时间和帮助!

【问题讨论】:

  • 使用优先级...截止日期越早,优先级越高。代理将根据他们的优先级获得服务。你试过了吗?
  • 我现在分配了优先级,但我不知道如何在服务块中调用它们?
  • 在一个服务块中,只能使用优先级来按优先级调用资源。您无法对服务对象中的嵌入队列进行排序。您需要在服务之前添加另一个队列对象,只有在那里您才能使其按优先级排序(或如下建议的代理比较)。另外,确保将服务对象队列大小设置为 1(0 是不可能的),这样服务中就不会发生排队。
  • 这是否意味着像 Felipe 建议的那样根据代理的优先级设置任务优先级并不能确保优先级最高的订单首先得到服务?
  • 我认为实际上可能不会。从服务块的帮助中不清楚。建议您创建自己的手动测试,看看它是如何工作的 :-) 您可能是正确的,服务块的优先级实际上对队列进行了排序。我从不使用它,因为 queue-seize-delay-release 块给了我更大的灵活性 :-) 很抱歉造成混乱

标签: java simulation anylogic


【解决方案1】:

Benjamin 的解决方案很好,但是如果您坚持不想在服务块之前使用队列,并且无论如何都需要使用服务块,那么您可以像这样设置优先级:

到期日越近,代理的优先级越高。

既然您已经在代理内部设置了优先级,那么除了这个之外别无他法(除非您想要抢占)。

但是如果你想设置它,优先级可以是这个(优先级是你的代理中定义的参数):

【讨论】:

  • 非常感谢。您的解决方案确实对我有帮助!
【解决方案2】:

您可以按照 Felipe 的建议将截止日期映射到优先级。

另外,更直接的方法是使用队列优先模式“代理比较”。假设您的代理有一个 Date 类型的参数“myDueDate”。

然后您可以简单地安排如下最紧急到期日的代理,实质上是说“如果新代理1 更紧急,则优先选择现有代理2”。进来的代理会跳到每个队列成员前面,直到找到一个更紧急的。

【讨论】:

  • 我知道这是最好的方法,但实际上我想在不添加单独队列的情况下解决问题。是否有可能将此比较包含在服务块中,以便我可以省去额外的队列?
  • 没有。但是服务块实际上只是一个抓住-延迟-释放的组合,以节省一些空间。但是,在服务对象中找不到一些详细的属性。所以如果你需要一个(比如队列排序),你必须解开你的服务对象。它所花费的只是一点屏幕空间......去吧?
  • 问题是服务块的队列长度已经在我的模型中的多个决策过程中使用,因此 Felipe 的解决方案对我的帮助最大。下次我将解开服务对象并使用单独的元素。
  • 不过,非常感谢您的快速回答以及您的时间和帮助!
  • 别担心,我明白你的意思。我只是认为从日期到 int 优先级的映射可能并不简单。不过,一般来说,当您构建更大的模型时,您应该对所谓的“重构”感到满意:不可避免地必须摆脱一些对象,用其他对象替换它,并将使用旧对象的代码“重新附加”到新对象。否则,你很快就会被凌乱的 make-dos 卡住:-)
猜你喜欢
  • 2020-09-09
  • 2021-07-30
  • 2018-09-02
  • 2021-09-09
  • 2021-11-04
  • 2021-09-01
  • 2014-11-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多