Как определить неполные множества в GAMS?

Существует неполный граф (например, включая 5 вершин). Матрица смежности "а" доступна. Я хочу определить множество, которое включает в себя все ребра, но исключает любую другую пару вершин. То есть пара вершин принадлежит множеству ребер, если элемент в матрице "а" положителен. Последняя строка следующего кода не работает!

sets i "Set of vertices" /1*5/    ;  
alias(i,j);  
set a(i,j)  "Adjacency matrix"    ;  
Table a(i,j)  
      1   2   3   4   5  
1     0   1   0   1   1  
2     1   0   1   0   0  
3     0   1   0   0   0  
4     1   0   0   0   1  
5     1   0   0   1   0;  
Set edges(i,j);  
edges(i,j) = a(i,j)$(a(i,j)>0);

2 ответа

Если вы хотите иметь ребро, вы должны определить набор и параметр следующим образом:

  sets i "Set of vertices" /1*5/    ;  
  alias(i,j);  
  set a(i,j)  "Adjacency matrix"    ;  
 Table a(i,j)  
  1   2   3   4   5  
 1     0   1   0   1   1  
 2     1   0   1   0   0  
 3     0   1   0   0   0  
4     1   0   0   0   1  
5     1   0   0   1   0;  
Set edges(i,j);  
edges(i,j) $ a(i,j) =yes;

Вы можете упростить свою последнюю строку

edges(i,j) = a(i,j);

Это автоматически действует так, как будто вы написали что-то вроде $(a<>0). Однако, поскольку вы определили свой символ a как уже установленный, а не как параметр, я думаю, что на самом деле вам не нужно ничего делать. Просто то, что вы ищете. Просто делать

display a;

и посмотрите на результат в файле lst.

Другие вопросы по тегам