Im ersten Artikel zum Thema Computer-Simulationen haben wir uns mit dem eher abstrakten Ziegenproblem beschäftigt. Im heutigen Artikel soll es um ein Problem gehen, welches uns im Alltag zum allgemeinen Ärger öfter begegnet, nämlich um die Entstehung von Staus.
Zu diesem Thema wurden bereits verschiedene Experimente angestellt; ein recht bekanntes mit der Kreisfahrt kann zum Beispiel hier bewundert werden:
Der Kern des Experimentes ist es also, mehrere Autos so lang im Kreis fahren zu lassen, bis sich ein (kleiner) Stau bildet. So weit, so einfach. Nun ist es aber natürlich etwas mühselig und kostspielig, für derartige Experimente immer eine Menge Fahrer mit ihren Autos zu organisieren und diese dann stundenlang im Kreis fahren zu lassen. Effizienter (und günstiger) ist es da, die Autos stattdessen am Computer zu simulieren. Das kostet nicht viel, ist recht einfach zu realisieren und erlaubt es vor allem, schnell Parameter des Experimentes zu ändern, um so verschiedene Hypothesen testen zu können. Ich habe das Experiment einmal in eine einfache Simulation gegossen, und das sieht folgendermaßen aus (die Farbe der Fahrzeuge gibt deren Geschwindigkeit wieder, eine Verringerung des Mindestabstandes führt sehr schnell zu sichtbaren “Ergebnissen”):
Die Simulation zeigt sehr schön, welche Auswirkung das Einhalten eines größeren Mindestabstandes zum vorausfahrenden Fahrzeug hat, um einen Stau zu vermeiden: je größer der Abstand gewählt wird, desto länger dauert es, bis sich im Fahrzeug-Kreis ein Stau entwickelt.
Um zu zeigen, wie einfach sich eine derartige Simulation umsetzen lässt, stelle ich im folgenden den zugehörigen Programmcode vor. Umgesetzt wurde das ganze mit Hilfe von ActionScript 3 und dem Flex Framework – auf Deutsch, mit Flash. Wer Lust hat, das ganze einmal nachzuprogrammieren, findet hier eine passende, kostenlose Entwicklungsumgebung für Flash (als Projekttype “Flex 4” auswählen). Und los geht es.
Unsere Stau-Simulation besteht am Ende aus drei Dateien. Die erste enthält die Beschreibung der Oberfläche (der Knopf, der Schieberegler und die Fläche mit den dargestellten Fahrzeugen), die zweite die allgemeine Programmlogik und die dritte Datei schließlich eine spezielle Beschreibung der Fahrzeuge. Im Detail sehen diese drei Dateien wie folgt aus; wie auch im letzten Artikel zeige ich zuerst die gesamte Datei und erkläre dann die einzelnen Zeilen im Detail (wer an der Optik kein Interesse hat und nur die Programmlogik sehen möchte, möge direkt zur Datei Main.as springen):
Main.mxml:
<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="https://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx"> <fx:Script source="Main.as"/> <s:VGroup horizontalCenter="0" horizontalAlign="center"> <s:HGroup verticalAlign="middle"> <s:Button label="Fahrzeuge zurücksetzen" click="reset()" /> <s:Label text="Mindestabstand:"/> <s:HSlider id="dist" minimum="5" maximum="50" stepSize="5" value="20" change="reset()" /> <s:Label text="{dist.value}" /> </s:HGroup> <s:BorderContainer id="panel" width="400" height="400" addedToStage="reset()" enterFrame="update()" /> </s:VGroup> </s:Application>
Keine Angst – das sieht jetzt erst einmal schlimmer aus, als es ist, da die Datei in erster Linie die Optik der Anwendung beschreibt. Schauen wir uns den Code zeilenweise einmal an. Die Datei beginnt hiermit:
<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="https://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx">
Das dient der Initialisierung des Flash-Scripts (ist also eher kosmetischer Natur und nur am Rande von Interesse); wir sagen damit, dass wir mit dieser Datei ein Flash-Script beschreiben und dabei die Programm-Bibliotheken Flex im Allgemeinen und Spark im besonderen nutzen wollen. Die nächste Zeile ist auch eher technischer Natur; mit ihr sagen wir lediglich, dass die benannte Datei (sprich: Main.as) die weitere Programmlogik enthält:
<fx:Script source="Main.as"/>
Hier geht es nun schon stark Richtung Optik des Flash-Scripts. Diese Zeile öffnet eine sogenannte vertikale Gruppe; das ist nichts weiter als eine Menge von (im weiteren beschriebener) Elemente, die vertikal, also untereinander, angeordnet werden. Die Information horizontalCenter=”0″ besagt, dass sich die gesamte Gruppe in der Bildmitte befinden soll, wohingegen horizontalAlign=”center” bewirkt, dass alle Elemente in der Gruppe auch zentriert werden:
<s:VGroup horizontalCenter="0" horizontalAlign="center">
Genau wie die mit VGroup beginnende Zeile eine vertikale Gruppe öffnet, leitet die folgende Zeile eine horizontale Gruppe ein, also eine Menge von Elementen, die nebeneinander angeordnet sind; das Attribut verticalAlign=”middle” sorgt dabei dafür, dass sich alle Elemente in der Gruppe auf gleicher Höhe befinden:
<s:HGroup verticalAlign="middle">
Kommentare (18)