【问题标题】:CPLEX how to sum with some constraintCPLEX 如何对某些约束求和
【发布时间】:2019-10-29 16:14:37
【问题描述】:

有一个二维数组表示工作机器编号及其处理时间,如下所示。 另外,一个名为 L 的数组表示我要对哪台机器求和。

arr = [
[1, 10],
[2, 20],
[3, 15],
[4, 10]
]

L= [1,4]

我可以添加一个约束,将出现在 L 数组中的机器的所有处理时间相加吗?

对于这个问题,我想求和 10+10,因为 1 和 4 在 L 中。

【问题讨论】:

    标签: algorithm mathematical-optimization cplex opl


    【解决方案1】:
    range r2=1..2;
    range r4=1..4;
    
    int arr[r4,r2] = [
    [1, 10],
    [2, 20],
    [3, 15],
    [4, 10]
    ];
    
    int L[r2]= [1,4];
    
    int s=sum(k in r2) sum(i in r4:arr[i][1]==L[k]) arr[i][2];
    
    execute
    {
    writeln(s);
    }
    

    给予

    20

    如果您希望能够处理尽可能多的机器,您可以编写

    range r2=1..2;
    range r4=1..4;
    
    int arr[r4,r2] = [
    [1, 10],
    [2, 20],
    [3, 15],
    [4, 10]
    ];
    
    {int} L={1,4};
    
    int s=sum(k in L) sum(i in r4:arr[i][1]==k) arr[i][2];
    
    execute
    {
    writeln(s);
    }
    

    【讨论】:

    • 非常感谢。但我还有另一个问题。如果我想制定一个元组L而不是一个数组L,我不知道r2的范围,这意味着我不知道元组中有多少个机器号。在这种情况下,如何计算这样的时间?谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-12
    相关资源
    最近更新 更多