You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在AnyLogic的Source块中按1、2、3循环顺序生成智能体?

实现AnyLogic中智能体按1-2-3循环批量生成的方法

嘿,这个需求我之前做项目时刚好碰到过,用AnyLogic的Source块配合几个简单的全局变量就能轻松搞定,给你一步步拆解实现步骤:

第一步:设置全局变量跟踪批量大小

先在模型里建两个整数型全局变量:

  • batchSize:用来控制每次要生成的智能体数量,初始值设为1
  • batchCounter:用来记录当前循环到第几轮,初始值也设为1

当然,要是想更简洁,后面我会给你一个只用单个变量的写法~

第二步:配置Source块的生成规则

选中你的Source块,按下面的步骤改配置:

  1. 把「Generation type」改成**「Number of agents」**,然后在「Number of agents」输入框里填batchSize——这样每次触发生成,就会造出对应数量的智能体。
  2. 把「Trigger type」改成**「Event-based」**,然后点击「Add event」,在弹出的事件窗口里的「Action」栏写这段代码:
// 生成完当前批次后,更新下一轮的批量大小
batchCounter++;
if(batchCounter > 3){
    batchCounter = 1;
}
batchSize = batchCounter;
// 这里设置下一次生成的间隔时间,我写的是1秒,你可以根据自己的需求改
scheduleEventIn(1, TimeUnit.SECONDS, this, "generateAgents");
  1. 别忘了去Source块的「Advanced」选项卡,勾选「Allow multiple generation events」——不然只能触发一次生成,循环不起来。

第三步:触发第一次生成

光配置好还不够,得让模型启动时就开始生成。找到Main代理的「On startup」事件,加一行代码:

source.generateAgents();

(这里的source是你Source块的名字,要是你的块叫别的,记得替换成实际名称)

更简洁的单变量写法(可选)

要是觉得两个变量麻烦,用一个变量就能实现循环:
建一个全局整数变量currentBatch,初始值1。然后把第二步里的事件代码换成:

// 自动循环1→2→3→1...
currentBatch = currentBatch % 3 + 1;
// 同样设置生成间隔,按需调整
scheduleEventIn(1, TimeUnit.SECONDS, this, "generateAgents");

是不是清爽多了?

小提醒

  • 生成间隔时间(scheduleEventIn的第一个参数)一定要根据你的模型需求调整,比如改成5秒、10秒都可以。
  • 如果需要给生成的智能体初始化属性(比如设置ID、状态),可以在Source块的「On exit」事件里加代码,比如agent.id = someId;之类的。

内容的提问来源于stack exchange,提问作者Tania Furcha

火山引擎 最新活动