gams задают сеть флюсов с множеством нулей (разреженная матрица) - PullRequest
0 голосов
/ 31 августа 2018

Я пытался использовать gams, чтобы найти поток материала через сеть узлов. Я определил

set edge(i,n,nn);
positive variable flux(i,n,nn);

y.up(i,n,nn)$( not edge(i,n,nn)) = 0;

Мое намерение состоит в том, чтобы определить трехмерную матрицу переменной для flux matrial i из узла n в nn, а затем использовать набор edge, который указывает, какой из полного графа может иметь массу потока.

Это, очевидно, работает, но когда я пытался сохранить y в файл gdx, у меня было много нулей. Мне нужно только подмножество y, где ребро (i, n, nn) ​​истинно.

Как мне установить y при сохранении файла gdx.

Спасибо!

1 Ответ

0 голосов
/ 31 августа 2018

Вы можете хранить вещи в сокращенном параметре:

Parameter yLevel(i,n,nn);
yLevel(i,n,nn)$edge(i,n,nn) = y.l(i,n,nn);
execute_unload 'result.gdx' yLevel;

Просто примечание: вам действительно нужен полный y (i, n, nn)? Это может быть огромным в зависимости от размера наборов индексации. Или вы могли бы изменить свою модель так, чтобы она просто использовала y (i, n, nn) ​​$ edge (i, n, nn)?

...