Martin Weissenböck, HTL Wien IV

Mathematische Modelle für die Parkplatzvergabe

Mathematische Inhalte:

Statistik. Präsentationsgrafik. Anwendung: Zufallszahlen. Mathematische Modelle Kurzzusammenfassung: Mathematische Modelle als Grundlage zur Entscheidungsfindung bei einer Lehrerkonferenz werden gezeigt. Lehrplanbezug: Statistik Zeitaufwand: Kann in einer Stunde erklärt werden. Mediales Umfeld: Verwendete Medien: Personal Computer, Display für Overheadprojektor
Verwendete Software: Turbo-Pascal
Dateien zum Herunterladen: we_park*.pas, we_park*.exe
Anmerkungen: Auf der Diskette sind unterschiedliche Versionen enthalten: je nach Zeitrahmen können Tabellen und Grafik nur vorgeführt oder die Details des Programms besprochen werden. 1. Das Problem

Die Höhere technische Bundeslehranstalt Wien 4 liegt in dicht verbautem Gebiet. Parkplätze außerhalb der Schule sind (außer zu sehr ungewöhnlichen Zeiten) fast nicht zu finden. Andererseits liegt die Schule in unmittelbarer Nähe des U-Bahnknotens Karlsplatz und ist damit über drei U-Bahnlinien, sieben Straßenbahnlinien und zwei Autobuslinien gut zu erreichen.
Die HTL Wien 4 hat einen kleinen Innenhof mit zwei großen Bäumen, einer Rasenfläche und einer Abstellfläche, die Platz für 10 bis 15 Autos bietet. Rund 50 Lehrer sind an der Schule tätig. Derzeit finden noch Umbauarbeiten statt. Wie soll der Platz nach Ende dieser Arbeiten genutzt werden?
In einer Umfrage im Juni 1993 wurde zuerst für jeden Wochentag einzeln ermittelt, an wievielen Tagen pro Jahr jeder Mitarbeiter gerne mit dem Auto in die Schule fahren möchte. Eine weitere Frage zielte auf die maximale Anzahl von Autos, die im Schulhof abgestellt sein dürfen.
Bereits diese Umfrage zeigte große Auffassungsunterschiede: fünf Lehrer sprachen sich beispielsweise dafür aus, den Hof völlig frei von Autos zu halten.

Die Frage war:
Kann eine mathematische Simulation Entscheidungsgrundlagen für eine Lehrerkonferenz in dieser Frage liefern? Oder: kann der Computer dazu beitragen, die Zufriedenheit der Lehrkräfte zu optimieren?

2. Das Modell

program parkplatz;
uses crt,printer,graph;
const
    maxlehrer=60;
   eingdatei='parkpl.dat';
   wochen = 40;

Pro Lehrer wird die "Toleranzschwelle" (d.h. die maximal vertretbare Anzahl von Fahrzeugen) und die Angabe, an wieviel Montagen, Dienstagen usw. pro Jahr ein Parkplatz in Anspruch genommen würde, abgefragt. Diese Daten sind in einem Feld (Typ: Einzelmeinung) gespeichert: der Index 0 entspricht der Toleranzschwelle, die Indizes 1 bis 6 den Tagen Montag bis Samstag.

Beispiele: Wenn Lehrer A am Montag nie mit dem Auto fährt, gibt er 0 an. Wenn Lehrer B an jedem Montag mit dem Auto fahren möchte, gibt er für den Montag 40 an. Lehrer C will an 10 Montagen sein Auto benutzen und gibt daher 10 an.

Alle Meinungen bilden ein zweidimensionales Feld (Typ: Autotabelle). Der Einfachheit halber wird ein Jahr mit 40 Wochen angesetzt.

type
   einzelmeinung=array [0..6] of integer;
   autotabelle=array[1..maxlehrer] of einzelmeinung;
   tag=array[1..6] of integer;

procedure lesen (var t:autotabelle;var anz:integer);
   var
      datei: text;
      i:integer;
   begin
       assign(datei,eingdatei);
       reset(datei);
       anz:=0;
       while not eof(datei) do
       begin
            anz:=anz+1; { Hier wird die Anzahl der Lehrer gezählt }
            for i:=1 to 6 do
           read(datei,t[anz,i]);
           readln(datei,t[anz,0])
       end
   end; (* lesen *)

