启动时Anylogic代理创建顺序

问题描述 投票:0回答:1

我有一个代理商“ TANKFARM”,它是一系列储罐的集合,这些储罐具有关于其填充顺序或产品使用方式等的某些规则。这些储罐的数量(可见或不可见)和初始内容-模型启动时,将从Excel工作表中读取其中包含的流体类型以及此类流体的量等。 “产品”本身是由代理定义的,该代理在启动时会从另一个Excel工作表中读取产品列表,每个产品及其属性。

因此,在一次模拟运行中,产品可能是不同等级的汽油。在下一次运行中,可能是化学药品等。储罐场中的初始内容(产品和初始体积)也可能因一次运行而不同(在电子表格中为每个模拟运行定义)

因此,现在配置模型,使“ PRODUCTS”代理的“启动时”事件从Excel读取其内容。然后,它具有嵌入式功能,可以在用户通过productID时设置不同产品的颜色。

“ TANKFARM”的“启动时”事件类似地读取带有tankfarm设置的Excel文件。然后,它运行一个功能来设置所有储罐的初始条件(也在“启动时”中)。因此,它现在设置所有参数,其中包括PRODUCTID参数,是否执行tank.set_capacity() & tank.set_initialAmount()等。Anylogic“ tank”对象的InitialBatch设置为参数“ PRODUCTID”,InitialBatchColor设置为PRODUCTS_AGENT.setColor(PRODUCTID)(在以下情况下返回Color的自定义函数:用户传递一个ProductID)。很好。

现在出现的问题如下:当Anylogic开始模型运行时,它将在创建PRODUCTS对象之前创建TANKFARM对象。然后,它在运行产品“启动时”事件之前运行TANKFRAM“启动时”事件(因此,Excel文件的读取顺序错误)。因此,当TANKFARM执行代码以设置罐中的初始数量时,产品列表(及其颜色)尚不存在,因此,罐中的初始产品体积的颜色设置不正确-在此时,获取customInitialBatch的分配,产品列表仍然为空。

设置了InitialAmount后,我找不到改变customInitialBatchColor的方法。

所以...有没有办法改变代理的创建顺序,或者改变不同代理的“启动时”事件的调用顺序? (或..在“启动时”事件中读取所有内容并进行设置后,是否可以更改初始批次(流体的颜色)?)

fluid anylogic createprocess
1个回答
1
投票

这是AnyLogic中一个阴暗的区域,因为您不能显式更改代码执行的顺序:

  • 其中一些是由您的模型结构规定的(父母总是在孩子之前创建的]
  • 有些来自您将事物拖入的顺序(Main上的几个业务代表人口...]

最简单的解决方案:通过不将自定义的“ OnStartup”代码写入您的各个代理和其他位置来覆盖此类问题。将它们全部整合到Main的1个可控制功能中。

或者,在TANKFARM之后使用事件手动创建产品。

或者,如果PRODUCTS和TANKFARM都位于Main上,请尝试将它们全部删除,然后按照需要的顺序重新创建它们的种群。这将更改代码执行...

更多选项,实际上取决于您的特定设置

© www.soinside.com 2019 - 2024. All rights reserved.