Microsoft Lab
全部软件
Excel规划求解(Solver)约 4 分钟

Shortest Path Problem 最短路径问题

重点内容


适用版本

桌面版通用(Excel 365 / 2021 / 2019 等)。Solver 加载项启用方式见 EP01。


第一步:建立模型

  1. 决策变量:每条连接线是否被选进最短路径(是=1,否=0)
  2. 约束条件:起点 S 只能有一条「出去」的线(净流量 Net Flow = 1);终点 T 只能有一条「进来」的线(净流量 Net Flow = -1)
  3. 目标函数:让选中路径的总距离最小化

命名范围:

范围名称用途
From / To每条连接线的起点/终点
Distance每条连接线的距离
Go这条线是否被选中(0/1)
NetFlow每个节点的净流量
SupplyDemand每个节点该有的净流量(起点 1、终点 -1、其余 0)
TotalDistance选中路径的总距离

用 SUMIF 算出每个节点的净流量,用 SUMPRODUCT 把 Distance 和 Go 相乘加总,算出总距离。


第二步:试算

先手动选一条路径试试看,例如 S›B›E›T,距离是 16。不需要非得手动试出答案,这一步只是帮助理解模型怎么运作。


第三步:用 Solver 求解

  1. Data 选项卡 → Solver
  2. Set Objective 选 TotalDistance,选 Min(最小化)
  3. By Changing Variable Cells 选 Go
  4. 加约束:NetFlow = SupplyDemand
  5. 勾选 Make Unconstrained Variables Non-Negative,Solving Method 选 Simplex LP
  6. 点击 Solve
📷 画面提示

Solver Parameters 对话框,NetFlow = SupplyDemand 约束已添加


求解结果

最短路径是 S›A›D›C›T,总距离 11,比试算的 16 更短。

📷 画面提示

Go 变量结果,被选中的连接线显示 1、其余显示 0


学完你会

常见错误

  • 净流量的约束条件设反了方向(起点该是 +1 却设成 -1,或反过来)
  • 没有理解「只是帮助理解模型」这一步的用途,误以为一定要手动试出正确答案才能进行下一步
  • Go 变量没设成 0/1 二元变量,Solver 算出不合理的中间值

Sources

Blog / Website:

  1. Shortest Path Problem
只记在你的浏览器里,换设备不会同步。