【问题标题】:Anylogic: Release specific resourceAnylogic:释放特定资源
【发布时间】:2021-11-14 15:00:41
【问题描述】:

我还有一个关于 AnyLogic 资源的小问题。

我希望能够从资源池中释放特定资源,而不仅仅是从池中释放任何资源。原因是我偶尔会从 ResourcePool 中获取多个资源(一次一个),然后希望一次释放一个资源。但是我不想从池中释放“任何”资源,我希望能够指定要释放池中的哪个特定资源。

这是可能的还是资源实现的限制之一?

【问题讨论】:

    标签: resources simulation release anylogic


    【解决方案1】:

    我可以根据情况想出很多方法来做到这一点...第一个是在发布之前使用 selectOutput 来确定是否发布。 selectOutput 将检查它是否是要释放的正确资源

    另一种选择,如果你想以相同的释放块但以给定的顺序释放所有东西,你可以在释放块之前放置一个等待块,等待合适的时机释放资源

    还有一个,就是使用wrap up动作,在wrap up中放一个等待块,等待其他资源到达后再释放,从而按顺序释放

    【讨论】:

    • 感谢 Felipe,我不确定这是否适合我,因为我从同一个 ResourcePool 中获取了多个资源。所以我真的很想能够控制从同一个 ResourcePool 中释放哪些资源。
    • 这正是我在这里提出的解决方案...但是根据您的情况,您需要定义我提供的 3 个选项中的哪一个效果最好...。停下来想一想仔细考虑一下……你会发现它工作得很好……你需要添加一些代码
    • 抱歉,我没看到。我正在努力理解的问题是 Release 块,它只为您提供从给定 ResourcePool 中释放资源的能力,而不是从池中释放特定资源的能力。
    • 这取决于..您想对占用资源的代理做什么...您希望它在没有资源的情况下继续在没有资源的情况下释放资源(我的回答中的解决方案 3),您希望它继续使用资源以在流程中找到不同的释放时刻(解决方案 1),或者您希望它在释放之前等待(解决方案 2)
    • 如果你想要解决方案 1 之类的东西,那么 Jaco 的回答也是一种选择
    【解决方案2】:

    使用标准占用块释放特定资源的唯一方法是指定要释放在特定占用块中占用的资源

    这意味着您需要尽可能多的抓取和释放块来控制释放过程。即,如果您占用 5 个资源类型并希望在流程图过程中一个接一个地释放它们,您将需要 5 个占用块和 5 个释放块。

    【讨论】:

    • 谢谢 Jaco,有点麻烦,但它可以工作。我怀疑,当您说要释放在特定占用块 A/L 中占用的资源时,实际上只是查看了占用块从中占用的资源池,而不是被占用的实际资源。不过我会尝试这个选项。
    • 确实很麻烦。我们过去已经构建了自己的资源管理器,但它需要进行大量测试以确保您正确管理资源和代理的获取和释放,但最终,它非常灵活,您可以让它完全按照你要。您可能还想查看这个答案,了解如何保存被没收的资源stackoverflow.com/questions/68631813/…
    • "我怀疑当您说要释放在特定占用块 A/L 中占用的资源时,实际上只是查看了占用块从中占用的资源池,而不是实际被没收的资源。”它没有:它确实按照它所说的去做(释放在该 Seize 块中占用的确切资源集,这些资源可能来自任意数量的池和每个池中的任意数量的资源)。
    【解决方案3】:

    以前对我们有用的一种方法是使用单独的代理来获取资源。比如:

    1. 假设有主代理WorkItem 那么
    2. 当需要资源时,Split 块用于生成一个名为 ResourceHolder 的新代理
    3. 新的ResourceHolder 然后使用普通的Seize 抓取资源
    4. 之后,携带该单元的ResourceHolder 使用Combine 重新加入WorkItem

    ResourceHolder 必须存储在WorkItem 中的某个位置,并且应该能够识别它所承载的资源单元(即原始资源池、资源类型、何时获取等) .然后当只需要释放一个特定的资源单元时,模型需要在WorkItem 中找到正确的ResourceHolder 并通过Release 块运行它。这有点麻烦,但绝对可以很好地控制发布逻辑。

    【讨论】:

    • 嘿Artem,我认为这适用于我的用例。我会尝试实施它并回复您。
    • 感谢 Artem,我已经实施了这种方法,它对我来说非常成功。在我的用例中,使用同一个 Seize 块来获取多个资源,因此唯一对我有用的解决方案是让“ResourceManager”代理获取资源,然后将其自身附加到我的流程图代理(实际上 ResourceManager 只是添加到集合在流程图代理中)。
    猜你喜欢
    • 1970-01-01
    • 2021-09-10
    • 2021-04-04
    • 2012-01-08
    • 2012-05-04
    • 1970-01-01
    • 2017-05-17
    • 2021-09-06
    • 2020-11-09
    相关资源
    最近更新 更多