##################################################################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 := { 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 in S[h] : demandas[i]) / C); var x[A] binary; minimize costo_total : sum in A : costo[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 grado_sal_deposito : sum in N : x[0,j] == K; subto grado_ent_deposito : sum in N : x[j,0] == K; subto capacidad_corte : forall in H with card(S[h])>0 do sum in A with ( in S[h]) and ( in V - S[h]) : x[i,j] >= r(h);