Versuch einer Verkehrssimulation

Du hast eine Idee für ein Projekt?
Timberjack
User
Beiträge: 7
Registriert: Dienstag 1. Juli 2014, 16:34

Hallo liebe Forengemeinde,

ich bin erst eben hier angekommen und habe trotz intensiver Recherche kein passendes Thema gefunden. Sollte mir dennoch eins entwischt sein entschuldige ich mich schon mal und bitte um eine Weiterleitung. Andernfalls lautet mein Problem wie folgt:

Für eine Lehrveranstaltung habe ich vor eine Simulation von Verkehrsflüssen mit Hilfe von Python zu programmieren. Leider bin ich programmiertechnisch noch absolut unerfahren und bitte um grundlegende Hilfe bei der Herangehensweise an das Problem und bei den einzelnen Programmierschritten. Ich komme mit höchster Lernmotivation entgegen :)
Das Ziel ist es, auf einem "Straßenabschnitt" eine fahrzeugbasierte Simulation des Verkehrsflusses zum Laufen zu bringen und zur weiteren Analyse Geschwindigkeits-Dichte Diagramme und Fluss-Dichte Diagramme zu erstellen. Dabei kann ich mir den Modelllierungsansatz frei auswählen oder über einen zellulären Automaten ein Gitter (in Straßenoptik) mit freien und besetzten Feldern dem Problem näher kommen. Beide Möglichkeiten lassen mich gerade absolut allein im Wald stehen.
Ich freue mich über jede denkbare Hilfe.

Herzliche Grüße
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Timberjack hat geschrieben: Leider bin ich programmiertechnisch noch absolut unerfahren und bitte um grundlegende Hilfe bei der Herangehensweise an das Problem und bei den einzelnen Programmierschritten.
Was bedeutet das genauer? Hast Du noch nie programmiert? Oder nur nicht in Python?

Generell kann man Dir keine andere Hilfe geben, als dass Du zunächst die Grundlagen von Python und letztlich dem Programmieren i.A. lernen musst. Erst dann bist Du irgend wann so weit, so ein Problem wirklich anzugehen.

Für jemanden, der wirklich bei Null anfängt, sehe ich da auf absehbare Zeit schwarz und zudem ist das Projekt imho dann viel zu komplex.

Ich hoffe, ich habe Dich jetzt nicht demotiviert :-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
MagBen
User
Beiträge: 799
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

Besorg Dir ein Python-Buch, bei Amazon findest Du sehr gute Rezensionen (bessere als hier). Das Buch hat gegenüber dem Rumgooglen-Ansatz den Vorteil, dass Du einem vorgegebenem rotem Faden folgen kannst, außerdem kannst Du die Zeit in der Du aufnahmefähig bist verlängern, wenn Du ab und zu das Medium wechselst.

Wenn Du etwas am Rechner simulieren willst, dann versuche es vorher ohne Rechner. Mach die Simulation so klein, dass Du sie manuell auf dem Papier oder mit Legosteinen ausführen kannst. Dieses kleine Beispiel ist dann Dein erster Testfall, das Programm soll das gleiche machen, wie Du manuell.

Fange ohne GUI an. Die GUI brauchst Du bei einer Simulation nur für Pre- und Post-Processing. Zur Darstellung des Verkehrsflusses kannst Du statt einer GUI auch 2D-Arrays nehmen und diese als 2D-Plot plotten.

Schreibe keinen Ini-File-Parser für die Simulationsparameter. Python IST ein Parser. Mache die Eingaben im Python-Code (in einem separaten Modul).
a fool with a tool is still a fool, www.magben.de, YouTube
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

