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

OR-TOOLS整数优化:如何约束工人统一分配至同版本任务集

OR-Tools 单模型求解多版本任务统一分配方案

完全不需要拆分三次独立求解,只需要新增一组版本选择的0-1变量,配合对应绑定约束即可在单个MIP模型内完成全局最优求解,具体实现如下:

变量定义

  • 版本选择变量:定义3个0-1整数变量y[A]、y[B]、y[C],分别标记是否选中A/B/C版本的任务集作为唯一分配池,添加约束y[A] + y[B] + y[C] = 1,保证同一时间只会激活一个版本的任务集。
  • 分配决策变量:将原有单版本的分配变量扩展一个版本维度,定义x[w, t, v]为0-1整数变量,表示工人w是否被分配到v版本下的任务t。

约束配置

  • 基础分配约束(和经典线性分配问题一致):
    • 对每名工人,所有版本、所有任务对应的x变量求和结果≤1,保证单工人最多分配1项任务
    • 对每个版本下的每一项任务,所有工人对应的x变量求和结果≤1,保证单任务最多分配1名工人
  • 核心版本强绑定约束:对任意工人w、任意任务t、任意版本v,添加约束x[w, t, v] ≤ y[v]。

    这个约束的作用是:如果某版本未被选中(对应y[v]=0),该版本下所有分配变量x的取值上限为0,即完全禁止该版本下的任何分配行为;只有当版本被选中(y[v]=1)时,该版本下的分配变量才可以取0或1参与求解,天然满足“所有工人只能在同一版本任务集内分配”的强规则,不会出现跨版本分配的情况。

目标函数

和单版本分配问题的目标逻辑完全一致:如果目标是最小化总分配成本,就对所有x[w,t,v] * cost[w,t,v]求和取最小值;如果目标是最大化总生产效率,就对所有x[w,t,v] * efficiency[w,t,v]求和取最大值即可。未被选中版本对应的x变量全为0,不会对目标值计算产生任何干扰。

性能说明

  • 该建模方式新增的变量和约束量级极低:仅新增3个版本选择变量,绑定约束的总数为「工人总数 × 单版本任务数 × 版本总数」,全部为线性约束,不会给OR-Tools的MIP求解器带来额外的计算负担。
  • 实际求解速度通常快于三次独立拆分子问题的方案:求解器在分支定界过程中可以直接剪枝掉目标值明显劣于当前已知最优解的版本分支,不需要把三个版本的分配问题都完整遍历计算一遍。
  • 代码改动量极小:不需要修改原有工人-任务的成本/效率计算逻辑,只需要在原有单版本模型的基础上扩展变量维度、补充上述几个约束即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 11:30:47