GAMS - целочисленная переменная в качестве индекса - PullRequest
0 голосов
/ 18 октября 2018

Давайте рассмотрим параметр A, который принимает неотрицательный индекс и возвращает целое число.Я хотел бы использовать значение A в процессе оптимизации, поэтому я создал целочисленную переменную B.Моя цель - использовать B в качестве аргумента для A, чтобы оптимизатор мог выбрать лучший индекс для оптимизации модели.

СледующееКод является примером того, что я пытаюсь сделать:

parameter A(*)  "Parameter A"   /
    0 0,
    1 10,
    2 30,
    3 45,
    4 82
    /;

display A;

integer variable B  "Integer B, used as an index for parameter A";
free variable z     "Variable to maximize";

equations profit    "Profit";

profit..    z =e= A(B);

model m / all /;
solve m using MIP maximizing z;

Когда я пытаюсь его скомпилировать, GAMS возвращает следующую ошибку в строке, где я определяю уравнение profit:

Set expected

Есть ли способ достичь того, что я пытаюсь сделать?

1 Ответ

0 голосов
/ 19 октября 2018

Вы можете использовать n двоичных переменных вместо целочисленной переменной (где в решении может быть только одна) и связать их с А. Может выглядеть так:

Set i /0*4/;

parameter A(i)  "Parameter A"   /
    0 0,
    1 10,
    2 30,
    3 45,
    4 82
    /;

display A;

binary variable B(i);
free variable z     "Variable to maximize";

equations profit    "Profit"
          oneB;


profit..    z =e= sum(i,A(i)*B(i));
oneB..      sum(i,B(i)) =l= 1;

model m / all /;
solve m using MIP maximizing z;
...