initial commit
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
#####################################################
|
||||
# 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;
|
||||
|
||||
# número 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;
|
||||
@@ -0,0 +1,60 @@
|
||||
##################################################################3
|
||||
# Modelos de enrutamiento vehicular - Ejemplos
|
||||
# Modelo ACVRP de 2 índices
|
||||
#
|
||||
# Instancia 0
|
||||
# Adaptada de la instancia F-n72-k4.vrp de Fisher
|
||||
##################################################################3
|
||||
|
||||
|
||||
set N := {1..10};
|
||||
set V := N + {0};
|
||||
set A := { <i,j> in V*V };
|
||||
set S[] := powerset(N);
|
||||
set H := indexset(S);
|
||||
|
||||
param costo[A] :=
|
||||
| 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 |
|
||||
|0 | 0 , 19.8947 , 13.6821 , 15.9687 , 19.7434 , 23.1344 , 18.6494 , 15.9311 , 24.224 , 23.0369 , 28.6967 |
|
||||
|1 | 17.4557 , 0 , 11.0363 , 13.3866 , 7.42967 , 11.8617 , 7.34847 , 4.89898 , 12.3085 , 10.7331 , 19.2562 |
|
||||
|2 | 15.6461 , 13.5167 ,0 , 3.1305 , 18.8229 , 23.7487 , 18.0748 , 7.52994 , 24.5194 , 22.8801 , 31.2202 |
|
||||
|3 | 18.9077 , 16.3951 , 3.83406 , 0 , 22.289 , 27.2158 , 21.6056 , 10.6207 , 27.9339 , 26.2907 , 34.7275 |
|
||||
|4 | 16.1462 , 6.0663 , 15.3688 , 18.1989 , 0 , 4.9295 , 0.89442 , 9.63328 , 5.71839 , 4.09878 , 12.4419 |
|
||||
|5 | 18.8892 , 9.68504 , 19.3907 , 22.2216 , 4.02492 , 0 , 4.66905 , 13.6308 , 1.09545 , 1 , 7.52994 |
|
||||
|6 | 15.2545 , 6 , 14.758 , 17.6409 , 1.09545 , 5.71839 , 0 , 9.16515 , 6.59545 , 5.01996 , 13.1453 |
|
||||
|7 | 15.3851 , 6 , 6.14817 , 8.67179 , 11.7983 , 16.6943 , 11.225 , 0 , 17.3638 , 15.7226 , 24.224 |
|
||||
|8 | 19.7788 , 10.0499 , 20.02 , 22.8079 , 4.66905 , 0.89442 , 5.38516 , 14.1774 , 0 , 1.34164 , 6.94982 |
|
||||
|9 | 18.8096 , 8.76356 , 18.6815 , 21.4663 , 3.34664 , 1.22474 , 4.09878 , 12.8374 , 1.64317 , 0 , 8.5557 |
|
||||
|10 | 23.4307 , 15.7226 , 25.4912 , 28.3549 , 10.1587 , 6.14817 , 10.7331 , 19.7788 , 5.6745 , 6.9857 , 0 |;
|
||||
|
||||
param demandas[N] :=
|
||||
<1> 1135,
|
||||
<2> 7063,
|
||||
<3> 51,
|
||||
<4> 23,
|
||||
<5> 3074,
|
||||
<6> 349,
|
||||
<7> 1047,
|
||||
<8> 698,
|
||||
<9> 3001,
|
||||
<10> 31;
|
||||
|
||||
param K:= 4; # número de vehículos
|
||||
param C:= 7200; # capacidad de los vehículos
|
||||
|
||||
defnumb r(h):= ceil((sum <i> in S[h] : demandas[i]) / C);
|
||||
|
||||
var x[A] binary;
|
||||
|
||||
minimize costo_total : sum <i,j> in A : costo[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 grado_sal_deposito :
|
||||
sum <j> in N : x[0,j] == K;
|
||||
subto grado_ent_deposito :
|
||||
sum <j> in N : x[j,0] == K;
|
||||
subto capacidad_corte : forall <h> in H with card(S[h])>0 do
|
||||
sum <i,j> in A with (<i> in S[h]) and (<j> in V - S[h]) : x[i,j] >= r(h);
|
||||
|
||||
@@ -0,0 +1,92 @@
|
||||
#####################################################
|
||||
# Instancia: data/inst2.vrp
|
||||
# Tipo: ACVRP
|
||||
# Generada automaticamente
|
||||
#####################################################
|
||||
|
||||
set N:={1..20};
|
||||
set V:= N + {0,21};
|
||||
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*{21}; # para los arcos
|
||||
set Ay := A + N*{0} + {21}*N; # para indexar y
|
||||
|
||||
# costos de desplazamiento
|
||||
param c[A2] :=
|
||||
| 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21|
|
||||
| 0| 0, 1354, 1627, 1509, 1768, 1426, 1378, 1851, 1759, 2205, 1600, 1227, 1650, 1613, 1165, 1526, 1744, 1709, 1069, 1505, 793, 0|
|
||||
| 1| 1407, 0, 337, 1489, 1880, 1434, 584, 1937, 1806, 2477, 1047, 158, 327, 268, 500, 242, 402, 356, 300, 322, 2100, 1407|
|
||||
| 2| 1620, 311, 0, 1772, 2163, 1722, 838, 2216, 2086, 2764, 1283, 400, 349, 270, 543, 100, 334, 250, 605, 158, 2248, 1620|
|
||||
| 3| 2206, 1868, 2165, 0, 391, 122, 1115, 449, 320, 991, 641, 1906, 1753, 1832, 2222, 2096, 1836, 1912, 1692, 2190, 2966, 2206|
|
||||
| 4| 2580, 2351, 2649, 483, 0, 582, 1595, 83, 104, 601, 1063, 2387, 2230, 2313, 2697, 2579, 2310, 2390, 2169, 2674, 3308, 2580|
|
||||
| 5| 2084, 1773, 2077, 83, 449, 0, 1038, 514, 389, 1043, 629, 1805, 1678, 1753, 2115, 2004, 1765, 1836, 1587, 2096, 2845, 2084|
|
||||
| 6| 1723, 799, 1063, 944, 1333, 902, 0, 1382, 1251, 1934, 463, 882, 640, 717, 1242, 1004, 728, 797, 734, 1111, 2509, 1723|
|
||||
| 7| 2702, 2448, 2741, 582, 122, 688, 1682, 0, 161, 559, 1125, 2488, 2313, 2399, 2803, 2674, 2390, 2473, 2273, 2770, 3430, 2702|
|
||||
| 8| 2574, 2287, 2579, 423, 100, 532, 1521, 130, 0, 687, 971, 2328, 2152, 2238, 2645, 2512, 2230, 2313, 2115, 2609, 3312, 2574|
|
||||
| 9| 3148, 3063, 3365, 1199, 717, 1289, 2313, 640, 797, 0, 1765, 3092, 2948, 3030, 3391, 3294, 3027, 3107, 2868, 3386, 3819, 3148|
|
||||
| 10| 2196, 1445, 1692, 605, 960, 600, 647, 992, 867, 1551, 0, 1528, 1224, 1324, 1884, 1642, 1289, 1385, 1363, 1753, 2989, 2196|
|
||||
| 11| 1258, 134, 419, 1477, 1866, 1417, 618, 1926, 1797, 2457, 1080, 0, 459, 402, 367, 314, 536, 488, 216, 337, 1942, 1258|
|
||||
| 12| 1781, 418, 500, 1502, 1888, 1462, 559, 1934, 1804, 2490, 968, 574, 0, 122, 908, 489, 104, 161, 620, 612, 2502, 1781|
|
||||
| 13| 1708, 316, 382, 1545, 1934, 1502, 601, 1982, 1852, 2536, 1028, 474, 83, 0, 793, 367, 134, 104, 556, 489, 2414, 1708|
|
||||
| 14| 1126, 350, 488, 1670, 2053, 1604, 860, 2118, 1991, 2634, 1317, 250, 664, 592, 0, 402, 720, 654, 389, 356, 1708, 1126|
|
||||
| 15| 1528, 216, 104, 1694, 2086, 1642, 770, 2140, 2010, 2685, 1223, 300, 334, 250, 474, 0, 350, 272, 506, 122, 2169, 1528|
|
||||
| 16| 1861, 474, 489, 1589, 1974, 1551, 650, 2018, 1888, 2575, 1043, 632, 100, 158, 946, 500, 0, 122, 703, 620, 2571, 1861|
|
||||
| 17| 1791, 387, 367, 1630, 2018, 1589, 687, 2064, 1934, 2619, 1098, 543, 130, 100, 836, 380, 83, 0, 648, 500, 2485, 1791|
|
||||
| 18| 1161, 314, 641, 1283, 1668, 1219, 501, 1732, 1604, 2255, 941, 242, 581, 550, 532, 538, 677, 651, 0, 578, 1897, 1161|
|
||||
| 19| 1483, 260, 134, 1749, 2140, 1694, 835, 2197, 2067, 2738, 1293, 311, 418, 334, 387, 83, 431, 350, 527, 0, 2095, 1483|
|
||||
| 20| 592, 1866, 2100, 2051, 2261, 1969, 1962, 2344, 2268, 2624, 2191, 1732, 2180, 2133, 1613, 2006, 2266, 2221, 1609, 1969, 0, 592|
|
||||
| 21| 0, 1354, 1627, 1509, 1768, 1426, 1378, 1851, 1759, 2205, 1600, 1227, 1650, 1613, 1165, 1526, 1744, 1709, 1069, 1505, 793, 0|;
|
||||
|
||||
# demandas
|
||||
param d[N] :=
|
||||
<1> 7063,
|
||||
<2> 51,
|
||||
<3> 23,
|
||||
<4> 3074,
|
||||
<5> 349,
|
||||
<6> 1047,
|
||||
<7> 698,
|
||||
<8> 3001,
|
||||
<9> 31,
|
||||
<10> 1135,
|
||||
<11> 21611,
|
||||
<12> 57,
|
||||
<13> 51,
|
||||
<14> 551,
|
||||
<15> 179,
|
||||
<16> 6,
|
||||
<17> 528,
|
||||
<18> 2832,
|
||||
<19> 1514,
|
||||
<20> 889;
|
||||
|
||||
# número de vehiculos
|
||||
param K:= 4;
|
||||
|
||||
# capacidades
|
||||
param C:= 21611;
|
||||
|
||||
# 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,21] + y[21,i] == C*(x[i,21]);
|
||||
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 <21,j> in Ay : y[21,j] == K*C;
|
||||
Reference in New Issue
Block a user