如果目的地被占用,防止源块生成代理

Posted

技术标签:

【中文标题】如果目的地被占用,防止源块生成代理【英文标题】:Preventing source blocks to generate agents if destination is occupied 【发布时间】:2019-07-06 16:42:57 【问题描述】:

我正在尝试为 1 个包装中的 5 件物品创建一个包装单元;从资源(工人)中取出 5 件物品并放入生成包装的包装机中;传送带将包裹从机器移动到缓冲区,每隔一段时间(比如每 20 个包裹),工人就会停止拣货并前往缓冲区,将所有包裹放入一个盒子中,理想情况下准备好发货。一旦工人完成了盒子,他必须回到他的拾取和放置任务。

现在,我的问题是:

    当worker停止从 rackSystem 中挑选物品并进入缓冲区时,source blocks 必须停止生成代理,否则模拟将停止说 rack 中没有可用的单元格; 当工人回到他的拣货任务时,源块必须重新开始生成代理。

使用图片中的保持块,当工人停止从架子上取货时,我设法停止了源块,无论如何,当盒子完成后,我无法重新开始该过程。我该怎么做?

除了工人返回拣货地点并从货架上取走最后 5 件物品外,一切都正常,不再允许代理进入货架。

【问题讨论】:

这是我在保持块中输入的内容:模式:条件阻塞条件:rackSystem.hasSpace() == false 【参考方案1】:

实际上从这个设置来看,我认为你应该这样做:

    让您的来源不断创建代理。实际上(我想)事情也不会因为工人在做其他事情而停止。 将所有代理聚集在一个无限队列中,就像你做的那样 移除保持块 相反,让您的 RackStore 和 RackPick 对象使用工作资源池(勾选下面的框并选择您的资源池)

您可能还需要使用“自定义资源选择”选项,以确保您的工作人员仅在 RackSystem 有空间时尝试存储项目,但如下所示:

【讨论】:

我的 rackPick 块已经使用了资源池,而不是 rackStore 块(这是因为实际上该任务没有分配给同一个工作人员)。我会尝试使用自定义资源选项,我没有考虑过该选项。引入保持块(通常用于停止源块生成代理)的主要原因是,当我运行模型时,我不断收到相同的错误“机架中没有可用的单元”。感谢您的帮助! 我知道,“机架中没有可用的单元格”是一种痛苦。很抱歉一直把你送到不同的方向。您是否尝试过用“等待”对象替换队列。同时移除保持对象。并且只有 RackPick 的 OnExit(在代理离开机架系统之后)调用“myWaitObject.free(1)”。这应该适用于您的情况 不用担心。我尝试了等待块,但它告诉我“Wait 类型中的方法 free(agent) 不适用 :( 我不太明白这意味着什么,所以我回到了队列保持结构。

以上是关于如果目的地被占用,防止源块生成代理的主要内容,如果未能解决你的问题,请参考以下文章

在代理内部设置到达 XYZ 的源位置

使用 .inject() 时指定代理属性

为什么代理属性设置成assign为了防止生成保留环来

什么是CC攻击,如何防止网站被CC攻击?

AnyLogic:在模拟启动时用代理填充托盘架

jdk动态代理实现原理总结