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
Versuch einer Verkehrssimulation
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Was bedeutet das genauer? Hast Du noch nie programmiert? Oder nur nicht in Python?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.
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
assert encoding_kapiert
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).
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).
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...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.
- pillmuncher
- User
- Beiträge: 1484
- Registriert: Samstag 21. März 2009, 22:59
- Wohnort: Pfaffenwinkel
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:Notfalls druckt man es sich halt aus,
Das ist alles eine Frage wie wertvoll Du Deinen eigenen Zeiteinsatz bewertest.snafu hat geschrieben:Ich hatte bisher immer das Gefühl, dass Bücher zu Programmiersprachen eher Geldverschwendung für mich waren
Ich denke wer grundsäzlich Bücher mag, der mag auch Fachbücher.snafu hat geschrieben:Aber wer's mag...
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.pillmuncher hat geschrieben:OT - definitiv keine Geldverschwendung sind:
SICP
TAOP
Fish Book
@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.
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.
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: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:Notfalls druckt man es sich halt aus,
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).MagBen hat geschrieben:Das ist alles eine Frage wie wertvoll Du Deinen eigenen Zeiteinsatz bewertest.snafu hat geschrieben:Ich hatte bisher immer das Gefühl, dass Bücher zu Programmiersprachen eher Geldverschwendung für mich waren
Ü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.
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.Timberjack hat geschrieben: Ich komme mit höchster Lernmotivation entgegen
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.
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Naja, das hat eher 100 Seiten als 30 (basierend auf dem PDF der deutschen Uebersetzung).snafu hat geschrieben: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: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:Notfalls druckt man es sich halt aus,
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.
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
- Käptn Haddock
- User
- Beiträge: 169
- Registriert: Freitag 24. März 2006, 14:27
---------------------------------
have a lot of fun!
have a lot of fun!
-
- 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
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
@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?
-
- 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.?
@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.
Was repräsentiert denn ein einzelner Gitterpunkt? Also ganz konkret wie viele Meter Strasse.
-
- 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.
@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.
"Gittermeter"? Ich denke Du meinst Gitterpunkte und Du willst 1km simulieren.Timberjack hat geschrieben:also ein Gitterpunkt 10m bei insgesamt 100 Gittermetern.
Wenn Du auf ca. 6-7m runtergehst, dann kannst Du auch einen Stau 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.
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.