AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Entwicklung einer Fahrplanauskunft

Ein Thema von evilboy · begonnen am 4. Aug 2013 · letzter Beitrag vom 6. Aug 2013
Antwort Antwort
Seite 1 von 3  1 23      
evilboy

Registriert seit: 31. Jul 2004
Ort: Berlin
49 Beiträge
 
Delphi 2009 Enterprise
 
#1

Entwicklung einer Fahrplanauskunft

  Alt 4. Aug 2013, 11:49
Gesetzt den Fall, ich habe ein Busunternehmen mit vier Linien, die sich teilweise überschneiden.

Und jetzt möchte ich das gerne in ein Programm überführen, das dann
1) einen Reiseplan aufstellt (Von A nach Z: Fahren Sie mit Linie 1 von A nach C, mit Linie 4 von C nach E und mit Linie 2 von E nach Z – Fahrpläne mit konkreten Uhrzeiten lassen wir mal außen vor) und
2) eine ungefähre Angabe in Kilometern und Minuten Fahrzeit zwischen den Stationen (die ich natürlich hinterlegen muss) anzeigt.

Eine ungefähre Vorstellung, wie man das aufstellen müsste, habe ich (welche Linien gibt es am Startort und welche am Zielort, wo überschneiden sie sich – aber wie löst man das bei mehreren Linien?; Hinterlegung der Fahrzeit in min und km zwischen jeweils zwei Stationen).

Aber so wirklich sicher bin ich mir da nicht. Ich erwarte jetzt nicht, dass mir jemand eine Lösung herzaubert. Aber hat jemand ein Stichwort oder einen Literaturhinweis zur Hand, so dass ich mich in die Thematik einarbeiten kann?
Das klassische Travelling-Salesman-Problem ist es ja nicht, da es nicht zwischen allen Orten Direktverbindungen gibt……
  Mit Zitat antworten Zitat
MichaG42

Registriert seit: 6. Mai 2013
Ort: Magdeburg
4 Beiträge
 
#2

AW: Entwicklung einer Fahrplanauskunft

  Alt 4. Aug 2013, 13:20
Hallo evilboy,

