Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Master #3

Open
wants to merge 54 commits into
base: Martin
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
54 commits
Select commit Hold shift + click to select a range
9482b67
Merge pull request #1 from nigl/Martin
nigl Dec 9, 2015
70e51ba
Merge pull request #2 from nigl/Martin
nigl Dec 9, 2015
0dfa5da
phillis update
nigl Dec 15, 2015
d99a7ab
fixed density plot
nigl Dec 16, 2015
9c4c1a2
Gui
Dec 16, 2015
9d5372d
Schoenheitskorrekturen
Dec 16, 2015
9b6d144
Gui jea
Dec 16, 2015
d75bd09
Merge branch 'master' of https://github.com/nigl/SIM
Dec 16, 2015
1415ce5
Plots now use figures
Dec 16, 2015
309ffa0
gui
Dec 16, 2015
7b696e7
Safetymechanism
Dec 16, 2015
6099168
deleted unnecessary files
blacky2 Dec 26, 2015
bcbb731
Documentations gerüst / vorschlag.
blacky2 Dec 26, 2015
b18696b
window resizeable
blacky2 Dec 29, 2015
e9b158a
Pimped Gui: more security with buttons + added slider for the flow p…
blacky2 Dec 29, 2015
0c89143
removed unused function
blacky2 Dec 29, 2015
285f4a8
docu: Implementierung datenstruktur
blacky2 Dec 29, 2015
84a00fc
Achsen angepasst, starten jetzt bei null und gehen bis 2*CellsNumber+1
nigl Dec 29, 2015
9c8b1a7
Bezeichnungen eingefuehrt
nigl Dec 29, 2015
79a4c98
Blabla
nigl Dec 29, 2015
1c35151
erste Beschreibung Datenstruktur
blacky2 Jan 2, 2016
d102bd2
Zeichnet Geschwindigkeitsdiagram
nigl Jan 2, 2016
630a1b8
tatsaechliche Dichte statt gegebener
nigl Jan 2, 2016
42b572e
Richtigeres Auswahlverfahren der zu lingernden Fahrzeuge
nigl Jan 2, 2016
4867b0f
Merge branch 'master' of https://github.com/nigl/SIM
nigl Jan 2, 2016
d67b961
Fundamentaldiagramm erklaert
nigl Jan 3, 2016
942d3d0
plots
nigl Jan 3, 2016
5bab7b8
add Bungartz
nigl Jan 3, 2016
bd69164
mehr plots + gui verfeinert
nigl Jan 4, 2016
3877a3f
bissle was geschrieben
Jan 4, 2016
f59cac9
Merge branch 'master' of https://github.com/nigl/SIM
Jan 4, 2016
73db40b
kann nun gesamten Fluss anzeigen
nigl Jan 6, 2016
ae6028f
Ergnzung von NaSch Quelle
nigl Jan 6, 2016
1b8f1c0
Hannahs File
nigl Jan 6, 2016
d6e7ebb
Fehler der beim kompilieren gestoert hat entfernt
nigl Jan 6, 2016
03d87a6
Martin fertig hoffentlich
nigl Jan 6, 2016
e2c1e50
Schluss angefangen, rest Julian
nigl Jan 6, 2016
1a71716
Bildchen
nigl Jan 6, 2016
854479b
Validierung hoffentlich fertig, schluss angefangen Rest Julian
nigl Jan 6, 2016
87dac5f
impl
blacky2 Jan 8, 2016
8ee6a72
merged conflicts
blacky2 Jan 8, 2016
f64a581
impl
blacky2 Jan 8, 2016
c338719
impl fertig pre rechtschreibung
blacky2 Jan 9, 2016
1c23c2c
rechtschreibfehler ausgebessert
nigl Jan 9, 2016
8958136
fixes + anhang raus
blacky2 Jan 9, 2016
a710d76
Merge branch 'master' of https://github.com/nigl/SIM
blacky2 Jan 9, 2016
4155857
Figure namensaenderung
nigl Jan 9, 2016
984cce2
Merge branch 'master' of https://github.com/nigl/SIM
nigl Jan 9, 2016
9ed1e6f
Schrittweite statt Schritteweite
nigl Jan 11, 2016
9ce59e9
Praesentationsfile
nigl Jan 11, 2016
54887e9
julians tex aenderungen
nigl Jan 13, 2016
74e1b6d
finale Verbesserungen
nigl Jan 13, 2016
399891a
Nagel-Schreckenberg
nigl Jan 13, 2016
0ac2f21
Merge branch 'master' of https://github.com/nigl/SIM
nigl Jan 13, 2016
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 0 additions & 20 deletions adjustSpeed.asv

