#####################################################
# Instancia: data/inst0.vrp
# Tipo: ACVRP
# Generada automaticamente
#####################################################

set N:={1..10};
set V:= N + {0,11};
set A2 := V*V; # solo se usa para poder leer matriz de costos
set A := {<i,j> in N*N with i!=j} + {0}*N + N*{11}; # para los arcos
set Ay := A + N*{0} + {11}*N; # para indexar y

# costos de desplazamiento
param c[A2] :=
    |       0,       1,       2,       3,       4,       5,       6,       7,       8,       9,      10,      11|
|  0|       0,    1989,    1368,    1597,    1974,    2313,    1865,    1593,    2422,    2304,    2870,       0|
|  1|    1746,       0,    1104,    1339,     743,    1186,     735,     490,    1231,    1073,    1926,    1746|
|  2|    1565,    1352,       0,     313,    1882,    2375,    1807,     753,    2452,    2288,    3122,    1565|
|  3|    1891,    1640,     383,       0,    2229,    2722,    2161,    1062,    2793,    2629,    3473,    1891|
|  4|    1615,     607,    1537,    1820,       0,     493,      89,     963,     572,     410,    1244,    1615|
|  5|    1889,     969,    1939,    2222,     402,       0,     467,    1363,     110,     100,     753,    1889|
|  6|    1525,     600,    1476,    1764,     110,     572,       0,     917,     660,     502,    1315,    1525|
|  7|    1539,     600,     615,     867,    1180,    1669,    1123,       0,    1736,    1572,    2422,    1539|
|  8|    1978,    1005,    2002,    2281,     467,      89,     539,    1418,       0,     134,     695,    1978|
|  9|    1881,     876,    1868,    2147,     335,     122,     410,    1284,     164,       0,     856,    1881|
| 10|    2343,    1572,    2549,    2835,    1016,     615,    1073,    1978,     567,     699,       0,    2343|
| 11|       0,    1989,    1368,    1597,    1974,    2313,    1865,    1593,    2422,    2304,    2870,       0|;

# demandas
param d[N] :=
<1> 1135,
<2> 7063,
<3> 51,
<4> 23,
<5> 3074,
<6> 349,
<7> 1047,
<8> 698,
<9> 3001,
<10> 31;

# nmero de vehiculos
param K:= 4;

# capacidades
param C:= 7200;

# variables de seleccion de aristas
var x[A] binary;

# variables de flujo
var y[Ay] >= 0;

minimize costo_total : sum <i,j> in A : c[i,j] * x[i,j];
subto grado_sal_cliente : forall <i> in N do
  (sum <i,j> in A : x[i,j]) == 1;
subto grado_ent_cliente : forall <i> in N do
  (sum <j,i> in A : x[j,i]) == 1;
subto demanda_flujo : forall <i> in N do
  (sum <j,i> in Ay : y[j,i]) - (sum <i,j> in Ay : y[i,j]) == 2*d[i];
subto vinculacion_1 : forall <i,j> in N*N with i<j do
  y[i,j] + y[j,i] == C*(x[i,j]+x[j,i]);
subto vinculacion_2 : forall <j> in N do
  y[0,j] + y[j,0] == C*(x[0,j]);
subto vinculacion_3 : forall <i> in N do
  y[i,11] + y[11,i] == C*(x[i,11]);
subto eliminar_lazos_dobles : forall <i,j> in N*N with i<j do
  x[i,j] + x[j,i] <=1;
subto salida_deposito_ida :
  sum <0,j> in Ay : y[0,j] == sum <i> in N : d[i];
subto salida_deposito_retorno :
  sum <11,j> in Ay : y[11,j] == K*C;
