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

AnyLogic PLE版:模拟启动前在节点显示集装箱代理的方法咨询

AnyLogic船舶集装箱卸船模拟问题解决方案

1. 启动前在矩形节点显示集装箱代理

直接在模型的启动事件(Main的on startup)中手动创建并放置代理:

  • 假设集装箱代理类型为Container,目标矩形节点为rectNode
  • 在on startup中添加代码:
    // 创建单个集装箱代理并定位到节点中心
    Container container = new Container(this);
    container.setLocation(rectNode.getX() + rectNode.getWidth()/2, rectNode.getY() + rectNode.getHeight()/2);
    add_agent(container);
    
    // 若需多个,循环创建即可
    // for(int i=0; i<5; i++){
    //     Container c = new Container(this);
    //     c.setLocation(rectNode.getX() + 20*i, rectNode.getY() + rectNode.getHeight()/2);
    //     add_agent(c);
    // }
    

2. Source模块的「arrivals defined by」设置

根据卸船场景需求选择对应选项:

  • 批量初始到达:选择Number of arrivals,输入需要的代理数量,将Arrival mode设为At time 0,启动时一次性生成所有指定代理(注意和手动创建的代理避免重复)
  • 按时间间隔到达:选择Inter-arrival time,输入时间表达式(如uniform(0.5, 2)表示0.5-2秒到一个集装箱),模拟持续卸船的节奏
  • 自定义到达时间:选择Arrival schedule,可导入时间表格或编写代码控制到达节点,匹配真实卸船的时间规律

3. AnyLogic PLE版本无代理种群的替代方案

PLE版不支持Agent Population组件,用以下两种等价方案:

方案一:集合+启动逻辑手动管理

在Main中创建List<Container>类型的集合(命名如containerInventory),在on startup中循环创建代理并加入集合:

containerInventory = new ArrayList<>();
int initialCount = 8; // 初始集装箱数量
for(int i=0; i<initialCount; i++){
    Container c = new Container(this);
    c.setLocation(rectNode.getX() + 30*i, rectNode.getY() + rectNode.getHeight()/2);
    add_agent(c);
    containerInventory.add(c);
}

后续可通过集合实现代理的遍历、筛选、状态管理,完全替代种群功能。

方案二:Source模块批量生成

将Source的arrivals defined by设为Number of arrivals,输入初始数量,Arrival mode设为At time 0,并在Source的On exit事件中添加定位代码:

// 将生成的代理直接移动到目标节点
agent.setLocation(rectNode.getX() + rectNode.getWidth()/2, rectNode.getY() + rectNode.getHeight()/2);

内容的提问来源于stack exchange,提问作者Azzurra Baroncini

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 03:37:34