This file was deleted.

10 changes: 5 additions & 5 deletions adjustSpeed.m
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
function [TempCells] = adjustSpeed(Speed_now, Car_now, Obstacles, SpeedMax)
function [Speed_new] = adjustSpeed(Speed_now, Car_now, Obstacles, SpeedMax)

%Beschleunigen f�r Autos die nicht vor Hindernissen stehen
%Beschleunigen f�r Autos die nicht vor Hindernissen stehen
Speed = min(SpeedMax, Speed_now+1);
FreeAhead = freeCells(Car_now, Obstacles, SpeedMax);

%bechleunige die zu beschleunigenden und die anderen gleich lassen
%TempCells= ((FreeAhead < Speed_now).*Speed_now + (FreeAhead >= Speed_now).*Speed).*(Car_now ~= 0);
TempCells = ((FreeAhead < Speed).*Speed_now + (FreeAhead >= Speed).*Speed).*(Car_now ~= 0);
Speed_new = ((FreeAhead < Speed).*FreeAhead + (FreeAhead >= Speed).*Speed).*(Car_now ~= 0);

%Bremse die zu bremsenden und lasse die anderen gleich
SpeedAfterBrake = (FreeAhead < TempCells).*FreeAhead.*(Car_now ~= 0);
TempCells(FreeAhead < TempCells) = SpeedAfterBrake(FreeAhead < TempCells);
%SpeedAfterBrake = (FreeAhead < TempCells).*FreeAhead.*(Car_now ~= 0);
%TempCells(FreeAhead < TempCells) = SpeedAfterBrake(FreeAhead < TempCells);

end

Binary file added doc/0_logo.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
20 changes: 20 additions & 0 deletions doc/1_einleitung.tex
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
\chapter{Einleitung}

In der Verkehrsplanung ist es das Ziel, jedem Verkehrsteilnehmer den schnellsten Weg von A nach B zu gewährleisten. Da aber die Verteilung der Fahrzeuge auf den Straßen vom Zufall abhängt, ist es nicht wunderlich, dass dort Simulationen benötigt werden. \\ \\
Interessiert man sich z. B. dafür, ob an einer Kreuzung die durch eine Ampelschaltung geregelt wird, es für den Verkehrsfluss besser ist, diese durch einen Kreisverkehr zu ersetzen, so kann diese Frage mit Hilfe einer Simulation beantworten werden. Auch die Frage, wie die Ampeln untereinander geschaltet werden müssen, um maximalen Verkehrsfluss zu gewährleisten, ist eine äußerst schwierige Frage, die man nur mit Hilfe von Simulationen beantworten kann. \\ \\
Im Nachfolgenden wollen wir auf eine spezielle Kreuzung genauer eingehen.

