'' Seilbahn ( ereignisorientiert) '' (c) R.Leins , 01rea88 Preamble Normally, mode is undefined '' Ereignisdefinition: Kundengenerator, Ankunft neuer Kunde, Seilbahnfahrt und Endauswertung Event notices include KundenGen, NeuerKunde, SbFahrt and FinalReport '' temporäre Elemente: Kunde mit Warteschlangenzugehörigkeit und Ankunftszeit Temporary Entities Every Kunde has an Ankunftszeit and may belong to the Warteschlange Define Ankunftszeit as a real variable '' Warteschlange The system owns the Warteschlange Define Warteschlange as a FIFO set Define SimZeit, lambda, SumWartezeit and letzteFahrt as real variables Define MinKundenAnz, SumKunden, SumGr30 and SumFahrten as integer variables End ''Preamble Main skip 2 lines print 3 lines thus Seilbahnsimulation (ereignisorientiert) ======================================= (c) R.Leins , 01rea88 call ReadData call Init start simulation End ''Main ''*** Dateneingabe '' Routine to ReadData print 1 line thus Dateneingabe: skip 1 line print 1 line thus Simulationsdauer in Stunden : read SimZeit print 1 line thus min. Kundenanzahl für eine Fahrt: read MinKundenAnz print 1 line thus Ankunftsintensität in Kunden/Minute : read lambda skip 2 lines End ''readData ''*** Initialisieren des Simulationslaufes '' Routine To Init Schedule a FinalReport in SimZeit Hours Schedule a SbFahrt in 10 minutes Schedule a KundenGen now End ''Init ''*** Kundengenerator: dient der Erzeugung von Kunden gemäß Ankunftsverteilung '' Event KundenGen schedule an NeuerKunde now schedule a KundenGen in exponential.f(1/lambda,1) minutes End ''KundenGen ''*** Ereignisroutine: Neuer Kunde gekommen '' Event NeuerKunde Create a Kunde File this Kunde in Warteschlange Let Ankunftszeit(Kunde) = time.v if n.Warteschlange > 30 let SumGr30=SumGr30 + 1 always if n.Warteschlange >= MinKundenAnz for each SbFahrt in Ev.s(i.SbFahrt) ''ev.s systemverwaltetes Set --> Ereignisliste find the first case if none schedule a SbFahrt now endif always End''NeuerKunde ''*** Ereignisroutine Seilbahnfahrt Event SbFahrt define i as a integer variable if n.Warteschlange >= MinKundenAnz let SumFahrten=SumFahrten + 1 Let LetzteFahrt=time.v for i=1 to 30 with N.Warteschlange > 0 do remove first Kunde from Warteschlange let SumWarteZeit=SumWarteZeit + (time.v-AnkunftsZeit(Kunde)) add 1 to SumKunden loop Schedule an SbFahrt in 10 minutes always End''SbFahrt ''*** Endauswertung Event FinalReport skip 1 line print 1 line thus Auswertung: skip 1 line print 12 lines with time.v*hours.v, MinKundenAnz, SumKunden, SumFahrten, SumGr30, SumGr30/SumKunden*100, SumKunden/SumFahrten, SumWarteZeit/SumKunden*hours.v*minutes.v, LetzteFahrt/SumFahrten*hours.v*minutes.v thus Simulation endet nach ***.** Stunden Mindestbesetzung der Kabine ** Kunden ----------------------------------------------- Anzahl der beförderten Kunden ***** Anzahl der Fahrten **** Anzahl der Fahrten, wo nicht alle Kunden mitkamen: ** ------------------------------------------------------------------------------ Anteil der Kunden, die nicht mit der nächsten Bahn mitkommen : **.* Prozent Auslastung der Seilbahn: **.** Plätze mittlere Wartezeit eines Kunden: **.** Minuten mittlere Fahrtabstand : **.** Minuten ______________________________________________________________________________ stop End''FinalReport