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

如何在OPL CPLEX中计算时变集合各时段的元素数量

在OPL CPLEX中计算时变集合各时段元素数量并生成数组

你可以通过以下步骤实现需求:

1. 保留原时变集合定义

先保留你已定义的元组与集合数据:

tuple TimeVaryingSet {
    int Slot;
    {int} values;
}

TimeVaryingSet Damagedlines[Slot] = [
    <1,{30,67,17,54,12,49,11,48}>,
    <2,{30,67,17,54,12,49,11,48}>,
    <3,{17,54,12,49,11,48}>,
    <4,{17,54,12,49,11,48}>,
    <5,{17,54,12,49,11,48}>,
    <6,{12,49,11,48}>,
    <7,{11,48}>,
    <8,{}>
];

2. 生成元素数量数组

声明整数数组,用card()函数计算集合元素个数,通过生成器表达式遍历所有时段:

int damagedLineCount[Slot] = [card(Damagedlines[s].values) | s in Slot];

该数组会直接存储每个时段对应的集合元素数量。

3. 验证输出结果

若需要查看计算结果,可在execute块中打印数组内容:

execute {
    writeln("各时段集合元素数量:");
    for(var s in Slot) {
        writeln("时段 ", s, ": ", damagedLineCount[s]);
    }
}

完整代码示例

整合后的完整OPL代码如下:

tuple TimeVaryingSet {
    int Slot;
    {int} values;
}

// 定义时变集合
TimeVaryingSet Damagedlines[Slot] = [
    <1,{30,67,17,54,12,49,11,48}>,
    <2,{30,67,17,54,12,49,11,48}>,
    <3,{17,54,12,49,11,48}>,
    <4,{17,54,12,49,11,48}>,
    <5,{17,54,12,49,11,48}>,
    <6,{12,49,11,48}>,
    <7,{11,48}>,
    <8,{}>
];

// 生成各时段元素数量数组
int damagedLineCount[Slot] = [card(Damagedlines[s].values) | s in Slot];

// 执行输出
execute {
    writeln("各时段集合元素数量:");
    for(var s in Slot) {
        writeln("时段 ", s, ": ", damagedLineCount[s]);
    }
}

运行代码后,会输出每个时段的集合元素数量,damagedLineCount数组可直接在后续模型逻辑中调用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 18:10:05