\section{Aufgabenstellung}\label{sec:aufgabenstellung}
In unserer Ausarbeitung konzentrieren wir uns auf zwei einspurige Ringstraßen, die jeweils nur in eine Richtung befahren werden. Diese kreuzen sich in genau einem Punkt. Die Kreuzung der beiden Ringstraßen ist durch Rechts-Vor-Links geregelt und die Verkehrsteilnehmer dürfen die jeweilige Ringstraße nicht verlassen. D. h. die Autofahrer dürfen an der Kreuzung nur gerade ausfahren.
\\ \\
%Wir gehen der Frage nach, wie sich der Verkehrsfluss verhält, in Abhängigkeit der Dichten $\rho_1$ und $\rho_2$ der beiden Ringstraßen.
Unsere Aufgabe war es, diese Kreuzung zunächst zu simulieren, um anschließend die Frage beantworten zu können, wie sich der Verkehrsfluss in Abhängigkeit der Verkehrsdichten %$\rho_1$ und $\rho_2$
der Ringstraßen verändert.
\section{Umsetzung}
Bevor wir die in der Aufgabenstellung beschriebene Kreuzung simulieren konnten, mussten wir diese mit Hilfe des Nagel-Schreckenberg-Modells modellieren und dabei Annahmen treffen (siehe Kapitel \ref{chap2}). Auf Basis dieses Modells erstellten wir ein Matlab-Programm, welches uns die Situation in Abhängigkeit der Verkehrsdichten in einer Animation aufzeigt (siehe Kapitel \ref{chap3}). Um sicher zu gehen, dass das Programm auch unser Modell richtig beschreibt,
%Natürlich ist es auch wichtig zu wissen ob das Programm überhaupt korrekt arbeitet, deshalb
überprüften wir dieses mit Hilfe einiger Testdaten (siehe Kapitel \ref{chap4}). Nun konnten wir Aussagen darüber treffen, wie Veränderungen der Verkehrsdichten den Verkehrsfluss der Kreuzung beeinflussen und ob beide Dichten den gleichen Einfluss haben (siehe Kapitel \ref{chap5}).

\begin{flushright}
Autor: Julian Berndt
\end{flushright}
Binary file added doc/2_ZA_Beispiel.PNG
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
83 changes: 83 additions & 0 deletions doc/2_grundlagen.tex
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
\chapter{Modellierung}\label{chap2}

\section{Nagel-Schreckenberg-Modell}
Bei der Modellierung des Straßenverkehrs gibt es verschiedene Ansätze. Je nachdem welche Fragen mit dem Modell beantwortet werden sollen, bzw. worauf man bei einem Modell Wert legt, fällt die Wahl des Modells aus. Bei der makroskopischen Simulation eines Verkehrsflussproblems wird der Straßenverkehr global betrachtet als fließende Bewegung, die hinsichtlich kollektiver Größen ausgewertet wird. Die Analyse des Modells erfolgt mithilfe von Geschwindigkeit und Dichte des Flusses. Möchte man die einzelnen Fahrzeuge betrachten und dabei die Anzahl pro Zeiteinheit oder die Dichte pro Strecke auswerten, so bietet sich der mikroskopische Simulationsansatz an, welcher auch bei der Simulation der Kreuzung verwendet wurde. \\
\\
Die Grundlage bei der mikroskopischen Simulation des Verkehrsflusses bildet das sogenannte Nagel-Schreckenberg-Modell. Dieses wurde nach Kai Nagel und Michael Schreckenberg benannt, die das Verkehrsmodell mithilfe der Theorie der zellulären Automaten entwickelt haben, siehe \cite{article:NaSch}. \\
\\
%Zelluläre Automaten
Ein zellulärer Automat ist ein sehr anschauliches Modell, das die Entwicklung von Zellen abhängig von deren eigenen Zustand und dem Zustand der Nachbarzellen beschreibt. Es besteht aus folgenden Komponenten, vergleiche Seite 181 in \cite{book:bungartz}:
\begin{itemize}
\item Zellraum\\
Diskreter Raum mit Zellen der gleichen Geometrie.
\item Zustandsraum\\
Menge der möglichen Zustände der Zellen.
\item Nachbarschaftsbeziehung\\
Nur die Zellen in der Nachbarschaft werden zur Kenntnis genommen.
\item Diskrete Zeit \\
Änderung des Zustands einer Zelle in \( \delta \)t Zeitschritten.
\item Lokale Übergangsfunktion\\
Beschreibung der Veränderung des Zellzustands.
\end{itemize}
Es gibt viele verschiedene zelluläre Automaten mit unterschiedlichen Dimensionen. Zweidimensionale zelluläre Automaten kann man sich wie ein Gitter vorstellen, was in der folgenden Abbildung gut ersichtlich ist: \\
\begin{figure}[h]
\centering
\includegraphics[width=10cm]{2_ZA_Beispiel.png}
\caption[Zweidimensionale zelluläre Automaten]{Beispiele zweidimensionale zelluläre Automaten, Quelle \cite{book:bungartz}, S. 181.}
\end{figure}