Die folgende Funktion ist das Kernstück der gesamten Simulation: wieviele Autos würden an einem bestimmten Wochentag t abgestellt sein? Dazu wird für jeden Wochentag und jeden Lehrer eine Zufallszahl zwischen 0 und 40 bestimmt. Ist diese Zufallszahl kleiner oder gleich der gespeicherten Angabe, fährt der Lehrer (in der Simulation) an diesem Tag mit seinem Auto. Daher wird für diesen Tag die Anzahl der Autos um 1 erhöht.

In den vorher genannten Beispielen: wenn A den Wert 0 angegeben hat, kann die Zufallszahl niemals kleiner als 0 sein. A trägt daher (wie zu erwarten war) nichts zur Anzahl der geparkten Autos bei. Lehrer B hat 40 angegeben. Jede ermittelte Zufallszahl ist kleiner oder gleich 40, daher wird immer ein Auto dazu gezählt. Lehrer C schließlich wird im Durchschnitt bei jedem vierten Versuch ein Auto "beitragen".

Allgemein: die Zufallszahl zwischen 0 und 40 wird mit der Angabe a jedes einzelnen Lehrers i für den jeweiligen Wochentag t verglichen. Ist die Zufallszahl nicht größer als der Vergleichswert, dann wird ein Auto "geparkt"; die Anzahl der simulierten Autos sim erhöht sich um 1.

function simuliere_tag (t:integer;a:autotabelle;anz:integer):integer;
   var
     i:integer;
     sim:integer;
  begin
       sim:=0;
       for i:=1 to anz do
       if random * wochen <= a[i,t] then sim:=sim+1;
      simuliere_tag:=sim
  end; (* simuliere_tag *)

   var
   t:autotabelle;
   anz:integer;

In der Prozedur drucke_ergebnis wird die simulierte Autozahl ausgegeben und für jeden einzelnen Lehrer mit der Toleranzschwelle verglichen. Ist die simulierte Zahl höchstens gleich der Toleranzschwelle, dann erhöht sich die Anzahl der zufriedenen Lehrer zuf um 1. Die Ergebnisse werden nacheinander für jeden Wochentag ausgegeben.

procedure drucke_ergebnis(var f:text);
   var
      tt,sim,i,zuf:integer;
   begin
       for tt:=1 to 6 do
        begin
               zuf:=0;
               for i:=1 to wochen do
                   begin
                        sim:=simuliere_tag(tt,t,anz);
                        if sim <= t[i,0] then zuf:=zuf+1;
                       write(f, sim:2);
                   end;
               writeln(f);
               writeln(f,' Anzahl=',anz:4,' zufr=',zuf:4,' Tag=',tt);
          end;
          writeln(f)
     end;

procedure grafik(var art:char);
procedure ein_auto(tag,nr,f:integer);
   var
      x1,y1,x2,y2:integer;
   begin
        x1:=tag*100 - 60;
        x2:=x1+75;
        y1:=10+(13-nr)*25;
        y2:=y1+23;
        setfillstyle(1,f);
        bar(x1,y1,x2,y2)
    end;