MagBen hat geschrieben:Das Buch hat gegenüber dem Rumgooglen-Ansatz den Vorteil, dass Du einem vorgegebenem rotem Faden folgen kannst, außerdem kannst Du die Zeit in der Du aufnahmefähig bist verlängern, wenn Du ab und zu das Medium wechselst.
Wobei das offizielle Python-Tutorial auch recht gut ist und entsprechend einen roten Faden vorgibt. Notfalls druckt man es sich halt aus, um dem zweiten Teil deiner Aussage gerecht zu werden. Und das wäre ja dann auch kein reines Lernen aufgrund von Google-Ergebnissen, was ich auch eher problematisch sehe. Aber muss jeder für sich selber wissen. Ich hatte bisher immer das Gefühl, dass Bücher zu Programmiersprachen eher Geldverschwendung für mich waren. Aber wer's mag...
Benutzeravatar
pillmuncher
User
Beiträge: 1484
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

snafu hat geschrieben:Ich hatte bisher immer das Gefühl, dass Bücher zu Programmiersprachen eher Geldverschwendung für mich waren. Aber wer's mag...
OT - definitiv keine Geldverschwendung sind:
In specifications, Murphy's Law supersedes Ohm's.
Benutzeravatar
MagBen
User
Beiträge: 799
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

snafu hat geschrieben:Notfalls druckt man es sich halt aus,
Das muss dann aber wirklich ein Notfall sein, wer meint mit selbstgedruckten Büchern Geld zu sparen, der weiß nicht was sein Drucker kostet.
snafu hat geschrieben:Ich hatte bisher immer das Gefühl, dass Bücher zu Programmiersprachen eher Geldverschwendung für mich waren
Das ist alles eine Frage wie wertvoll Du Deinen eigenen Zeiteinsatz bewertest.
snafu hat geschrieben:Aber wer's mag...
Ich denke wer grundsäzlich Bücher mag, der mag auch Fachbücher.
pillmuncher hat geschrieben:OT - definitiv keine Geldverschwendung sind:

SICP
TAOP
Fish Book
Ziemlich OT. Damit bekommt Timberjack bestimmt nicht seine Simulation zum Laufen. Ich habe mit Absicht kein konkretes Buch genannt, da es schon ein paar Jahre her ist, dass ich ein Python Grundlagenbuch gelesen habe. IT-Fachbücher sollten aber in der Regel neu und aktuell sein.
a fool with a tool is still a fool, www.magben.de, YouTube
BlackJack

@MagBen: Es ging beim notfalls ausdrucken nicht ums Geld sparen, sondern um den von Dir erwähnten positiven Effekt beim Medienwechsel.

Das Gefühl das die meisten Bücher zu Programmiersprachen Geldverschwendung ist bei weitem nicht alles eine Frage der Bewertung des eigenen Zeiteinsatzes, sondern hat auch sehr viel mit dem Inhalt der Bücher zu tun. Und damit das die Information in den Büchern schnell veraltet. Womit es nicht so einfach ist ein neues, aktuelles, *und* gutes Buch zu finden. Die meisten Bücher für Anfänger in einer Programmiersprache wenn man schon andere Programmiersprachen kann, bieten meiner Erfahrung nach kaum Mehrwert zur Dokumentation + einem Tutorial der Programmiersprache. Zumindest solange man keine Sprache lernen möchte die wirklich unterdokumentiert ist.

Das Gefühl das viele Bücher zu Programmiersprachen, und zu IT-Themen allgemein, Geldverschwendung sind, teile ich. Und würde widersprechen das Fachbücher *neu* sein müssen. Aktuell reicht. Womit wir bei Büchern wären die Wissen vermitteln was nicht in einem Jahr schon wieder obsolet ist, weil sich die Meute auf den nächsten Hype gestürzt hat oder von dem Produkt, zum Beispiel der Programmiersprache, die nächste Major-Version veröffentlicht wurde die einen guten Teil des Wissens aus dem Buch über den Haufen wirft. Die drei von pillmuncher genannten Bücher sind in der Hinsicht ja zum Beispiel nahezu ”zeitlos”. SICP vermittelt zum Beispiel Programmieren, zwar mit Hilfe einer konkreten Programmiersprache, aber halt Konzepte die ganz grundsätzlicher Natur sind, und *das* steht im Vordergrund und nicht primär Scheme zu lernen.
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

