给定名称后如何获得代理?

How to get an Agent when given its name?

我的模型中定义了大量代理。它们表示已定义为 GISRegion 地图对象的区域,并通过“从节点开始”选择器 linked 到地图对象。在 AnyLogic Main 代理的 Java 函数中,我正在从 csv 文本文件中读取代理名称列表及其参数。在以前的模型中,我使用这种配置文件来生成代理群体。但是,在这种情况下,代理是预定义的,配置文件中的名称用于 link 代理的参数。 我发现了几个 Agent 函数,它们将根据与位置或其他代理的接近程度来获取代理。但是,我还没有找到任何方法来获得代理人的名字。是否有 returns 代理的函数,以便我可以设置其起始参数值? 我希望是这样的:

String agentName = “AnAgentName”;
Agent theAgent = get_Main().getAgent(agentName);

其中“AnAgentName”是现有代理之一的名称。

人口中的代理没有名称,只能通过人口中的索引访问它们 (main.myPopuluation.get(x))。

但是,如果您的代理有一个参数 p_Name,您可以遍历总体以找到具有特定名称的那个:findFirst(main.myPopulation, p->p.p_Name.equals"SomeName"),假设该名称对于每个代理都是唯一的。

希望这是您所需要的(仍然不完全清楚 ;-))。

如果您在创建代理的同时将它们添加到 collection (LinkedHashMap),这很容易。例如,如果您的 Agent 是 Person 类型,则使用这些参数创建一个集合(Palette Agent):

Name: myCollection
Collection class: LinkedHashMap
Key elements class: String
Value elements class: Person

现在,当您为人们创建新的代理时,请将相应的代理添加到集合中。例如:

Person p;

p = add_people();

p.set_name("Ant-Man");
p.set_size(1.8);

if (!myCollection.containsKey(p.name))
    myCollection.put(p.name, p);

traceln("Ant-Man is " + myCollection.get("AntMan").size + " tall");