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

如何编写CPLEX中产品收发货量平衡约束?

CPLEX 产品提货-配送量平衡约束编写方案

首先需要明确:你的变量定义里缺少产品维度,因为要按产品统计总提货和总配送量,所以需要把变量调整为带产品索引的形式:

  • UI[p][i][v][t]:产品p,车辆v在时段t从提货节点i提取的货物量
  • W[p][i][v][t]:产品p,车辆v在时段t给配送节点i配送的货物量

1. 集合定义(OPL语言)

先在CPLEX OPL中定义所需集合:

// 产品集合
{int} P = {1, 2};
// 提货节点集合
{int} PickupNodes = {1, 2, 3, 4};
// 配送节点集合
{int} DeliveryNodes = {5, 6, 7, 8, 9, 10};
// 时段集合
{int} T = {1, 2, 3};
// 车辆集合
{int} V = {1, 2};

2. 变量定义

dvar float+ UI[P][PickupNodes][V][T]; // 提货量,非负
dvar float+ W[P][DeliveryNodes][V][T]; // 配送量,非负

3. 核心平衡约束

对每个产品p,所有提货节点、车辆、时段的总提货量,等于该产品所有配送节点、车辆、时段的总配送量:

// 产品提货-配送量平衡约束
forall(p in P) {
  sum(i in PickupNodes, v in V, t in T) UI[p][i][v][t] 
  == 
  sum(i in DeliveryNodes, v in V, t in T) W[p][i][v][t];
}

补充说明

如果你的原始变量确实没有产品维度(比如W和UI是按产品分别定义的不同变量),也可以针对单个产品单独写约束:

// 针对产品1的约束
sum(i in PickupNodes, v in V, t in T) UI_1[i][v][t] == sum(i in DeliveryNodes, v in V, t in T) W_1[i][v][t];
// 针对产品2的约束
sum(i in PickupNodes, v in V, t in T) UI_2[i][v][t] == sum(i in DeliveryNodes, v in V, t in T) W_2[i][v][t];

但更推荐用带产品索引的统一变量形式,便于扩展和维护。

内容的提问来源于stack exchange,提问作者Tiến Nguyễn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 06:12:09