$Title Fahrplanerstellung $Ontext Vorlesung: Service Operations Management Abschnitt: 3.4 Timetabling Problemstellung: Optimierung von Fahrplaenen des oeffentlichen Personenverkehrs als Periodic Event Scheduling - Data - Author: Christoph Schwindt Date: 27/12/2019 $Offtext $eolcom// $include periodic-event-scheduling_data.gms variables f Gewichtete Summe aus Anzahl der Fahrzeuge (Primaerkriterium) sowie Summe von Warte- und Umsteigezeiten (Sekundaerkriterium) t(i) Eintrittszeitpunkt von Ereignis i y(i,j) Ternaere Entscheidungsvariable zur Darstellung von (t(j)-t(i)-l(ij)) mod BigT ; positive variables t ; integer variables y ; equations def_f Definition der Zielfunktion mindestabstand(i,j) Einhaltung des Mindestabstands zwischen Ereignissen i und j hoechstabstand(i,j) Einhaltung des Hoechstabstands zwischen Ereignissen i und j ; def_f.. f =g= sum((i,j)$a(i,j), w(i,j)*(t(j)-t(i)+bigT*y(i,j))) ; mindestabstand(i,j)$a(i,j).. t(j)-t(i)+bigT*y(i,j) =g= l(i,j) ; hoechstabstand(i,j)$a(i,j).. t(j)-t(i)+bigT*y(i,j) =l= u(i,j) ; t.up(i) = bigT-1 ; // Eintrittszeitpunkte muessen aus einem Zyklus gewaehlt werden ; y.up(i,j)$a(i,j) = 2 ; // y(i,j) sind ternaere Variablen t.fx(i)$(ord(i)=1) = 0 ; // eliminiere Freiheitsgrad model periodic_event_scheduling / all / ; options mip = cplex optcr = 0 reslim = 60 ; solve periodic_event_scheduling minimzing f using mip ; scalar anz_zuege ; anz_zuege = ceil(1/bigT*sum((i,j)$(a(i,j) and (not umstieg(i,j))), round(t.l(j)-t.l(i)+bigT*y.l(i,j)))) ; // Alternativ: anz_zuege = sum((i,j)$(a(i,j) and (not umstieg(i,j))), y.l(i,j)) ; display t.l, y.l, 'Anzahl benoetigter Zuege (in standardisierter Instanz!)', anz_zuege ;