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

如何在OPL CPLEX中定义指定6小时周期的随时间变化集合?

OPL CPLEX 定义时变集合的代码方案

针对你需要的6小时时变集合需求,这里提供两种可行的OPL实现方案:

方法一:直接数组存储硬编码集合

这种方式直观易懂,适合集合变化无统一规律的场景,直接为每个时间点指定集合内容:

// 定义时间范围(1到6小时)
int Time = 6;
range Times = 1..Time;

// 定义时变集合数组,每个索引对应一个时间点的集合
{int} dynamicSet[Times] = [
    {3,6,8,1,4},  // t=1
    {6,8,1,4},    // t=2
    {8,1,4},      // t=3
    {1,4},        // t=4
    {4},          // t=5
    {}            // t=6
];

// 可选:测试输出各时间点的集合
execute {
    for(var t in Times) {
        writeln("t=", t, " 集合: ", dynamicSet[t]);
    }
}

方法二:基于规则动态生成集合

观察到每个元素的存在时间有明确区间(比如元素3仅在t=1存在,元素4存在于t=1到t=5),可以通过定义元素的有效时间区间,动态生成对应时间点的集合。这种方式更易维护,尤其当时间范围或元素数量扩展时:

// 定义时间范围
int Time = 6;
range Times = 1..Time;

// 定义元组:存储元素值及其有效时间区间
tuple ElementValidity {
    int val;
    int startTime;
    int endTime;
}

// 定义所有元素的有效时间规则
{ElementValidity} elementRules = {
    <3, 1, 1>,
    <6, 1, 2>,
    <8, 1, 3>,
    <1, 1, 4>,
    <4, 1, 5>
};

// 动态生成每个时间t的集合:筛选出当前时间在有效区间内的元素
{int} dynamicSet[t in Times] = {rule.val | rule in elementRules where rule.startTime <= t <= rule.endTime};

// 可选:测试输出各时间点的集合
execute {
    for(var t in Times) {
        writeln("t=", t, " 集合: ", dynamicSet[t]);
    }
}

两种方案运行后都会输出符合要求的时变集合,你可以根据实际场景选择:如果集合变化无规律,选方法一;如果元素的存在时间有统一规则,选方法二更高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 04:37:49