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

基于Google OR Tools的多机器作业车间调度(含换型时间)实现问询

多机器柔性作业车间+换型时间扩展提示

核心变量扩展

  • 保留柔性作业车间的核心变量:
    • 每个工序(job_id, task_id)的机器选择布尔变量selected[job_id][task_id][machine_id],标记该工序是否在指定机器上加工。
    • 每个工序在选定机器上的开始时间start[job_id][task_id]、结束时间end[job_id][task_id]。
  • 新增换型相关辅助变量:对每台机器m,定义该机器上任意两个工序i和j(来自不同作业)的排序布尔变量before[m][i][j],标记工序i是否在工序j之前在机器m上加工。

换型时间约束实现

参考单机器示例的换型逻辑,将其扩展到多机器场景:

  • 对每台机器m,遍历所有可能在该机器上加工的工序对(i, j)(i和j属于不同作业):
    • 当before[m][i][j]为真时,工序j的开始时间必须 ≥ 工序i的结束时间 + 换型时间(从换型字典中按i所属作业、j所属作业获取对应值)。
    • 用SAT蕴含约束实现:model.AddImplication(before[m][i][j], start[j] >= end[i] + setup_time[i_job][j_job])。
  • 补充机器上的工序互斥约束:对同一机器m上的任意两个工序i和j,必须满足before[m][i][j] XOR before[m][j][i],确保同一机器上的工序有明确先后顺序。

关联机器选择与时间约束

  • 对每个工序(job, task),只有当selected[job][task][m]为真时,该工序的时间变量才与机器m的调度逻辑关联:
    • 约束end[job][task] == start[job][task] + processing_time[job][task][m]仅在selected[job][task][m]为真时生效,用model.Add(end[job][task] == start[job][task] + processing_time[job][task][m]).OnlyEnforceIf(selected[job][task][m])实现。
  • 同一作业的工序时序约束:确保同一作业的前序工序结束后,后续工序才能开始,该逻辑与原柔性示例一致,无需修改。

数据结构调整

  • 将换型时间字典扩展为适配多机器的结构:如果换型时间与机器无关,可保留setup_time[prev_job][curr_job];如果不同机器换型时间不同,需调整为setup_time[machine][prev_job][curr_job],确保能正确获取对应机器上的换型时长。

目标函数与求解

  • 目标仍为最小化最大完工时间,和原示例一致:model.Minimize(max_end_time),其中max_end_time是所有工序结束时间的最大值。
  • 求解器调用逻辑可复用原柔性示例的代码,无需大幅修改。

内容的提问来源于stack exchange,提问作者Martin Stimpfl

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 22:55:11