繁体   English   中英

如何在 Anylogic 中访问资源中的变量?

[英]How to access variables in a resource in Anylogic?

我正在尝试模拟通过船舶运输货物。 该图应该工作的方式是,船舶代理应该以部分随机的间隔从源生成一定数量的供应,存储在附加到代理的变量中。 然后,在转移到码头后,它开始将其供应品装载到码头上。

Anylogic 图的图像

我用资源池建模了码头,因为有两个码头,所以他们可以同时服务两艘船。 但是,我也希望这些码头有容量。 每当一艘船在码头装载时,我需要从码头的容量中减去船上的补给品,以跟踪它可以再带多少补给品。 我试图在服务中这样做,但它只识别代理的变量,而不是资源的。

最后,我希望船舶源下的交付器源在每次码头容量达到某个值时创建一个交付器,而不仅仅是随机时间间隔。 在线搜索告诉我使用inject()方法,但我不知道如何在其自身之外的任何地方调用它。

任何帮助将不胜感激,我在这方面还是新手。 谢谢!

是每个码头的总容量还是单个容量? 如果它只是总容量,我会在main中创建一个可变capacity并从中减去ship代理内部的数量。 例如,您可以在服务块的“退出时”字段中执行此操作,代码类似于

dockCapacity=dockCapacity-agent.amount

其中 agent 是流经流程块的ship代理

如果您想为每个停靠创建单独的容量,您可以为 resourcePool 创建一个自定义代理类型,并在此类型中添加您需要的变量。 然后,您可以使用unit而不是agent访问 resourcePool 的操作字段和服务块的几个操作字段(字段之前的灯泡告诉您可以使用哪些类型)中的这些变量。 请注意,作为初学者,这可能有点复杂,因此您可能需要先遵循一些 AnyLogic 教程,然后才能弄清楚这一点。

使用单个容量的另一种方法是使用 serviceblock 方法getResourceUnits()并将使用中的单位与每个码头的容量变量进行比较(您可以将其放在main中)。 但到目前为止我从未使用过这个。

对于最后一点,您可以使用以下代码:

if(dockCapacity<10)Deliver.inject(1);

在这种情况下,如果上限。 低于 10,每次调用此函数时,都会通过 Deliver 块注入 1 个代理。

祝你好运!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM