 MODEL:
!                                                          ;
! Cálculo del camino mínimo entre dos nodos arbitrarios    ;
! Se utiliza la formulación como un problema de asignación ;
!                                                          ;
! Cuando un arco no exista se le asigna longitud infinita  ;
!                                                          ;
! 19/11/03                                                 ;
!                                                          ;
SETS:
vertice/1..6/;
arco(vertice,vertice):l, x;
ENDSETS

min = @sum(arco: l*x);

! Para cada vértice sale un arco excepto el destino ;
@for(vertice(i) | i #ne# destino : @sum(vertice(j): x(i,j)) = 1);

! Para cada vértice llega un arco excepto el origen ;
@for(vertice(j) | j #ne# origen : @sum(vertice(i): x(i,j)) = 1);

! Del origen sale un arco y no llega ninguno ;
x(origen,origen) = 0;
@sum(vertice(i): x(i,origen)) = 0;

! Al destino llega un arco y no sale ninguno ;
x(destino,destino) = 0;
@sum(vertice(j): x(destino,j)) = 0;

DATA:
origen=?;
destino=?;
l=   0,   4,   6,1000,1000,1000,
     3,   0,   2,  12,1000,1000,
     5,   3,   0,   4,   9,1000,
  1000,  10,   4,   0,   5,   1,
  1000,1000,   8,   4,   0,   2,
  1000,1000,1000,   1,   3,   0;
ENDDATA

END

