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

如何使用CPLEX求解多商品流问题,求相关.mod代码示例

CPLEX 多商品流问题 .mod 代码实现参考

以下是通用带容量约束的最小费用多商品流问题的CPLEX .mod模型代码,各部分均标注了和数学符号的对应关系,可直接适配你的业务场景修改:

// 多商品流问题CPLEX模型定义
// ========== 数据声明部分 ==========
int NumNodes = ...; // 节点总数,对应数学符号 |V|
int NumCommodities = ...; // 商品种类总数,对应数学符号 |K|
float NodeSupply[1..NumNodes][1..NumCommodities] = ...; // 节点i对商品k的供需量,正数为源点供应、负数为汇点需求,对应数学符号 b_{k,i}
float EdgeCapacity[1..NumNodes][1..NumNodes] = ...; // 有向边(i,j)的总流量上限,无边连接则设为0,对应数学符号 u_{i,j}
float UnitCost[1..NumNodes][1..NumNodes][1..NumCommodities] = ...; // 商品k沿边(i,j)传输的单位成本,对应数学符号 c_{i,j,k}

// ========== 决策变量声明部分 ==========
dvar float+ Flow[1..NumNodes][1..NumNodes][1..NumCommodities]; // 商品k在边(i,j)上的流量,对应数学符号 x_{i,j,k} ≥ 0

// ========== 目标函数:最小化总运输成本 ==========
minimize TotalCost:
  sum(i in 1..NumNodes, j in 1..NumNodes, k in 1..NumCommodities) UnitCost[i][j][k] * Flow[i][j][k];
// 对应数学表达式:min ∑_{∀i,j∈V, k∈K} c_{i,j,k} x_{i,j,k}

// ========== 约束条件 ==========
// 1. 流守恒约束:对每个节点、每种商品,流出量减流入量等于该节点该商品的净供应量
subject to FlowConservation forall(i in 1..NumNodes, k in 1..NumCommodities):
  sum(j in 1..NumNodes) Flow[i][j][k] - sum(j in 1..NumNodes) Flow[j][i][k] == NodeSupply[i][k];
// 对应数学表达式:∑_{j∈V} x_{i,j,k} - ∑_{j∈V} x_{j,i,k} = b_{k,i}, ∀i∈V, k∈K

// 2. 边容量约束:同一条边上所有商品的总流量不能超过边的容量上限
subject to EdgeCapacityLimit forall(i in 1..NumNodes, j in 1..NumNodes: EdgeCapacity[i][j] > 0):
  sum(k in 1..NumCommodities) Flow[i][j][k] <= EdgeCapacity[i][j];
// 对应数学表达式:∑_{k∈K} x_{i,j,k} ≤ u_{i,j}, ∀(i,j)∈E

实现调整经验

  • 若需求解整数多商品流问题,仅需将决策变量定义中的dvar float+修改为dvar int+即可
  • 大规模稀疏网络场景下,建议单独定义边集合tuple Edge {int from; int to;},将所有涉及边的遍历逻辑改为遍历Edge集合,可大幅降低模型冗余度、提升求解速度
  • 无需把数据硬编码在.mod文件中,可将数据部分单独抽为.dat文件,适配不同规模的测试用例
  • 无向边场景下,将每条无向边拆为两条反向的有向边,给两条边设置相同的容量和单位成本即可适配现有模型
  • 额外约束(如节点容量限制、单商品路径长度限制等)可直接在约束块中按照数学表达式的逻辑新增,和现有约束的写法逻辑完全一致

内容的提问来源于stack exchange,提问作者guanting.lai

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 10:54:03