【发布时间】:2020-09-09 05:03:44
【问题描述】:
我有一个代理“TANKFARM”,它是一组罐子,这些罐子的填充顺序或使用它们的产品等具有一定的规则。这些罐子的数量(可见或不可见)和初始内容- 当模型启动时,它们包含什么类型的流体以及这种流体的量等都是从 Excel 表中读取的。 “产品”本身是由一个代理定义的,该代理在启动时从另一个 Excel 表中读取产品列表,每个产品都有其属性。
因此,在一次模拟运行中,产品可能是不同等级的汽油。在下一次运行中,可能是化学品等。罐区中的初始内容(产品和初始体积)也可能因运行而异(在每个模拟运行的电子表格中定义)
现在,模型配置为“PRODUCTS”代理的“启动时”事件从 Excel 读取其内容。然后它有一个嵌入函数,当用户通过 productID 时设置不同产品的颜色。
“TANKFARM”的“启动时”事件类似地读取带有 tankfarm 设置的 Excel 文件。然后它运行一个函数来设置所有坦克的初始条件(也在“启动时”)。所以它现在设置所有参数,其中 PRODUCTID 参数,tank.set_capacity() & tank.set_initialAmount() 等。Anylogic“坦克”对象的 InitialBatch 设置为参数“PRODUCTID”,InitialBatchColor 设置为PRODUCTS_AGENT.setColor(PRODUCTID)(自定义函数在用户传递一个 ProductID)。一切都好。
现在问题来了: 当 Anylogic 开始模型运行时,它会在创建 PRODUCTS 对象之前创建 TANKFARM 对象。然后它在运行 PRODUCTS“启动时”事件之前运行 TANKFRAM“启动时”事件(因此 Excel 文件以错误的顺序读取)。因此,当 TANKFARM 执行代码以设置罐中的初始数量时,产品列表(及其颜色)尚不存在,因此罐中初始产品体积的颜色没有正确设置 - 在customInitialBatch 得到分配,产品列表仍然是空的。
在设置 InitialAmount 后,我找不到更改 customInitialBatchColor 的方法。
那么...有没有办法改变代理的创建顺序,或者不同代理的“启动时”事件被调用的顺序? (或者……有没有办法在“启动时”事件中读取并设置所有内容后更改初始批次(流体的颜色)?)
【问题讨论】:
标签: fluid anylogic createprocess