\hspace{-0.6cm} Was hat nun dieses Konzept mit Verkehrsproblemen bzw. -planung zu tun? Um das zu beantworten, kann man zunächst den einfachsten Fall betrachten: Einen einspurigen Straßenabschnitt. Weiterhin nehmen wir an, dass das System abgeschlossen ist. Das bedeutet, dass jedes Auto, welches am einen Ende der Fahrbahn hinaus fährt, beim anderen Ende wieder hinein fährt. Außerdem fahren alle Fahrzeuge in die gleiche Richtung.
\\ \\
Unterteilen wir nun diesen Straßenabschnitt in mehrere Zellen, erhalten wir unseren Zellraum. Eine Zelle stellt also einen Teilabschnitt des gesamten Straßenabschnittes da. Die Größe der Zellen richtet sich beispielsweise nach dem Platz, den ein Auto mit Abstand zum Fahrzeug vor ihm minimal benötigt.
\\ \\
Der Zustandsraum umfasst die Geschwindigkeiten der Fahrzeuge, wobei diese in Zellen pro Zeitschritt angezeigt wird. Dadurch ist auch gleichzeitig vorgegeben, wie weit ein Fahrzeug vorausschauen muss, um nicht mit anderen Autos zu kollidieren.
\\ \\
Die Bestimmung der diskreten Zeitschritte erfolgt anhand von Verkehrsdaten. Dabei wird zum einen die Größe der Zellen benötigt. Zum anderen eine realistische Maximalgeschwindigkeit, beispielsweise die Geschwindigkeitsbegrenzung in Deutschland von 50 innerorts oder 100 auf Landstraßen.
\\ \\
Die Übergangsfunktion muss nun noch vorgeben, wie sich die Geschwindigkeit eines Fahrzeugs von einem Zeitschritt auf den anderen verändert. Dabei ist im Modell des zellulären Automaten das Beschleunigen, Bremsen und Bewegen berücksichtigt, nicht aber die Trödelwahrscheinlichkeit. Diese kommt erst im Nagel-Schreckenberg-Algorithmus hinzu.
\\ \\
Beim Nagel-Schreckenberg-Algorithmus wird jedes Fahrzeug nach einem Zeitschritt hinsichtlich seiner Geschwindigkeit neu betrachtet. Da unser Ziel ist, Staus zu vermeiden und gleichzeitig eine möglichst schnelle Fortbewegung zu erreichen, wird angenommen, dass jedes Fahrzeug genau die ihm mögliche Geschwindigkeit nutzt. Die Geschwindigkeit eines Fahrzeugs hängt also von der Anzahl der Zellen $d(i,j)$, die zwischen dem betrachteten Auto $i$ und dem vorher fahrenden Auto $j=i+1$ liegen und natürlich auch von der Maximalgeschwindigkeit \( v_{max} \) ab. Um das Modell noch realistischer zu machen, haben Schreckenberg und Nagel den Trödelfaktor eingefügt. Dieser bezieht ein, dass Fahrer möglicherweise zu stark abbremsen, zu langsam beschleunigen oder einfach trotz freier Fahrt konstante Geschwindigkeit halten. Diese Wahrscheinlichkeit wird mit $p$ bezeichnet.\\


\begin{algorithm}[H]\label{nagelschreckenberg_algo}
%\SetLine % For v3.9
%\SetAlgoLined % For previous releases [?]
\KwData{ \\
\(v_{i}, v_{max}, d(i,j), p \)
}
\KwResult{ \\
Update für Fahrzeug $i$
}

