当前位置: 首页 > 知识库问答 >
问题:

启动时的Anylogic代理创建顺序

燕志学
2023-03-14

我有一个代理“Tankfarm”,它是一个有一定规则的罐的集合,这些罐的装满顺序或产品的使用等。这些罐的数量(可见或不可见)和初始内容--它们包含的流体类型和此类流体的数量,等等,都是在模型启动时从Excel表格中读取的。“产品”本身是由一个代理定义的,该代理在启动时从另一个Excel表中读取产品列表,每个产品都有其属性。

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

所以现在,模型被配置为“Products”代理的“on startup”事件从Excel读取其内容。然后,它有一个嵌入式功能,当用户传递ProductID时,设置不同产品的颜色。

“tankfarm”的“on startup”事件类似地读取带有tankfarm设置的Excel文件。然后它运行一个函数来设置所有坦克的初始条件(也在“启动时”)。因此,它现在设置所有参数,其中包括PRODUCTID参数,执行tank.set_capacity()和tank.set_initialamount()等。Anylogic“tank”对象将其InitialBatch设置为参数“PRODUCTID”,将InitialBatchColor设置为products_agent.setcolor(PRODUCTID)(用户传递PRODUCTID时返回颜色的自定义函数)。都很好。

现在出现的问题如下:当Anylogic启动模型运行时,它会在创建PRODUCTS对象之前创建TANKFARM对象。然后在运行PRODUCTS“on startup”事件之前运行TANKFRAM“on startup”事件(因此Excel文件的读取顺序不对)。因此,当TANKFARM执行代码来设置油箱中的初始数量时,产品列表(及其颜色)还不存在,因此,油箱中初始产品量的颜色没有正确设置--在分配customInitialBatch时,产品列表仍然为空。

在设置InitialAmount之后,我找不到更改customInitialBatchColor的方法。

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

共有1个答案

樊烨烨
2023-03-14

这是AnyLogic中的一个模糊区域,因为您无法显式更改代码执行的顺序:

  • 其中一些是由您的模型结构规定的(父级总是在子级之前创建的)
  • 有些来自于您拖放东西的顺序(主...上的几个座席群体)

最简单的解决方案:通过不将自定义的“onstartup”代码写入您的单个代理和其他位置来覆盖此类问题。把它全部放在主上的1个可控功能中。

更多的选项,真的取决于您的具体设置

 类似资料:
  • 对于基于Anylogic Agent的建模,如果您创建了代理的总体(例如MyAgent和MyAgent分别是类型和总体),但在设计时和模型最初运行时将其保留为空,则假设它们是通过使用inject函数创建的。当模型通过模型的逻辑通过inject创建它们时,population-myagents仍然保持为空。这些特工的人口在哪里?我知道他们的存在,因为我可以数数他们,访问他们的财产。如何访问该组的特定

  • 对于托盘架系统的模拟,我想用代理预填充该系统(例如,给出80%的填充等级)。在此之后,预填充框应该由不同的源块产生。 我认为在理论上,我可以在main方法中使用命令palletrack.put(int行,int位置,int级别,boolean leftAisle,Agent Agent),手工添加一个Agent。 提前多谢。

  • 如果我们以excel文件或数据库的形式向anylogic提供初始数据,以便它可以填充延迟、资源池等块,那么anylogic是否可以自动建模。

  • 我正在开发一个模型来评估动物种群控制的不同干预措施。我试图使用自定义分发来分配代理在创建或稍后添加到总体时应该处于的状态。 我做了以下工作 我创建了一个选项列表,列出了模型中的所有状态 我为初始人口创建了一个自定义分布,使用选项列表为每个州分配代理的初始人口分布3我为移民创建了第二个自定义分布(因为代理将在整个模拟过程中定期添加到人口中),使用相同的选项列表但具有不同的分布值。 对于第一次超时转换

  • null 我只是不明白为什么表数据不能通过PED在运行时使用?是否必须执行另一个映射步骤来将数据推送到ped Agnets? 在这一点上我陷入了僵局。我希望这个问题描述得更清楚,并感谢您的反馈。

  • Any逻辑:这应该很简单,但我只是在帮助文件中找不到它...在创建一个新的代理实例时,我们知道有四个参数以及它们是什么,但不知道它们是以什么顺序定义的。假设参数是“type_of_car”(字符串)、“number_of_pax”(整数)、“自动”(布尔值)、“fuel_capacity”(双精度)。现在调用时:代理被创建为具有55 pax、手动和5升燃料容量的ford——这都是错误的。(似乎代理