CPLEX как суммировать с некоторым ограничением - PullRequest
0 голосов
/ 29 октября 2019

Существует 2D-массив, подразумевающий номер рабочей машины и время ее обработки, как показано ниже. Кроме того, массив с именем L подразумевает, какую машину я хочу суммировать.

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

L= [1,4]

Могу ли я добавить ограничение, которое суммирует все время обработки машины, появляющейся в массиве L?

Дляэту проблему я хочу суммировать 10 + 10, потому что 1 и 4 в L.

1 Ответ

1 голос
/ 29 октября 2019
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);
}
...