Autor Beitrag
benorth
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Mo 27.01.03 12:36 
Hallo,

hat jemand eine Idee wie man einen Routenplaner programmiert?

Speziell die Logik: Wie komme ich z.B. von Punkt A nach Punkt Z?
foxy
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 814

Ubuntu, Gentoo
C++, PHP, Java, Ruby, Perl (Eclipse)
BeitragVerfasst: Mo 27.01.03 13:07 
also ich kann nur mal verdacht äussern ....
also als erstes würde ich ma ne DB machen, in denen alle Städte und Dörfer mit Breiten und längengrad sind...
ich denke das diese angaben man im i-net findet sprich schon fertig als db (denk ich mal) wenn du das hast, würde ich als ersten schritt erst mal die Luftlinien entfernung ausrechen...
um genaue angaben zu haben brauchst du das gesamte Strassennetz ....
ma ne andere Frage wiso willste sowas machen?? iss wirklich denke ich sehr kompliziert und benötigt eine grosse DB, die auch nicht einfach verwaltbar ist oder täuch ich mich (bitte um berichtigung)
aber ich denke so müsste es gehn zumindest der ansatz der mir spontan einfällt ...... :wink:

_________________
"Only wimps use tape backup: real men just upload their important stuff on ftp, and let the rest of the world mirror it." (Linus Torvalds)
OperatingSystem Laptop (Ubuntu Hardy)
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Mo 27.01.03 13:07 
Hi!

Nun, also ein Routenplaner ist schon ein wenig komplizierter.

Du musst dafür Rekursion benutzen. Ausserdem benötigst du ein Knotennetz (den Strassenplan). Deiner rekursiven Prozedur übergibst du den Startknoten als Parameter.
Innerhalb der Prozedur schaust du dann, ob der übergebene Knoten der Zielknoten ist. Ist er es nicht, müssen die mit dem überprüften Knoten verbundenen Knoten per Rekursion überprüft werden.
Das ist nur die grundlegende Vorgehensweise. Wenn du Fragen hast, poste einfach mal.

Google mal nach "Back-Tracking" bzw. "Travelling Salesman" (wobei TSM eine erweiterte Problematik der Routenplanung darstellt).

Cu,
Udontknow
foxy
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 814

Ubuntu, Gentoo
C++, PHP, Java, Ruby, Perl (Eclipse)
BeitragVerfasst: Mo 27.01.03 13:09 
hör lieber auf udont ... der hat denke ich mehr erfahrung damit ;)

_________________
"Only wimps use tape backup: real men just upload their important stuff on ftp, and let the rest of the world mirror it." (Linus Torvalds)
OperatingSystem Laptop (Ubuntu Hardy)
benorth Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Mo 27.01.03 14:08 
Ich brauche den Routenplaner nur für eine Kleinstadt. Straßennetz hab ich bereits in einer DB. Problem ist nur, dass ich nicht auf andere Programme zurückgreifen kann, da der Routenplaner ein Teil eines größeren Programms ist.

Das mit der Rekursion habe ich nicht ganz verstanden. Vorallem müssten in der Datenbank auch die Länge der Straße bzw. sämtliche Kreuzungen (=Knoten) stehen. Woher weiß das Programm wo er abbiegen soll um schnellstmöglich das Ziel zu erreichen? Ich müsste so praktisch das ganze Straßennetz der Stadt "virtuell" aufbauen.
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Mo 27.01.03 15:01 
Schau mal in der Sparte Tutorials nach "Rekursion", dort bin ich ein Tutorial am basteln. Ich werde im Laufe des Tages das Tut soweit erweitern, daß du dann einen Routenplaner schreiben kannst.

Cu, :)
Udontknow
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: Mo 27.01.03 15:05 
Da gibts auf [url]www.derentwickler.de[/url] vielleicht einen Artikel dazu. Auf jeden Fall war in einer der letzten Zeitschriften der A+-Algorithmus beschrieben, mit dem man sowas machen kann. AUf der CD war ein Beispiel-Programm dabei, wo man auch eigene Pläne erstellen konnte, incl. Source. Vielleicht schauste da mal nach. Aber es ist nicht einfach!

Gruß
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Mo 27.01.03 16:54 
Hallo nochmal,

ich habe eine Demo fertig geschrieben, das Programm und die Quellen dazu könnt ihr hier downloaden.

Cu, :D
Udontknow
littlemike1005
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 187



BeitragVerfasst: Mo 27.01.03 17:17 
@Udontknow

Hut ab. SUPER.
benorth Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Mo 27.01.03 17:29 
Wow. Respekt !!

Werd das Programm gleich mal durchschauen.

Vielen Dank.
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Mo 27.01.03 18:43 
@littlemike: Thx. :D
Andreas L.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1703
Erhaltene Danke: 25

