Можно ли использовать скаляр в определении множества (GAMS)? - PullRequest
0 голосов
/ 06 декабря 2018

Я решаю модель и получаю ответ, который я назвал "sol", я хочу установить 'i' так, чтобы i = {1, ..., sol}.

Вместо изменения.Я написал набор, как показано ниже, но это не сработало.

Другими словами, мне нужны изменения набора в зависимости от значения sol.

Моя попытка:

 scalar sol;
 *after solving my model sol=objFun.val
 set i /1*sol/;

Есть ли способ использовать скаляр в определении множества?

1 Ответ

0 голосов
/ 10 декабря 2018

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

  1. Я не думаю, что абсолютно необходимо иметь:

    set i /1*sol/;
    

    Скорее, иметь:

    set i /1*UB/;
    

    , где UB - это значение >> sol, затем определить динамический набор i, скажем, j, такой что:

    j(i) = no;
    j(i)$(ord(i) le sol) = yes;
    
  2. если вы используете набор i в другой модели / решить, запишите новую модель / решение в другой файл .gms и используйте команду put для записи нового набора в зависимости от sol в текстовом файле.:

    put new_set /'new_set.txt'/;
    put new_set;
    put 'set j /1*' sol.l:14:4 '/' /;
    

    @ Richard Это создает новый файл с именем 'new_set.txt', а затем записывает точные слова:

       "set j /1*  12345423.2345/;"
    

    , если sol.l = 12345423.234486754, который фактически является определением нового набора.
    'sol' - переменная целевой функции.Если sol является скаляром, которому вы назначаете значение целевой функции так, как вы определили, удалите «.l».
    «14» относится к тому, сколько цифр вы предварительно присваиваете «sol», при использовании утилиты put это должно быть определено доhand.
    '4' - количество знаков после запятой для 'sol'.

    Для дальнейшей справки: https://www.gams.com/latest/docs/UG_Put.html

    В ваш новый файл .gms включите «new_set.txt», а в исходном файле используйте команду «execute» для вызова игры..exe, чтобы решить новый файл .gms.

Это только мои мысли.Стоит попробовать, если вас толкнули к стене безрезультатно.Надеюсь, они сработают для вас.

...