【问题标题】:Anylogic- Placing agents on other agent's locationAnylogic-将代理放置在其他代理的位置
【发布时间】:2021-04-10 22:49:04
【问题描述】:

我有两个代理,agentA(evStations)(初始位置和号码从数据库加载)和一个 AgentB(eVs)(最初为空,代理的数量由用户指定)。

在模型启动时,我想将 AgentsB 放置在 AgentA 的位置(精确的纬度和经度)。我怎样才能做到这一点? 知道 AgentB 的数量远大于 AgnetA。

我尝试过的(基于现有的 anylogic 示例),在 main> 代理操作> 在启动时

for(EV ev: eVs){
    ev.set_lat(
        selectFrom(evstations)
            .where(evstations.id.eq(ev.getIndex()))
            .firstResult(evstations.latitude)
    );
    ev.set_lon(
        selectFrom(evstations)
            .where(evstations.id.eq(ev.getIndex()))
            .firstResult(evstations.logtitude)
    );
    ev.setLocation(ev.lat, ev.lon);
}
        [enter image description here][1]

我不确定如何正确执行此操作,我认为这仅在两个代理具有相同大小时才有效。 请指教?

谢谢

【问题讨论】:

  • 如果 agentAs 为 100,agentB 为 150,则可以将前 100 个放在相同的位置,但其他 50 个要放在哪里?
  • 反之,agentA大约有10个位置,而agenB是50个。我希望B的50个agent随机分布在agent B的10个位置中。
  • 那不是相反的:P
  • 哦,是的,你是对的。
  • agentA 大约有 10 个位置,而 agenB 是 50。我希望 B 的 50 个代理分布在代理 B 的 10 个位置中。不一定是随机分布的,例如一个 agnetB 有 10 个和其他只有 3. 我该怎么做?

标签: anylogic agent


【解决方案1】:

首先将所有 evStation 定义为代理,您可以从数据库中读取它们。

然后

for(EV ev: eVs){
    EvStation evs=evStations.random();
    ev.setLocation(evs);
}

【讨论】:

  • 谢谢,但我认为它不起作用。当我编写另一个函数来检查 ev 是否​​在 evStation 时, (for( EV ev : eVs ){ if (commuter.evDestination1.distanceByRoute( ev ) == 0) commuter.ev=ev; return false;) 但它没有返回预期值。
  • 我认为您的问题有所不同...我不知道通勤者是什么所以我无法帮助您
猜你喜欢
  • 2020-10-19
  • 2018-11-06
  • 2018-01-17
  • 2021-02-16
  • 2021-05-19
  • 2019-02-11
  • 2020-12-09
  • 2014-12-26
  • 1970-01-01
相关资源
最近更新 更多