MICROSOFT

EP02. “Assignment Problem 指派问题”

首页 Microsoft 工具 Excel · Data Analysis · Solver · EP02
约 5 分钟· #EP02#Excel#Solver
🔒 登录后可标记已读
  • 指派问题是"把 N 个人分配去做 N 项任务,每人只能做一项、每项任务只需一人,怎么分配总成本最低"这类最优化问题
  • 用 0/1(是否分配)的二进制变量建模,再交给 Solver 求解
  • 这篇笔记延续 EP01 的建模思路,示范怎么处理"二进制约束"这种特殊限制
  • 前置知识是本分类 EP01(Transportation Problem,含 Solver 加载项启用方法)
  • 学完能处理"一对一分配"类型的最优化问题

重点内容


适用版本

桌面版通用(Excel 365 / 2021 / 2019 等)。若未启用 Solver 加载项,先参考 EP01 的启用步骤(File → Options → Add-ins)。


第一步:建立模型

三个核心问题:

  1. 决策变量:每个人是否分配到每项任务,用 1 表示分配、0 表示不分配
  2. 约束条件:每人只能分配到一项任务,每项任务只能分配给一人
  3. 目标函数:让总成本最小化

命名范围:涉及成本(Cost)、任务分配变量(Assignments)、已分配人员合计、需求(Demand)、已分配任务合计、供给(Supply)、总成本(TotalCost)等,跟 EP01 运输问题的命名逻辑一致,只是把"运送量"换成了"是否分配"。


第二步:试错法

先手动试一组分配方案:第 1 人做任务 1、第 2 人做任务 2、第 3 人做任务 3,算出总成本是 147,作为对照基准。


第三步:用 Solver 求解

  1. Data → Analyze → Solver
  2. Set Objective 选总成本单元格,选择 Min
  3. By Changing Variable Cells 选分配变量的范围
  4. 添加三类约束:
    • 二进制约束:分配变量必须是 Bin(binary,只能是 0 或 1)
    • 需求约束:每项任务恰好分配给一人
    • 供给约束:每人恰好分配到一项任务
  5. Solving Method 选 Simplex LP
  6. 点击 Solve

[截图:Solver 约束列表,包含 Bin 二进制约束那一条]

📌 关键差异:指派问题比运输问题多了一个"二进制约束"(Bin),因为这里的决策不是"运送多少单位"这种连续数量,而是"分配或不分配"这种是非题,必须限制变量只能取 0 或 1。


求解结果

最优解:第 1 人 → 任务 2,第 2 人 → 任务 3,第 3 人 → 任务 1,总成本降到 129(比试错法的 147 更低)。

[截图:分配变量矩阵,最优解对应位置显示 1、其余显示 0]


学完你会

  • ✅ 用 0/1 二进制变量给「一对一分配」问题建模
  • ✅ 给分配变量加上 Bin(二进制)约束,避免算出不合理的部分分配
  • ✅ 用 Solver 求出比手动试错更低成本的分配方案

常见错误

  • 忘记把分配变量的约束设成 Bin(二进制),Solver 可能算出 0.6、0.3 这种不合理的"部分分配"结果
  • 人数和任务数不相等时直接套用"每人一项、每项一人"的约束,模型会无解,需要先确认是不是方阵(人数=任务数)
  • 只对照了一组试错方案就认定 Solver 结果一定更优,没有多试几组手动方案交叉验证

Sources

Blog / Website:

  1. Assignment Problem