Ошибка CPLEX OPL в объявлении набора

Я реализую двухфазный метод в CPLEX OPL.

Я хотел бы создать набор, содержащий унитарные значения переменной, полученные на моем начальном этапе. Чтобы инициализировать мою вторую фазу, я создаю getValue (X), чтобы восстановить оптимальные значения для этой логической переменной, индексированной в i, j, k. Позже, внутри двойного цикла по индексам «j» и «k» я пытаюсь объявить набор «S» унитарных значений «X» по i-мерному измерению.

Однако мне не удалось сделать правильное объявление набора ... Я уже пробовал использовать:

var S = {i | i in I : X[i][j][k] == 1};
int S = {i | i in I : X[i][j][k] == 1};
{int} S = {i | i in I : X[i][j][k] == 1};

Но я всегда получаю ошибку: «Незаконное использование зарезервированного ключевого слова». Я знаю, что мое объявление набора нехорошо, но понятия не имею, как его объявить, чтобы мой набор S содержал значения I, для которых X [i] [j] [k] == 1.

Не могли бы вы помочь? С наилучшими пожеланиями


person Jacko    schedule 13.10.2015    source источник


Ответы (1)


диапазон I = 1..2; диапазон J = 1..2; диапазон К = 1..2; int X [я в I] [j в J] [k в K] = (я == 1) && (j == 1) && (k == 1)? 1: 0;

int v [i в I] = 1 ‹= sum (j в J, k в K) (X [i] [j] [k] == 1); {int} S = {i | я в я: v [я] == 1};

выполнить {Writeln (S); }

мог бы помочь

С уважением

person Alex Fleischer    schedule 16.10.2015
comment
Спасибо за помощь @AlexFleischer! Я новичок в CPLEX OPL, не могли бы вы помочь мне разобраться в коде? Сначала вы инициализируете диапазоны I, J и K (почему только для двух элементов? У меня их немного больше, скажем, nI, nJ и nK). Позже вы определяете X как двоичную систему, принимающую единичное значение всякий раз, когда i = j = k = 1, в противном случае - ноль. Верно? Но значения X даны мне как оптимальные значения 1-й фазы модели. Как я могу расширить ваше предложение на nI, nJ и nK элементов в каждом измерении? - person Jacko; 17.10.2015