MagBen hat geschrieben:
snafu hat geschrieben:Notfalls druckt man es sich halt aus,
Das muss dann aber wirklich ein Notfall sein, wer meint mit selbstgedruckten Büchern Geld zu sparen, der weiß nicht was sein Drucker kostet.
Kennst du das genannte Tutorial überhaupt? Das sind schätzungsweise 30 Seiten. Bei dir klingt es so als ob es mindestens 300 Seiten wären.
MagBen hat geschrieben:
snafu hat geschrieben:Ich hatte bisher immer das Gefühl, dass Bücher zu Programmiersprachen eher Geldverschwendung für mich waren
Das ist alles eine Frage wie wertvoll Du Deinen eigenen Zeiteinsatz bewertest.
Das ist wohl eher eine Frage, wieviel Vorwissen man hat. Hätte ich von Anfang an gänzlich auf Bücher gesetzt, dann wäre meine Beurteilung sicherlich anders ausgefallen. Zeitmäßig ist es nicht unwahrscheinlich, dass man mit *guten* Büchern schneller vorankommt. Meine Programmierkenntnisse sind schließlich auch nicht von heute auf morgen entstanden (wobei sie das natürlich auch nicht bei der Benutzung von Büchern wären).
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Übrigens ist es nicht so, dass ich gänzlich abgeneigt zu jeglichen Büchern bzw Fachbüchern wäre. Zur Zeit lese ich Java Web Security. Da werden viele Angriffsvektoren für Webseiten beschrieben und diese Beschreibungen sind auch nutzbar, ohne dass man zwanghaft Web-Applikationen in Java entwickeln muss. Das ist z.B. so ein Buch, das mir persönlich zusagt, da ich in dem Bereich halt noch kein so fundiertes Vorwissen habe. Klar findet man bestimmt alles, was dort steht, auch in Wikipedia-Artikeln usw, aber es ist schön, all diese Dinge mal in kompakter Form vorliegen zu haben. Letztlich ist die Bewertung von Büchern ja immer subjektiv. Wer eine Programmiersprache besser mit einem Buch anstatt mit einem Tutorial lernen kann, der soll es halt tun.
Benutzeravatar
Kebap
User
Beiträge: 687
Registriert: Dienstag 15. November 2011, 14:20
Wohnort: Dortmund

Timberjack hat geschrieben: Ich komme mit höchster Lernmotivation entgegen :)
Geht es dir mehr darum, diese Simulation zum Laufen zu bekommen, oder würdest du darüber hinaus gerne die Sprache Python lernen? Je nachdem müsstest du unterschiedlich tief einsteigen, oder einfach jemanden finden, der es für dich programmiert.
MorgenGrauen: 1 Welt, 8 Rassen, 13 Gilden, >250 Abenteuer, >5000 Waffen & Rüstungen,
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

snafu hat geschrieben:
MagBen hat geschrieben:
snafu hat geschrieben:Notfalls druckt man es sich halt aus,
Das muss dann aber wirklich ein Notfall sein, wer meint mit selbstgedruckten Büchern Geld zu sparen, der weiß nicht was sein Drucker kostet.
Kennst du das genannte Tutorial überhaupt? Das sind schätzungsweise 30 Seiten. Bei dir klingt es so als ob es mindestens 300 Seiten wären.
Naja, das hat eher 100 Seiten als 30 (basierend auf dem PDF der deutschen Uebersetzung).
Es macht aber IMO keinen Sinn das auszudrucken, weil die meisten Inhalte sehr interaktiv zu nutzen sind, d.h. mit Interpreter daneben.

Simulationen offline durchzuspielen macht dagegen absolut Sinn, ich weiss jetzt aber nicht wie ein Buch da helfen soll ...
Das wird jetzt aber reichlich offtopic.