procedure eine_marke(tag,nr,f:integer);
    var
        x1,y1,x2,y2:integer;
    begin
        x1:=tag*100 +17;
        x2:=x1+3;
        y1:=10+(13-nr)*25;
        y2:=y1+23;
       setfillstyle(1,f);
       bar(x1,y1,x2,y2)
    end;

    var
        i,j,woche,sim,tt:integer;
        karte,modus:integer;
        min,max,zahl: array[1..6] of integer;
        st:string[3];
    begin
         karte:=detect;
         initgraph(karte,modus,'.\bgi');
         settextstyle(defaultfont,horizdir,2);
         outtextxy( 0,315,' 1');
         outtextxy( 0,290,' 2');
         outtextxy( 0,265,' 3');
         outtextxy( 0,240,' 4');
         outtextxy( 0,215,' 5');
         outtextxy( 0,190,' 6');
         outtextxy( 0,165,' 7');
         outtextxy( 0,140,' 8');
         outtextxy( 0,115,' 9');
         outtextxy( 0,090,'10');
         outtextxy( 0, 65,'11');
         outtextxy( 0, 40,'12');
         settextstyle(defaultfont,horizdir,4);
         outtextxy( 55,340,'Mo');
         outtextxy(155,340,'Di');
         outtextxy(255,340,'Mi');
         outtextxy(355,340,'Do');
         outtextxy(455,340,'Fr');
         outtextxy(555,340,'Sa');
         outtextxy(355,380,'Woche:');
         for i:= 1 to 6 do zahl[i]:=1;
         for i:= 1 to 6 do min[i]:=12;
         for i:= 1 to 6 do max[i]:=0;
         for woche:=1 to 40 do
         begin
              str(woche:2,st);
              setfillstyle(1,0);
              bar(555,380,635,420);
              outtextxy(555,380,st);
              for i:=1 to 6 do
              begin
                   sim:=simuliere_tag(i,t,anz);
                   if sim>=zahl[i] then
                   for j:=zahl[i] to sim do
                   begin
                        ein_auto(i,j,5);
                        if art<='1' then delay(1400)
                        else delay(300)
                    end
                    else
                    for j:=zahl[i] downto sim+1 do
                    begin
                         ein_auto(i,j,0);
                          if art<='1' then delay(1400)
                         else delay(300)
                    end;
                    zahl[i]:=sim;
                    if sim > max[i] then max[i]:=sim;
                    if sim < min[i] then min[i]:=sim;
                    if art<='1' then art:=readkey;
                    for j:=min[i] to max[i] do
                    eine_marke(i,j,7);
                    if art<='1' then art:=readkey;
              end;
         end;
         art:=readkey;
         closegraph;
     end;

Im Hauptprogramm erfolgt die Ausgabe wahlweise auf dem Schirm ('S') oder auf dem Drucker ('D').

  var
      c:char;
  begin
       randomize;
       lesen(t,anz);
       readln(c);
       case c of
       'D': drucke_ergebnis(lst);
      'S': drucke_ergebnis(output);
        '1'..'5': grafik(c);
   end;
end.

In der Programmversion auf der Diskette ist noch eine Variante enthalten, die die Anzahl der Autos als Balkengrafik mit "Animation" zeigt: eine zeitliche Verzögerung erlaubt die Beobachtung der Entwicklung.

3. Die Konferenz

Nach diesen Vorbereitungen habe ich bei einer Lehrerkonferenz vier verschiedene Modelle für die Vergabe der Parkplätze vorgestellt:

4. Die Grafiken

Bei der Konferenz wurde eine Reihe von Grafiken präsentiert:

1. Beispiel: Die Simulation von zwei Wochentagen

Natürlich weichen (bedingt durch den Zufallszahlengenerator) die Ergebnisse bei einzelnen Simulationsläufen von einander ab. Der folgende Ausschnitt zeigt die Ergebnisse eines Laufes für die Wochentage Freitag und Samstag über 35 Wochen.

2. Beispiel: Die Anzahl der zufriedenen Lehrer

Zur Entscheidungshilfe wird nun für jeden einzelnen Tag des Jahres die Akzeptanz festgestellt: wieviele Lehrer sind mit der Anzahl der abgestellten Fahrzeuge zufrieden? Im folgenden Diagramm sind die Ergebnisse in Prozent für eine Woche dargestellt:

5. Die Diskussion

Die Diskussion beschäftigte sich bald mit grundlegenden Fragen. Zusammengefaßt einige Wortmeldungen:

6. Die Entscheidung

Nach eingehender Diskussion wurde die vierte Variante (das "stochastische Modell") um einen "Notparkplatz" erweitert: nur ein Parkplatz kann bei Bedarf für die Dauer einer Ladetätigkeit reserviert werden: damit steht für diese Zwecke ein garantierter Platz zur Verfügung.

Die radikal-alternative Variante erhielt bei der Abstimmung keine Stimme, das feudalistische Prinzip eine Stimme, die bürokratische Lösung 4 Stimmen und die modifizierte vierte Variante mit 12 Stimmen den Zuschlag.

7. Zusammenfassung

Für die Schriftenreihe der AMMU ist die Frage interessant: Kann die Angewandte Mathematik und die EDV als Hilfsmittel für demokratische innerschulische Entscheidungsprozesse verwendet werden? Wie weit sind überhaupt - abgesehen von dem vorliegenden Problem - solche Modelle geeignet, Entscheidungshilfen zu liefern? Das Experiment und die Diskussion lieferten jedenfalls interessante Denkanstöße.