Windows Vista / Windows 10
Delphi 2009 Pro (JVCL, DragDrop, rmKlever, ICS, EmbeddedWB, DEC, Indy)
BeitragVerfasst: Mo 27.01.03 18:59 
Der Routenplaner ist sehr gut. RESPEKT. Wäre natürlich toll wenn du ihn in Farbe und mit Stadtteilen ausstatten könntest.
littlemike1005
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 187



BeitragVerfasst: Mo 27.01.03 19:42 
@onlinehome Udontknow hat doch den source auch veröffentlicht. deine gewünschten änderungen kannst du doch selber machen :P

also ich werde mir das teil mal aus der nähe betrachten. zwar nicht mehr diese woche aber am sa habe ich etwas zeit.

so muss jetzt wieder los. tschau.
Cashels
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 167



BeitragVerfasst: Di 28.01.03 16:36 
Hey,

wie Ugrone bereits angedeutet hat ist der A+ Algorythmus ziemlich performant. Dabei wird von Näherungsmethoden ausgegangen, da das Problem an sich bei wachsender Knotenzahl in keinem zeitlichen Rahmen mehr zu berechnen ist. Ab 50 Knoten wirds schon ziemlich kritisch. Aber in www.derentwickler.de ist der Artikel inkl. Sourcecode zu lesen.

Gruss,
Tom
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Di 28.01.03 16:56 
Hmm? Ich weiss nicht, wo du die Zahl 50 her hast, aber diese Aussage ist definitiv falsch. Ich habe mit einem etwas optimierten Algo Netze von über 20000 Knoten durchsucht, die Weg-Suche lag unter 1 sek.

Cu,
Udontknow
littlemike1005
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 187



BeitragVerfasst: Di 28.01.03 17:02 
Udontknow ich finde dein progi nach wie vor beeindruckend aber ich habe auch meine probleme bei 100 knoten gehabt. ich habe zwei neben einander liegenende als start und ziel genommen da hat mein rechner sich tot gesucht.

aber trotzdem hut ab. das du so schnell ein progi gezaubert hast.
Cashels
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 167



BeitragVerfasst: Di 28.01.03 17:04 
@Udontknow,

die Zahl 50 hab ich aus einem amerikanischem Buch über DNA-Computer. Tut aber nix zur Sache zum Problem... Aber du redest doch auch von optimiertem Code. Dieser Algorythmus würd mich auch interessieren. Denn die meisten Algs arbeiten erst mal mit Näherungsverfahren, um dann eine detaillierte Route zu finden. Der A+ Alg z.B. rechnet nicht rekursiv alle möglichen Wege durch um dann definitiv den günstigsten zu finden, sondern startet die Suche mit einem verdächtigem Kandidaten, z.B. der in Luftlinie der nächste ist. Erst daraufhin wird dann der detaillierte Weg gesucht.

Übrigens ist dieser Alg auch in anderen Probleme anwendbar, z.B. den Ausweg aus einem Labyrinth zu suchen.

Gruss,
Tom
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Di 28.01.03 17:42 
@Littlemike: Du musst natürlich die Checkbox "Info" ausknipsen, ansonsten zeichnet er bei jeder Rekursion erst einmal den Pfad neu... :wink:

@Cashels: Ich vermute mal, die 50 bezog sich auf die Rekursionstiefe und nicht auf die Anzahl der Knoten...

Was Näherungsverfahren angeht:
Genau so etwas wende ich auch in der optimierten Variante an. Ich sortiere, bevor ich durch die Verbindungen gehe, diese nach Nähe zum Zielknoten (das ein Knoten näher am Zielknoten dran ist, bedeutet eine höhere Wahrscheinlichkeit, über diesen einen Weg zum Zielknoten zu finden):

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
procedure TKnoten.VerbindungenSortierenNachNaeheZu(Knoten: TKnoten);
var i,j:integer;
var Temp:TKnoten;
begin
  for i:=0 to AnzahlVerbindungen-2 do
  begin
    for j:=i to AnzahlVerbindungen-1 do
    begin
      if Verbindungen[j].DistanzZuKnoten(Knoten)<Verbindungen[i].DistanzZuKnoten(Knoten) then
      begin
        Temp:=Verbindungen[j];
        Verbindungen[j]:=Verbindungen[i];
        Verbindungen[i]:=Temp;
      end;
    end;
  end;
end;


Jaja, BubbleSort ist langsam, ich weiss, aber ich war zu faul, jetzt was anderes zu schreiben.
Mit dieser Optimierung geht die Anzahl der Funktions-Aufrufe in meinem Proggie bei der Einstellung "100 Knoten, RandomSeed 0" auf gerade mal 143 Aufrufe runter, im Gegensatz zu 66234 Aufrufe vorher.

Allerdings ermittelt diese Variante dann noch immer den definitiv kürzesten Pfad. :wink:

Cu,
Udontknow