@OP: Die Problemstellung ist reichlich abstrakt und dementsprechend werden Vorschlaege zur Hilfe wohl auch nur abstrakt bleiben. Wenn du konkrete Fragen stellst, etwa die Implementierung von deinem Modell wirst du wahrscheinlich mehr Hilfe bekommen.
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Ok, 100 Seiten sind dann doch ein bißchen viel zum Ausdrucken. Ich hätte nicht erwartet, dass es soviele sind.
Benutzeravatar
Käptn Haddock
User
Beiträge: 169
Registriert: Freitag 24. März 2006, 14:27

Vielleicht findest du hier auch noch Anregungen: http://www.traffic-simulation.de/ger

Gruß Uwe
---------------------------------
have a lot of fun!
Timberjack
User
Beiträge: 7
Registriert: Dienstag 1. Juli 2014, 16:34

Hallo @all,

vielen Dank für die ganzen Beiträge. Da ich ein paar Tage offline war, hatte ich eine Weile benötigt um alles durchzulesen. Ich wollte keine Diskussion über Online-Hilfe vs. Buch starten, denn sicherlich hat jedes seine Berechtigung. Trotzdem Dank für die vielen Hinweise.

Inzwischen habe ich ein bisschen an meinem Problem weitergearbeitet, denn um die Simulation komme ich nicht drum herum.
Ich habe mir überlegt, ähnlich wie bei den zellulären Automaten ein Gitter zu erzeugen, dass L lang (Straßenlänge) und S breit (Anzahl an Spuren) ist. Dazu würde ich mir vielleicht ein array erstellen. Für das/die Auto/s würde ich mir einen Container/Klasse anlegen, also eine Liste. Dann würde ich mir eine Dichte definieren, die mir erstmal ein paar Autos auf der Strecke platziert.

Könnten meine Überlegungen in eine richtige Richtung gehen? Und falls ja, wie fange ich das am Besten an zu programmieren?

Viele Grüße
BlackJack

@Timberjack: Ich würde mir ja erst einmal Gedanken um das Modell machen, vor den Überlegungen wie man das Programmieren angeht. Also wie soll ein Ergebnis einer Simulation aussehen, welche Daten müssen für die gewünschten Diagramme aus so einem Simulationslauf hinten raus kommen. Dann weiss man welche Grössen man für die Berechnung dieser Daten haben muss. Da gibt es vielleicht feste, bzw. variabel aber feste. Und andere, hier wird dann die Simulation interessant, die sich über die Zeit verändern. Wenn Du ein Gitter verwenden möchtest, dann ist eine Frage wie das mit der Auflösung ist. Also was repräsentiert ein Gitterpunkt. In diesem Fall zum Beispiel wieviele Meter Strasse. Was macht Sinn. Kann ein Fahrzeug mehr als einen Gitterpunkt besetzen? Was/Wieviel muss ein Fahrzeug wissen um Entscheidungen zu treffen?
Timberjack
User
Beiträge: 7
Registriert: Dienstag 1. Juli 2014, 16:34

Hallo BlackJack, vielen Dank für deine Antwort. Darüber habe ich mir bereits ein paar Gedanken gemacht. Und zwar sollte letztlich eine Simulation zum Laufen gebracht werden, welche ebenfalls Geschwindigkeits-Dichte-Diagramme bzw. Verkehrsfluss-Dichte-Diagramme ausgibt. Ich dachte ich benutze ein Gitter mit äquidistanten Gitterabstand und entweder das Feld ist besetzt (ein Auto ist darauf) oder nicht. Die Auswahl könnte ja auch zufällig erfolgen, man also dem Programm mit einer bestimmten Wahrscheinlichkeit die Wahl lässt, ob dieses Feld nun besetzt ist oder nicht. Zum Thema Auto wäre ich zunächst von identischen Autos ausgegangen, welche sich lediglich in der Geschwindigkeit unterscheiden. Also ein Typ schnelles Auto, welches sich nach einem kürzeren Zeitabstand um ein Feld nach "vorn" bewegt verglichen mit einem "langsameren" Typ Auto. Aus diesem Grund hätte ich mir erstmal einen festen Straßenabschnitt (z.B. 100 Gitterpunkte) herausgesucht und mir eine Verkehrsdichte definiert, welche wiederum zufällig die einzelnen Felder belegt. Aus den unterschiedlichen Zeitabständen würde man sicherlich auf die Geschwindigkeit schließen können und könnte somit die Diagramme erstellen. Klappt dieser Gedankengang? Später könnte man sicherlich die Verkehrsdichte variabel gestalten.?
BlackJack

