# n es la cantidad de vertices del grafo param n:=50; # V es el conjunto de vertices set V:={1 to n}; # x[i,j]==1 si y solo si el vertice i tiene color j var x[V*V] binary; # k es una variable auxiliar que va a representar a la cantidad de colores que use var k integer >=0 <=n; #a es la matriz de adyacencia de mi grafo #param a[V*V]:= #|1,2,3,4,5| #|1|0,1,0,0,1| #|2|1,0,1,0,0| #|3|0,1,0,1,0| #|4|0,0,1,0,1| #|5|1,0,0,1,0|; #param a[V*V]:= #|1,2,3,4,5| #|1|0,1,1,1,1| #|2|1,0,1,1,1| #|3|1,1,0,1,1| #|4|1,1,1,0,1| #|5|1,1,1,1,0|; param a[ in V*V]:= 1; # quiero minimizar la cantidad de colores que estoy usando minimize fobj: k; # sujeto a que a cada vertice le asigne exactamente un color subto un_color: forall in V: sum in V: x[i,j]==1; # a que es un coloreo valido subto valido: forall in V*V with a[i,j]==1 and i in V: x[i,h]+x[j,h]<=1; # y a que k sea mayor o igual a cada color que use subto ccol: forall in V: sum in V: j*x[i,j]<=k;