 MODEL:
!                                                          ;
! Cálculo del camino mínimo entre dos nodos arbitrarios    ;
!                                                          ;
! Cuando un arco no existe se le asigna longitud infinita  ;
!                                                          ;
! 19/11/03                                                 ;
!                                                          ;
SETS:
vertice/1..6/;
arco(vertice,vertice):l, x;
ENDSETS

min = @sum(arco: l*x);

! Del origen sale un arco y no llega ninguno ;
@sum(vertice(j) | j #ne# origen : x(origen,j)) = 1;
@sum(vertice(i) | i #ne# origen : x(i,origen)) = 0;

! Al destino llega un arco y no sale ninguno ;
@sum(vertice(i) | i #ne# destino : x(i,destino)) = 1;
@sum(vertice(j) | j #ne# destino : x(destino,j)) = 0;

! Para los demás nodos entran y salen el mismo número de arcos ;
@for(vertice(k) | k #ne# origen #and# k #ne# destino :
   @sum(vertice(i): x(i,k)) = @sum(vertice(j): x(k,j))
);

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

