【问题标题】:How to instantiate an Agent via code in Anylogic如何通过 Anylogic 中的代码实例化代理
【发布时间】:2022-02-11 03:37:05
【问题描述】:

我在使用 Anylogic 时遇到问题:我正在编写一个函数,我需要在其中声明一个已经存在的 Agent 类型的新项目。 如果我用代码声明它:

MyAgent name = new MyAgent();

一切正常,但是当我尝试执行一个函数来更改内部值的值时,

name.func();

它给了我一个NullPointerException,因为声明的MyAgent 的内部变量似乎不存在。 我错过了什么? 非常感谢您的帮助

【问题讨论】:

  • func() 里面有什么?请在问题中添加屏幕截图。

标签: anylogic


【解决方案1】:

当您有一个人口时,请使用 add_myAgents() 方法,但如果您不想使用已定义的人口,则必须这样做:

MyAgent m=new MyAgent();
m.createAndStart(anyAgent);
m.lognormal(0.1,0.1,5);

createAndStart 为您创造奇迹。

anyAgent 实际上可以是您模型的任何现有代理(例如 main),无论您在其中放置什么,仍然会在您的顶级代理的默认群体中创建群体。

【讨论】:

  • 没有人口有什么好处吗? createAndStart() 将产生相同数量的开销(我假设),因此不会节省内存……还是有?
  • 我认为有时它更方便,因为我不想到处都有人口......我认为没有任何节省内存的机会,除非你创建很多实例并且想要只初始化其中的一部分,而可能丢弃其他的
  • IMO 做超出 AnyLogic 标准功能范围的事情会变得很危险......(当你开始使用多线程和控制 UI 时请相信我)所以如果没有明显的好处我不建议这样做......这可能会让你付出代价......但如果你知道你在做什么,那就去做吧! (这意味着你费利佩 ;-))
  • 我的意思是,这样做肯定很危险..如果您忘记创建和启动,可能会发生可怕的事情,而且记住它并不明显......从这个角度来看, add_population 方法更安全,但在某些场合我还是会使用这种方法
【解决方案2】:

某些函数在以编程方式创建的代理中不可用,例如默认随机数生成器和传递给代理的某些其他实用程序函数。

所以如果你这样做,例如它不会工作,你会得到一个 NPE(空指针异常)

宁可总是使用人口 - 除非你知道你不会使用任何这些内部功能。

MyAgent name = add_myAgents();

myAgents 是一个人口。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-25
    • 2014-12-13
    • 2021-09-10
    • 2015-09-26
    • 2015-10-22
    • 1970-01-01
    • 2021-10-30
    • 2017-07-30
    相关资源
    最近更新 更多