Как объявить массив выражений в терминах других переменных в OPL

#cplex #opl

Вопрос:

Вот мой код:

 range products = 1..5;

// Variables
dvar float  P;
dvar float  Q;

// Expressions
dexpr float produced[products] = [P, Q, P, P Q, P Q];
 

Проблема в том, что я не могу использовать produced выражение, потому что получаю ошибку:

 Index out of bound for array "produced": p.
 

всякий раз, когда я пытаюсь использовать выражение produced[p] «где p находится число 1..5 «.

Я знаю, что могу создавать массивы выражений с помощью синтаксиса dexpr float product[p in products] = (some math expression using p); , но я хочу использовать форму выше из своего кода. Похоже, этот синтаксис не разрешен для выражений, есть ли обходной путь?

Ответ №1:

 range products = 1..5;

// Variables
dvar float  P;
dvar float  Q;

int coefP[products]=
[1,0,1,1,1];
int coefQ[products]=
[0,1,0,1,1];
// Expressions
dexpr float produced[p in products] = coefP[p]*P coefQ[p]*Q;



subject to
{
  produced[1]==3;
}
 

работает нормально