@Timberjack: Also das mit der Verkehrsdichte habe ich nicht verstanden wie(so) die die einzelnen Felder zufällig belegt. Ich hätte jetzt gedacht die ergibt sich daraus wieviele Fahrzeuge sich auf dem Abschnitt befinden. Und das ergibt sich ja letztendlich aus dem Simulationsablauf.

Was repräsentiert denn ein einzelner Gitterpunkt? Also ganz konkret wie viele Meter Strasse.
Timberjack
User
Beiträge: 7
Registriert: Dienstag 1. Juli 2014, 16:34

...ja ok, so langsam beginne ich mich zu verzetteln. Also die Verkehrsdichte bezieht sich natürlich auf die Fahrzeuge auf dem Streckenabschnitt. Ein besetzter Gitterpunkt wäre dann bei mir ein angenommenes Fahrzeug. Da ich die Strecke in äquidistante Abschnitte teilen würde, entspräche z.B. also ein Gitterpunkt 10m bei insgesamt 100 Gittermetern. Natürlich ist ein Standard-PKW keine 10m lang, aber ich dachte auch eher, dass es erstmal wichtiger ist zu sagen dass sich an der Stelle ein PKW befindet und dieser sich nach einem bestimmten Zeitintervall weiterbewegt. Ich würde also erstmal davon ausgehen, dass nur ein Auto auf ein Gitterfeld passt.
BlackJack

@Timberjack: Aus der Länge eines Gitterpunktes im Verhältnis zur Standardauto-Länge ergibt sich dann ja wie weit andere Fahrzeuge auffahren können, wenn ein langsameres Auto vor einem eigentlich schnelleren fährt. Ich fragte nur, damit das nicht *zu* unrealistisch wird. :-)
Benutzeravatar
MagBen
User
Beiträge: 799
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

Timberjack hat geschrieben:also ein Gitterpunkt 10m bei insgesamt 100 Gittermetern.
"Gittermeter"? Ich denke Du meinst Gitterpunkte und Du willst 1km simulieren.
Timberjack hat geschrieben:Natürlich ist ein Standard-PKW keine 10m lang, aber ich dachte auch eher, dass es erstmal wichtiger ist zu sagen dass sich an der Stelle ein PKW befindet und dieser sich nach einem bestimmten Zeitintervall weiterbewegt.
Wenn Du auf ca. 6-7m runtergehst, dann kannst Du auch einen Stau simulieren.

Du brauchst wahrscheinlich auch eine Art von Gruppierung der Gitterpunkte. Denn jeder PKW braucht in Abhängigkeit seiner Geschwindigkeit mehr oder weniger freie Gitterpunkte vor seinem eigenen Gitterpunkt. Und ein LKW nimmt sowieso mehrere Gitterpunkte ein.

Bei jedem Auto würde ich als Zustand nicht einfach nur die Geschwindigkeit speichern, sondern auch die Beschleunigung und die Wunschgeschwindigkeit. Wenn Du die Strecke diskretisiert hast, dann musst Du auch die Geschwindigkeit diskretisieren in Gitterpunkte pro Zeitintervall.

Am schwierigsten stelle ich mir den Spurwechsel und das Überholen vor.
a fool with a tool is still a fool, www.magben.de, YouTube
Antworten