Sets i clientes e armazens /1*11/ m intervalo de tempo /1*3/ k numero de veiculos /k1*k2/ ; Alias(i,j) ; Scalars t0 tempo de partida /0/ B1 /50000/ B2 /50000/ B /10/ nc numero de clientes /7/ ; Parameters tserv(i) tempo de servico em i/ 1 300 2 300 3 300 4 300 5 300 6 300 7 300 8 0 9 0 10 0 11 0 / lsup(i,j,m) limite superior do intervalo de tempo m para o arco ij *$call gdxxrw lsup.xlsx par=lsup rng=lsup!A2 Rdim=3 Dset=i rng=lsup!A2 Rdim=1 Dset=j rng=lsup!B2 Rdim=1 Dset=m rng=lsup!C2 Rdim=1 $gdxin lsup.gdx load lsup $gdxin cap(k) capacidade do veiculo k/ k1 10 k2 10 / proc(i) quantidade a ser entregue no cliente i/ 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 0 9 0 10 0 11 0 / tviag(i,j,m) tempo de viagem entre i e j no intervalo m *$call gdxxrw tviag.xlsx trace=3 par=tviag rng=tviag!A2 Rdim=3 Dset=i rng=tviag!A2 Rdim=1 Dset=j rng=tviag!B2 Rdim=1 Dset=m rng=tviag!C2 Rdim=1 $gdxin tviag.gdx load tviag $gdxin ; Variables x(i,j,m) t(j) w(j) z ; Binary Variables x ; Positive Variables t, w ; Equations Obj Eq1(j,m) Eq2(i,m) Eq3(i) Eq4(i,j,m) Eq5(i,j,m) Eq6(i,j,m) Eq7(i,j) Eq8(i) Eq9(j,k) ; Obj .. z =e= sum((i)$(ord(i)>9),t(i)); Eq1(j,m)$(ord(j)<8 and ord(j)>9) .. sum((i)$(ord(i)<10 and ord(i)<>ord(j)),x(i,j,m)) =e= 1; Eq2(i,m)$(ord(i)<8) .. sum((j)$(ord(j)<8 and ord(j)>9),x(i,j,m)) =e= 1; Eq3(i)$(ord(i)=1) .. t(i) =e= t0; Eq4(i,j,m)$(ord(i)<>ord(j) and ord(i)<10 and ord(j)<8 and ord(j)>9) .. t(j) - t(i) - B1*x(i,j,m) =g= tviag(i,j,m) + tserv(j) - B1; Eq5(i,j,m)$(ord(i)<>ord(j) and ord(i)<10 and ord(j)<8 and ord(j)>9) .. t(i) + B2*x(i,j,m) =l= lsup(i,j,m) + B2; Eq6(i,j,m)$(ord(i)<>ord(j) and ord(i)<10 and ord(j)<8 and ord(j)>9) .. t(i) - lsup(i,j,m-1) =g= 0; Eq7(i,j)$(ord(i)<>ord(j) and ord(i)<10 and ord(j)<8 and ord(j)>9) .. w(i) - w(j) - B*sum((m),x(i,j,m)) =g= proc(j) - B; Eq8(i)$(ord(i)>9) .. w(i) =e= 0; Eq9(j,k) .. w(j) =l= cap(k); Model tdvrp /all/; tdvrp.optcr=0; solve tdvrp using mip minimizing z; display t.l;