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

Cplex共享单车再平衡问题:如何约束调度车首站为缺车/溢出站

约束实现方案

你当前写的带if判断的赋值逻辑不能直接用于CPLEX约束块,因为e[i]作为决策变量,无法在约束定义阶段直接用条件判断赋值,需要通过大M法线性化0-1变量的逻辑关系,再补充首站的关联约束,具体实现步骤如下:

步骤1:定义大M参数

取足够大的正整数M,取值大于所有站点的最大可容纳车辆数即可,示例:int M = max(i in stations) cap[i] * 2; 其中cap[i]为站点i的最大容量。

步骤2:线性化sSurplus、sShortage的定义约束

因为车辆数为整数,可直接用如下约束实现你想要的判断逻辑:

// 溢出站点标记:sSurplus[i]=1 当且仅当 e[i] > U[i]
forall(i in stations) {
    e[i] - U[i] <= M * sSurplus[i];
    e[i] - U[i] >= 1 - M * (1 - sSurplus[i]);
}

// 缺车站点标记:sShortage[i]=1 当且仅当 e[i] < L[i]
forall(i in stations) {
    L[i] - e[i] <= M * sShortage[i];
    L[i] - e[i] >= 1 - M * (1 - sShortage[i]);
}

// 可选补充:同一站点不能同时溢出和缺车
forall(i in stations) {
    sSurplus[i] + sShortage[i] <= 1;
}

步骤3:补充首站约束

新增如下约束,保证首个停靠站点必须是溢出或缺车站点:

forall(i in stations) {
    firstStation[i] <= sSurplus[i] + sShortage[i];
}

逻辑说明:如果站点i是首个停靠站(firstStation[i]=1),则必须满足sSurplus[i] + sShortage[i] >=1,也就是该站点要么溢出要么缺车,完全符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 07:09:05