OptaPlanner多设备多工序场景设备动态分配问题咨询
OptaPlanner 多工序多设备负载均衡调度实现方案
模型定义
- 基础实体
- 工序(
Process):存储工序编号、允许加工的设备列表、单工件加工耗时、总待加工工件数 - 设备(
Equipment):存储设备编号、每日可用时长、单位时间加工效率、设备维护时间窗
- 工序(
- 规划实体(
@PlanningEntity)- 任务分配单(
TaskAssignment):核心规划对象,包含两个规划变量:分配设备、分配加工量,关联所属工序
- 任务分配单(
- 得分规则采用
HardMediumSoftScore三层得分体系
硬约束(违反则方案不可行)
- 工序适配约束:仅可将工序任务分配至该工序允许的设备列表内的设备,违反扣1000硬分
- 总加工量匹配约束:同一工序下所有分配的加工量之和等于该工序总待加工量,违反扣1000硬分
- 工序先后约束:前序工序所有任务加工完成后,才可启动后序工序的加工任务,违反扣1000硬分
- 单设备分配上限约束:单台设备分配的同一工序加工量不得超过工序总加工量的预设阈值(示例可设为30%,即2000件的工序10单设备最多分配600件),从规则层面避免全量分配到单台设备的情况,违反扣800硬分
- 设备产能约束:设备分配的所有任务总加工耗时不可超过设备可用时长,违反扣1000硬分
软约束(优化方向)
- 同工序负载均衡:计算同一工序下所有分配了任务的设备的负载率(已分配加工耗时/设备可用时长)的方差,方差每增加0.01扣10软分,保障同工序多设备负载尽可能均衡
- 总完工时间最优:所有工序完成加工的总时长每增加1小时扣5软分,可根据业务需求调整该权重和负载均衡权重的优先级
- 跨工序设备复用优化:如果有设备可加工多道工序(如示例中的M3可加工工序10和20),优先分配给同一产品的前后工序,减少工件周转成本,可额外加软分奖励
实现优化技巧
- 无需将批量工件拆分为单个工件的独立任务,直接将加工量设为整数型规划变量,设置最小分配步长为业务要求的最小加工批量,大幅降低规划求解的计算量
- 若要进一步降低计算复杂度,可预先为每道工序生成可选的设备分配组合范围,通过
@ValueRangeProvider限定规划变量的可选范围,减少无效搜索 - 本地调试时可先将求解时间设为30s,通过调整得分权重快速验证约束效果,稳定后再根据业务数据量级拉长求解时间获取更优解
// 规划实体示例代码 @PlanningEntity public class TaskAssignment { private Process process; @PlanningVariable(valueRangeProviderRefs = "allowedEquipmentRange") private Equipment assignedEquipment; @PlanningVariable(valueRangeProviderRefs = "allowedQuantityRange") private Integer assignedQuantity; // 省略构造方法、get/set方法 }
内容的提问来源于stack exchange,提问作者nj_hyde
相关产品推荐
相关产品推荐

