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

如何在CPLEX中基于tmin和tmax定义时间区间Ti?

在CPLEX中定义区间变量Ti ∈ [tmin, tmax]的实现方法

一、OPL语言实现

假设你已通过如下方式定义tmin和tmax参数:

int tmin = 5;    // 示例可用时间
int tmax = 20;   // 示例交付时间

方式1:直接在变量定义时指定区间

如果Ti是可选的点区间(即表示时间点,开始等于结束,且变量可能不被激活):

interval Ti optional size 0 in [tmin, tmax];
  • 去掉optional可强制Ti必须存在;
  • 修改size值可定义时间段区间(比如size=3表示持续3个单位时间的任务)。

方式2:通过约束显式限定

先定义区间变量,再添加约束:

interval Ti optional size 0;
subject to {
  startOf(Ti) >= tmin;
  endOf(Ti) <= tmax;
  // 若需Ti为时间点,添加:startOf(Ti) == endOf(Ti);
}

如果是多任务场景(tmin和tmax为数组参数),可定义区间数组:

int n = 10;
int tmin[1..n] = [3,5,2,...];
int tmax[1..n] = [18,20,15,...];
interval Ti[1..n] optional size 0 in [tmin[i], tmax[i]];

二、Python API(docplex.cp)实现

先导入库并初始化模型,定义参数:

from docplex.cp.model import CpoModel

mdl = CpoModel()
tmin = 5    # 可用时间参数
tmax = 20   # 交付时间参数

定义点区间变量(表示时间点)

# start和end都限定在[tmin, tmax],size=0表示开始等于结束
Ti = mdl.interval_var(start=(tmin, tmax), end=(tmin, tmax), size=0, name="Ti")

定义时间段区间变量

如果Ti是持续固定时长的任务,比如持续5个单位时间:

Ti = mdl.interval_var(start=(tmin, None), end=(None, tmax), size=5, name="Ti")

也可以通过显式约束补充限定:

mdl.add(mdl.start_of(Ti) >= tmin)
mdl.add(mdl.end_of(Ti) <= tmax)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 17:10:32