$Title Timetabling $Ontext Vorlesung: Distributionslogistik Abschnitt: 2.5 Timetabling in Hub-and-Spoke-Netzwerken Problemstellung: Erstellung eines Linienfahrplans fuer Fernverkehrstransporte in einem Hub-and-Spoke-Netzwerk - Model - Author: Christoph Schwindt Date: 18/11/2019 $Offtext $eolcom// $include timetabling_data.gms variables kosten Gesamtkosten fuer den Einsatz der Fahrzeuge (Zielfunktion) x(i,j,h,k,l,t) Zu Beginn von Periode t mit Fahrzeugen des Typs l von Knoten i zu Knoten j versandte Menge aus Depot h fuer Depot k y(i,j,l,t) Anzahl der Fahrzeuge des Typs l die zu Beginn von Periode t von Knoten i aus zu Knoten j starten z(i,l) Anzahl benoetigter Fahrzeuge des Typs l in Knoten i ; positive variables x ; integer variables y ; equations def_kosten Definition der Gesamtkosten versandmenge(h,k,t) Begrenzung der Versandmenge in Depot h fuer Depot k bis Periode t ausliefermenge(h,k,t) Begrenzung der Ausliefermenge in Depot k aus Depot h bis Periode t umschlagsmenge(h,k,i,t) Bereitstellung der bis Periode t in Hub i umzuschlagenden Menge aus Depot h fuer Depot k transportkapazitaet(i,j,l,t) Einhaltung der Transportkapazitaet auf Relation i-j mit Fahrzeugen des Typs l in Periode t rueckkehr(i,l) Rueckkehr zum Knoten i der Fahrzeuge vom Typ l am Ende eines Zyklus umschlagskapazitaet(i,t) Einhaltung der Umschlagskapazitaet in Hub i in Periode t def_fahrzeuge(i,l,t) Definition der Anzahl der in Knoten i benoetigten Fahrzeuge des Typs l fuer Periode t ; def_kosten.. kosten =e= sum(l, c(l)*sum(i$node_with_vehicle(i,l), z(i,l))) + epsilon*sum(t, sum((i,j)$a(i,j), sum(l$arc_with_vehicle(i,j,l), y(i,j,l,t)))) ; versandmenge(h,k,t).. sum(tPrime$(ord(tPrime) le ord(t)), sum(i$arc_on_paths(h,k,h,i), sum(l$arc_with_vehicle(h,i,l), x(h,i,h,k,l,tPrime)))) =l= sum(tPrime$(ord(tPrime) le ord(t)), b(h,k,tPrime)) ; ausliefermenge(h,k,t).. sum(tPrime$(ord(tPrime) le ord(t)), sum(j$arc_on_paths(h,k,j,k), sum(l$(arc_with_vehicle(j,k,l) and (ord(tPrime) > p(j,k,l))), x(j,k,h,k,l,tPrime-p(j,k,l))))) =g= sum(tPrime$(ord(tPrime) le ord(t)), b_hat(h,k,tPrime)) ; umschlagsmenge(h,k,i,t)$hub(i).. sum(tPrime$(ord(tPrime) le ord(t)), sum(j$arc_on_paths(h,k,j,i), sum(l$(arc_with_vehicle(j,i,l) and (ord(tPrime) > p(j,i,l)+q(i,l))), x(j,i,h,k,l,tPrime-(p(j,i,l)+q(i,l)))))) =g= sum(tPrime$(ord(tPrime) le ord(t)), sum(j$arc_on_paths(h,k,i,j), sum(l$arc_with_vehicle(i,j,l), x(i,j,h,k,l,tPrime)))) ; transportkapazitaet(i,j,l,t)$arc_with_vehicle(i,j,l).. sum((h,k)$arc_on_paths(h,k,i,j), x(i,j,h,k,l,t)) =l= v(l)*y(i,j,l,t) ; rueckkehr(i,l).. sum(t, sum(j$(a(i,j) and arc_with_vehicle(i,j,l)), y(i,j,l,t))) =e= sum(t, sum(j$(a(j,i) and arc_with_vehicle(j,i,l) and (ord(t) > p(j,i,l)+q(i,l))), y(j,i,l,t-(p(j,i,l)+q(i,l))))) ; umschlagskapazitaet(i,t)$hub(i).. sum(l$node_with_vehicle(i,l), r(i,l)*sum(j$(a(j,i) and arc_with_vehicle(j,i,l)), sum(tPrime$((ord(tPrime) > ord(t)-p(j,i,l)-q(i,l)) and (ord(tPrime) le ord(t)-p(j,i,l))), y(j,i,l,tPrime-p(j,i,l))))) =l= u(i,t) ; def_fahrzeuge(i,l,t)$node_with_vehicle(i,l).. z(i,l) =g= sum(tPrime$(ord(tPrime) le ord(t)), sum(j$arc_with_vehicle(i,j,l), y(i,j,l,tPrime))) - sum(tPrime$(ord(tPrime) le ord(t)), sum(j$(arc_with_vehicle(j,i,l) and (ord(tPrime) > p(j,i,l)-q(i,l))), y(j,i,l,tPrime-(p(j,i,l)+q(i,l))))) ; model timetabling / all / ; options mip = cplex optcr = 0 reslim = 60 ; x.fx(i,j,h,k,l,t)$(not (arc_on_paths(h,k,i,j) and arc_with_vehicle(i,j,l))) = 0 ; y.fx(i,j,l,t)$(not arc_with_vehicle(i,j,l)) = 0 ; z.fx(i,l)$(not node_with_vehicle(i,l)) = 0 ; solve timetabling minimzing kosten using mip ; display kosten.l, x.l, y.l, z.l ;