求助:AnyLogic中Agent1注入时机优化实验搭建方案
AnyLogic优化实验搭建方案:Agent1注入时机与Agent2动态对齐
核心思路
你的需求完全可以实现,核心是分两步实验闭环:先采集Agent2的到达数据,再基于数据精准调度Agent1的创建,最终实现无过剩Agent1前提下的装配率最大化。
第一步:采集Agent2到达数据
- 在Agent2进入装配队列的触发逻辑中,添加代码记录每个Agent2的到达时间:
- 新建全局列表
agent2ArrivalTimes(类型为double),在Agent2进入队列的事件中执行:agent2ArrivalTimes.add(time()); - 也可直接写入外部Excel表格,方便后续读取:
writeToExcelFile("agent2_arrival_data.xlsx", "Sheet1", time(), rowIndex++);
- 新建全局列表
- 运行一次基础实验,完整采集所有Agent2的到达时间序列。
第二步:基于采集数据调度Agent1创建
- 读取第一步采集的时间数据:
- 若用全局列表可直接调用;若用Excel,用内置函数读取到列表:
List<Double> agent2Times = readExcelFile("agent2_arrival_data.xlsx", "Sheet1", 0);
- 若用全局列表可直接调用;若用Excel,用内置函数读取到列表:
- 计算Agent1最优注入时间:对每个时间点减去固定加工时长50天,得到
agent1CreateTime = agent2Time - 50。 - 调度Agent1创建:
- 使用
Schedule块:将计算好的时间序列导入Schedule的时间列表,设置每个时间点创建1个Agent1。 - 或用自定义事件循环:实验启动时遍历时间列表,为每个时间点创建延迟事件:
for(double createTime : agent2Times) { if(createTime > 0) { create_Agent1(createTime - time()); } }
- 使用
- 配置Agent1加工流程:设置固定50天加工时长,完成后直接进入装配队列,确保和对应Agent2同步到达Assembler。
关键约束与验证
- 避免Agent1过剩:严格按照1:1比例,每个Agent2对应创建一个Agent1,无额外创建逻辑。
- 装配率最大化:Agent1加工完成时间与Agent2到达装配队列时间完全匹配,Assembler可立即启动装配,无等待延迟。
- 适配可变到达:每次实验前重新采集Agent2到达序列,生成对应Agent1调度计划,完全适配外部表定义的可变到达率。
可选优化:实时动态调度(无需预运行采集)
若不想分两次实验,可直接基于已知的外部表数据实现端到端调度:
- 模型初始化时读取外部表中所有Agent2的到达时间戳。
- 直接计算Agent1的创建时间,实验启动时一次性调度所有Agent1的创建事件。
- 该方式无需预运行,前提是外部表的Agent2到达时间在实验前已明确。
内容的提问来源于stack exchange,提问作者ThisMyUserName
相关产品推荐
相关产品推荐

