我正在尝试模拟 QUEST 在为某个部分查询缓冲区时所做的事情。在那里,如果该部分不在缓冲区中,则请求处于未决状态,如果一个部分到达缓冲区,则将其释放给请求它的机器。我还在另一个 DES 引擎 SimPy 中看到了这种行为。
我似乎无法在 AL 中找到一种简单的方法来做到这一点。队列块有以下方法:
- release(agent):如果没有指定的代理,将返回 false 并忘记请求
- remove(agent):如果队列中没有代理,将返回 null
所以这些方法不会做我想要的......它变得有点复杂,因为队列包含带有参数的代理并且我想请求一组特定的参数(假设代理有一个可以从 1 开始的数字参数到 3,如果此参数的值为 2,我只对队列中的代理感兴趣)。还有一系列代理同时从队列中拉出这些代理,我想设置一个优先级(比如说 FIFO),所以我尝试了一些事情但没有让我无处可去:
- 使用占用块而不是队列并将代理添加到占用块中的嵌入式队列。-> 我找不到以与缓冲区块不同的方式从缓冲区中获取的正确方法(因此我移至选项 2),但获取确实有一个有希望的自定义资源选择,可以帮助参数向下选择
- 使用占用块并将代理作为资源存储在池中。动态创建资源,抓住适当的资源等问题......
- 创建从队列返回 null 的请求队列。这听起来有点矫枉过正,但我会调查一下
对于其他模拟软件中如此简单的事情,所有这些似乎都有些复杂,所以我想知道我是否遗漏了什么,或者是否有人以前遇到过这个问题