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

AnyLogic供应链模型:司机随机开工与固定轮休约束配置求助

AnyLogic司机排班约束解决方案

针对你16司机、10卡车的供应链模型,要实现随机开工日、固定做五休二排班,同时输出最优方案,直接用自定义状态控制比依赖静态Schedule更灵活,以下是落地步骤:

一、给司机代理绑定排班属性

新建Driver代理类,添加3个属性:

  • int startDay:随机开工日(0=周一,1=周二…6=周日,可按你的时间规则调整)
  • List<Integer> workDays:预计算的固定工作日索引列表
  • boolean isWorkingToday:当日是否可用

二、模型启动时初始化所有司机排班

在Main的On startup事件中写入:

// 遍历资源池内所有司机
for(Driver d : driversPool.getAgents()){
    // 随机生成开工日
    d.startDay = uniformInt(0, 6);
    // 计算连续5天的工作日(循环7天周期)
    d.workDays = new ArrayList<>();
    for(int i = 0; i < 5; i++){
        d.workDays.add( (d.startDay + i) % 7 );
    }
}

三、每日更新司机可用性

添加一个每日触发的Event(命名dailyUpdateDriverStatus),首次触发设为模型启动时,重复间隔24小时,事件代码:

// 获取当天的星期索引(0=周一…6=周日,根据你的时间配置调整)
int currentDay = (int)timeToDayOfWeek(getTime(), true);
// 更新每个司机的可用状态并同步到资源池
for(Driver d : driversPool.getAgents()){
    d.isWorkingToday = d.workDays.contains(currentDay);
    driversPool.setAgentAvailability(d, d.isWorkingToday);
}

四、限制订单仅调用可用司机

  • 用Seize块时,在资源池的Filter条件中填写:agent.isWorkingToday
  • 用代码调用时,写:Driver availableDriver = driversPool.getAvailableAgent(d -> d.isWorkingToday);

五、输出最优排班方案

通过参数化实验对比不同排班组合的效率:

  1. 创建Parameter Variation实验,将随机种子作为变量(控制开工日的分布)
  2. 定义核心指标:averageOrderWaitTime(订单平均等待时间)、unfulfilledOrders(未完成订单数)、driverUtilization(司机利用率)
  3. 实验结束后导出最优排班:
// 在实验的On stop事件中写入
FileWriter writer = new FileWriter("optimal_driver_schedule.csv");
writer.write("DriverID,StartDay(0=周一)\n");
for(int i = 0; i < driversPool.getAgents().size(); i++){
    Driver d = driversPool.getAgents().get(i);
    writer.write((i+1) + "," + d.startDay + "\n");
}
writer.close();

备选:动态生成Schedule元素

如果坚持用AnyLogic自带的Schedule,可在启动时为每个司机创建动态Schedule:

for(Driver d : driversPool.getAgents()){
    Schedule driverSched = new Schedule(this);
    int startDay = uniformInt(0, 6);
    // 添加循环周期:工作5天,休息2天,7天为一个周期
    driverSched.addPeriod(timeFromDayOfWeek(startDay, 0), timeFromDayOfWeek((startDay+5)%7, 0), 1.0, 7, TimeUnit.DAYS);
    driversPool.setAgentSchedule(d, driverSched);
}

注意调整timeFromDayOfWeek的参数,匹配你的模型时间单位。


内容的提问来源于stack exchange,提问作者Christian Enyoghasi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 22:32:54