Nettes Problem.
Ich weiß jetzt nicht, ob das relevant ist, könnte aber sein. Wie stellt sich denn das "sich überschneiden" dar? Handelt es sich dabei um zentrale Umsteigeknoten (sternförmig: komme von A(Linie 1 außerhalb) fahre nach B(Knoten) - Fahre nach C(Linie 2 - Knoten) - Fahre nach D(Linie 3 - außerhalb) oder stellt es sich eher wie ein Netz dar, mit zahlreichen Möglichkeiten zwischen den Linien ?

Danke, lg Micha
Michael
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#3

AW: Entwicklung einer Fahrplanauskunft

  Alt 4. Aug 2013, 13:21
Also wenn du konkrete Fahrpläe außen vor lässt, ist das relativ einfach: Das Netz lässt sich als Graph auffassen. Ein Knoten sit dann eine Haltestelle, und eine Kante ist eine Transportmöglichkeit (Verbindung) zwischen zwei Haltestellen.

Eine Buslinie würdest du dann erstmal aufteilen, welche Haltestellen mit welchen Kosten verbunden werden. Die Kanten kannst du dann in den Graphen einsortieren.

"Kosten" ist hier übrigens ein etablierter Begriff, meistens haben die Kanten definierte Kosten und es wird dann der günstigste Weg gesucht. Dafür eignet dich der Dijkstra-Algorithmus. Er bekommt zwei Knoten und rechnet dir dann den kürzesten Pfad (= geringste Kosten) aus.

Was zum Lesen gibt es hier: http://de.wikipedia.org/wiki/Graph_(Graphentheorie) bzw. hier: http://de.wikipedia.org/wiki/Dijkstra-Algorithmus oder einfach hier nachfragen
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#4

AW: Entwicklung einer Fahrplanauskunft

  Alt 4. Aug 2013, 14:46
Das, was jfheins gesagt hat, und vielleicht hilft es, wenn du dir bewusst machst, dass Zeit auch eine Dimension ist. Das heißt, eigentlich suchst du eine Route durch eine dreidimensionale (wenn deine Karte zweidimensional ist, wovon ich ausgehe) Punktwolke (die sich als Graph darstellen lässt).
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#5

AW: Entwicklung einer Fahrplanauskunft

  Alt 4. Aug 2013, 16:21
Das, was jfheins gesagt hat, und vielleicht hilft es, wenn du dir bewusst machst, dass Zeit auch eine Dimension ist. Das heißt, eigentlich suchst du eine Route durch eine dreidimensionale (wenn deine Karte zweidimensional ist, wovon ich ausgehe) Punktwolke (die sich als Graph darstellen lässt).
Das Ganze kann man vereinfachen. Die Position der Haltestellen ist eigentlich egal, nur die Zeit (und evtl. der Preis) zwischen den Stationen ist interessant.
Die Zeit würde ich auch als Kopien der Haltestellen modellieren.

Für jeden (diskreten) Zeitpunkt, z.B. in Minutenauflösung, gibt es eine Kopie von jeder Haltestelle. Jede Haltestelle hat eine Kante zu ihrer Kopie im nächsten Zeitschritt (eine Zeiteinheit als Kosten).
Außerdem besitzt sie Kanten zu den nächsten Haltestellen in den Linien zu der jeweils geplanten Ankunftszeit. Die Kanten-Kosten sind die Fahrzeiten.
Um den schnellsten Weg zu finden lassen sich dann klassische Algorithmen anwenden (z.B. Dijstra).

Das sollte eine geeignete Basis für weitere Verbesserungen sein, z.B. Duplizierung aller Haltestellenknoten als Ankunfts- und Abreiseknoten, um Unsteigezeiten zu berücksichtigen.

Auch wenn die oben definierte Graphen theoretisch unendlich sind (angenommen die Zeit endet nicht), kann man praktisch annehmen, das niemand mehr als drei Tage auf einer Strecke fährt und damit die Anzahl der Knoten auf gut handhabbare Größen begrenzen
Intellekt ist das Verstehen von Wissen. Verstehen ist der wahre Pfad zu Einsicht. Einsicht ist der Schlüssel zu allem.

Geändert von BUG ( 4. Aug 2013 um 16:26 Uhr)
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#6

AW: Entwicklung einer Fahrplanauskunft

  Alt 4. Aug 2013, 19:03
Nee, das ist ein Minimierungsproblem (shortest Path). Nur das der Graph nicht nur Entfernungen/Preise enthält (und damit Fahrzeiten), sondern auch Wartezeiten.

Ein Weg von A nach B über C mit Umsteigen wird im Graph dann einfach so modelliert.

A=>C1 (Fahrzeit: 5 min)
C1=>C2(Wartezeit: 3 min)
C2=>B (FAhrzeit: 3 min)

vielleicht gibt es auch eine direkte Strecke (A=>B). Die dauert aber, wegen Bauarbeiten, 15min.
A=>B (Fahrzeit: 15min)

Nun kann jeder single-pair shortest-path Algorithmus die optimale Lösung finden. Etwas modifizieren muss man den Algorithmus aber schon, denn die Wartezeit am Punkt 'C' (Übergang C1=>C2) ist nicht notwendigerweise konstant 3 minuten, sondern kann variieren. Vielleicht ist der Anschluss bei Ankunft 15:19 wirklich nur 3 minuten, weil der andere Bus um 15:22 kommt, aber wenn man um 14:19 kommt, dann muss man leider 20min warten, denn der andere Bus kommt leider erst um 14:39.

D.h. die Kostenfunktion 'Zeit(P1,P2)' ist nicht durch eine einfache Matrix dargestellt, sondern berücksichtigt andere Parameter. Mit fällt auf Anhieb ein, das man einfach die Ankunftzeit an C1 als weiteren Parameter nimmt.


Ergo benötigt der Optimierungsalgorithmus ("Finde kürzesten Weg von A->B") neben dem Start- und Endpunkt auch den Zeitpunkt der gewünschten Abfahrt. Sollte sehr einfach umzusetzen sein.
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#7

AW: Entwicklung einer Fahrplanauskunft

  Alt 4. Aug 2013, 19:58
Das, was jfheins gesagt hat, und vielleicht hilft es, wenn du dir bewusst machst, dass Zeit auch eine Dimension ist. Das heißt, eigentlich suchst du eine Route durch eine dreidimensionale (wenn deine Karte zweidimensional ist, wovon ich ausgehe) Punktwolke (die sich als Graph darstellen lässt).
Das Ganze kann man vereinfachen. Die Position der Haltestellen ist eigentlich egal, nur die Zeit (und evtl. der Preis) zwischen den Stationen ist interessant.
Ja, das ist schon richtig, am Ende hat man natürlich einfach einen Graphen mit Kantengewichten. Ich persönlich finde es bloß anschaulicher, wenn man sich vorstellt, dass man kürzeste Wege auf einer zweidimensionalen Karte berechnet und die Kosten zwischen zwei Knoten der geometrischen Distanz entsprechen. In der Praxis muss natürlich der geometrisch kürzeste Weg nicht der schnellste sein, da man z.B. auf der Autobahn schneller fahren kann als auf irgendeiner Landstraße, aber ich finde, wenn man das Prinzip erst mal verstanden hat, kann man es sehr leicht verallgemeinern...

Edit:
Auch wenn die oben definierte Graphen theoretisch unendlich sind (angenommen die Zeit endet nicht), kann man praktisch annehmen, das niemand mehr als drei Tage auf einer Strecke fährt und damit die Anzahl der Knoten auf gut handhabbare Größen begrenzen
Das ist eigentlich gar nicht nötig, es reicht ja, wenn die Knoten „virtuell“ vorhanden sind. Dijkstra guckt sich ja immer nur die unmittelbar adjazenten Knoten an. Man kann diese also generieren, während man den Algorithmus ausführt...

Man muss nur aufpassen, dass es zwischen dem Start- und dem Ziel-Knoten auch wirklich eine Verbindung gibt... sonst würde man in eine Endlosschleife laufen.

Geändert von Namenloser ( 4. Aug 2013 um 20:04 Uhr)
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#8

AW: Entwicklung einer Fahrplanauskunft

  Alt 4. Aug 2013, 21:43
Man muss nur aufpassen, dass es zwischen dem Start- und dem Ziel-Knoten auch wirklich eine Verbindung gibt... sonst würde man in eine Endlosschleife laufen.
Nö. Dann gibt es einfach keine Lösung.

Bei der Graphentraversierung markiert man die besuchten Knoten, dann passiert das nicht.
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#9

AW: Entwicklung einer Fahrplanauskunft

  Alt 4. Aug 2013, 22:54
Man muss nur aufpassen, dass es zwischen dem Start- und dem Ziel-Knoten auch wirklich eine Verbindung gibt... sonst würde man in eine Endlosschleife laufen.
Nö. Dann gibt es einfach keine Lösung.
Man will aber trotzdem nicht, dass das ganze System abschmiert, bloß weil der User eine Route berechnen will, die nicht existiert.
Bei der Graphentraversierung markiert man die besuchten Knoten, dann passiert das nicht.
Hier ist der Graph aber unendlich und man findet (in zeitlicher Dimension) an jedem Knoten einen weiteren Knoten, der nicht zum Ziel führt.

Jedes Stehen eines Busses an einer Haltestelle ist eigentlich ein Knoten. Man kann sich dann an jedem Knoten jeweils dafür entscheiden, ob man mit dem Bus zur nächsten Haltestelle (1. adjazenter Knoten) fährt, oder ob man auf den nächsten Bus wartet (2. adjazenter Knoten). Nun kann man aber beliebig lange an der Haltestelle stehen und darauf warten, dass ein Bus kommt, der einen in Richtung des Ziels bringt. Wenn ein solcher aber niemals kommt, dann sitzt man bei einer naiven Implementierung in einer Endlosschleife...

Geändert von Namenloser ( 4. Aug 2013 um 23:01 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#10

AW: Entwicklung einer Fahrplanauskunft

  Alt 4. Aug 2013, 23:36
Man muss nur aufpassen, dass es zwischen dem Start- und dem Ziel-Knoten auch wirklich eine Verbindung gibt... sonst würde man in eine Endlosschleife laufen.
Stimmt, das könnte man vorher einfach prüfen (oder evtl. sogar vor berechnet haben).
Wenn man eventuell über den Basis-Dijstra hinaus will, wäre es schon schön, wenn der Graph endlich ist Aber für so kleine Probleme sollte wohl nicht nötig sein.

Ich glaube, alles Prinzipielle zu in dieser Modellierung wurde mittlerweile genannt und wir fangen jetzt an, uns im Kreis zu drehen und über Details/Optimierungen zu streiten
@evilboy: Hast du den Ansatz verstanden oder hast du Fragen?

EDIT:
Fahrpläne mit konkreten Uhrzeiten lassen wir mal außen vor
Der Fall ist einfacher zu modellieren, bringt dem Fahrgast aber nicht wirklich viel, wenn der er zwar die kürzeste Fahrzeit hat, aber zwischen-drin einen halben Tag warten muss
Intellekt ist das Verstehen von Wissen. Verstehen ist der wahre Pfad zu Einsicht. Einsicht ist der Schlüssel zu allem.

Geändert von BUG ( 4. Aug 2013 um 23:52 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:32 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz