##################################################### # 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 := { 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 in A : c[i,j] * x[i,j]; subto grado_sal_cliente : forall in N do (sum in A : x[i,j]) == 1; subto grado_ent_cliente : forall in N do (sum in A : x[j,i]) == 1; subto demanda_flujo : forall in N do (sum in Ay : y[j,i]) - (sum in Ay : y[i,j]) == 2*d[i]; subto vinculacion_1 : forall in N*N with i in N do y[0,j] + y[j,0] == C*(x[0,j]); subto vinculacion_3 : forall in N do y[i,21] + y[21,i] == C*(x[i,21]); subto eliminar_lazos_dobles : forall in N*N with i in Ay : y[0,j] == sum in N : d[i]; subto salida_deposito_retorno : sum <21,j> in Ay : y[21,j] == K*C;