%initialization\;
\For{ \(i \in \{1, \cdots, n\}\) }{
Beschleunigen: \(v_{i} := min\{ v_{i}+1,v_{max}\} \);
\\Bremsen: \(v_{i} := d(i,i+1), \text{ falls } v_{i} > d(i,i+1) \);
\\Trödeln: \(v_{i} := max\{(v_{i}-1, 0 \} \text{ mit } p < 1 \);
\\Bewegen: Fahrzeug $i$ um \(v_{i}\) Zellen vorwärts bewegen;
}

\caption{Nagel-Schreckenberg-Algorithmus}
\label{algo:nagelsberg}
\end{algorithm}



\section{Erweitertes Model für Kreuzungen} \label{sec:erwmodel}
Für die Modellierung einer Kreuzung benötigt man noch einige zusätzliche Annahmen. Unser Ziel ist es zwar mit einem Model die Realität möglichst gut abzubilden, doch muss dies im Verhältnis zur Komplexität des Models stehen. Um ein Modell und dessen Ergebnisse verstehen zu können, müssen Bedingungen hinzugefügt werden, die nicht immer identisch mit der Realität sind. Zudem machen manche Anforderungen die Simulation in einer annehmbaren Zeit überhaupt erst möglich.
\\ \\
Zunächst betrachten wir die Straße an sich. Es handelt sich um zwei einspurige Ringstraßen, welche eine Zelle gemeinsam haben. Diese Zelle ist der Kreuzungspunkt der Straßen. Bildlich beschrieben kann man sich die Straßen auch bei der Modellierung als Kreuz vorstellen. Die Autos der einen Ringstraße können nur von links nach rechts fahren, die der anderen Straße nur von unten nach oben. Den Fahrzeugen ist es nicht möglich rückwärts oder nebeneinander zu fahren. Dadurch werden auch Überholvorgänge nicht abgebildet. Zudem wird der Zellraum als abgeschlossenes System betrachtet. Ein Verlassen der Straßen ist also nicht möglich. Fahrzeuge, die sich in der obersten Zelle bzw. in der Zelle ganz rechts befinden, setzen ihren Weg in der untersten Zelle bzw. in der Zelle ganz links fort.
\\ \\
Nun müssen noch Regelungen für die Kreuzungszelle gefunden werden. Dabei werden drei Kreuzungstypen unterschieden \cite{book:bungartz}:
\begin{itemize}
\item ungeregelte Kreuzung
\item Kreisverkehr
\item Kreuzungen mit geregelter Vorfahrt
\end{itemize}
Bei dem vorliegenden Model handelt es sich um eine ungeregelte Kreuzung. Es gilt also die Regel \glqq Rechts-vor-Links\grqq. Es gibt recht einfache Modelle, die die Regelung einer ungeregelten Kreuzung angeben, wie beispielsweise das Vier-Phasen-Modell, vergleiche Seite 198f. in \cite{book:bungartz}. Dieses verhindert auch das Auftreten von Deadlocks, welche entstehen können, wenn von allen vier Seiten gleichzeitig Fahrzeuge auf die Kreuzung zufahren. Da die Straßen in unserem Model jedoch nur einspurig sind, ergibt sich daraus eine einfache Regelung für die Vorfahrt: Die Fahrzeuge, die auf der vertikalen Straße fahren, haben immer Vorfahrt.
\\ \\
Nun haben wir eine Regelung der Vorfahrt. Wie steht es allerdings mit der Geschwindigkeit auf und vor der Kreuzung? Betrachtet man die Realität, müssen Autos vor einer Kreuzung abbremsen, um nach vorfahrtsberechtigten Fahrzeugen Ausschau zu halten. Deshalb wurde in unserem Modell angenommen, dass jedes Fahrzeug vor der Kreuzungszelle auf die Maximalgeschwindigkeit von 1 Zelle pro Zeitschritt bremsen muss. Erst danach kann wieder beschleunigt werden, falls die Kreuzung frei ist.

\begin{flushright}
Autor: Hannah Dusch
\end{flushright}
Loading