You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在AnyLogic中通过数据库表动态设置行人数量与速度?

在AnyLogic中关联数据库行人数据的解决方案

先说说你原有代码的问题

  • 每次行人从PedSource出来都执行一次数据库查询,重复操作效率低,还可能导致数据不一致
  • 只设置了速度,但没把pid和行人绑定起来,没法实现真正的“数据关联”

正确实现步骤

1. 提前加载数据库数据到模型

不要每次生成行人都查库,在模型启动时一次性把15条数据加载到全局变量里:

  • 先在Main代理中创建一个全局列表,用自定义类存数据更清晰:
    1. 新建一个简单类(右键模型根节点 → 新建 → 简单类),命名为PedestrianInfo,添加两个属性:String pid、double speed,并生成对应的getter/setter方法
    2. 在Main代理中定义全局变量:List<PedestrianInfo> pedDataList = new ArrayList<>();
    3. 在Main的onStartup事件中添加加载代码:
      // 一次性查询所有数据
      List<Object[]> rows = executeQuery("SELECT pid, speed FROM table");
      for(Object[] row : rows){
          PedestrianInfo info = new PedestrianInfo();
          info.setPid((String)row[0]);
          info.setSpeed((Double)row[1]);
          pedDataList.add(info);
      }
      

2. 给行人Agent添加关联属性

打开你用的行人Agent(默认是Pedestrian,如果是自定义代理就打开自定义Agent),添加一个String pid属性,用来存储数据库里的pid(速度可以直接用Agent自带的comfortableSpeed)。

3. 修改PedSource的onExit事件代码

直接用提前加载的列表,给每个行人绑定对应的数据:

// 确保当前生成的行人索引不超过数据列表长度
if(getIndex() < main.pedDataList.size()){
    PedestrianInfo info = main.pedDataList.get(getIndex());
    // 绑定pid
    ped.pid = info.getPid();
    // 设置自定义速度
    ped.comfortableSpeed = info.getSpeed();
}
// 如果行人数量超过15条,可在这里设置默认速度
else{
    ped.comfortableSpeed = 1.3; // 默认速度,按需调整
}

4. 限制行人数量(可选)

如果你只需要生成15个行人,直接在PedSource的属性里设置最大数量为15,这样就不会出现索引超出的情况。

验证关联效果

可以在行人的onDraw事件里添加代码,把pid显示在行人上方,确认关联是否成功:

drawText(pid, getX(), getY()+1, Color.BLACK);

内容的提问来源于stack exchange,提问作者Jaskirat Singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 04:22:42