Как определить неполные множества в 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.