KM Matrix Berechnung

Zugriff, Engines, Konvertierung. Von ADS über DBF bis zu SQL.

Moderator: Moderatoren

Antworten
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12909
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

KM Matrix Berechnung

Beitrag von AUGE_OHR »

hi,

ich habe eine "Tabelle" mit jeweils den Entfernungen zwischen 2 Städten, also ein 2-Dim Array
Ich will nun von Startpunkt [1][1] "losfahren" und jede Stadt besuchen und zurück nach [1][1]

Frage : wie müsste der Codeblock aussehen der mir die "kürzeste" Strecke zurück gibt ?

Code: Alles auswählen

b_ergibt_KM := {|x,i| a[1] < [2] .AND.  ... hm ... wie und dann }
AEVAL(aTabelle,b_ergibt_KM)
es würde mir auch helfen wenn ich den "Suchbegriff" finden würde .. "Problem des Reisenden" oder so ...

"Travel Salesman Problem" TSP ist der Begriff den ich suchte und eine .NET Lösung habe ich auch gefunden http://www.lalena.com/AI/Tsp/
da .NET funktioniert es nicht mit Firefox ... also IE verwenden um das Demo (paar mal auf die "Map" clicken um "Citys" zu erstellen) zum laufen zu bringen.
Zuletzt geändert von AUGE_OHR am Mi, 28. Apr 2010 19:12, insgesamt 1-mal geändert.
gruss by OHR
Jimmy
Benutzeravatar
Herbert
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1991
Registriert: Do, 14. Aug 2008 0:22
Wohnort: Gmunden am Traunsee, Österreich
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: KM Matrix Berechnung

Beitrag von Herbert »

Hoi Jimmy
Verstehst du die gestellte Aufgabe als Mathematikproblem oder ist was Reales dahinter?

Im Fall Mathematik kommst du in die numerische Mathematik hinein, wo simple Matrixrechnung nicht mehr ausreicht. Denn hier musst du iterativ arbeiten.
Im Fall der realen Wegberechnung hast du noch wesentlich mehr Punkte zu beachten (die du wohl kennst aber nicht erwähnt hast)
- Hindernisse
- Umwege zwischen zwei Punkten (liegt z.B. Punkt c ganz nahe des kürzesten Weges von a und b obwohl die Luftlinie dies nicht aussagt?)
- Durchschnittsgeschwindigkeit
- usw.
Im diesem Fall erstellst du die Wegberechung am besten mit einem GPS-Programm und liest dann die Schnittstelle (berechnete Route) ein.

Bei reiner Mathe müsste ich meine Untelagen hervorgraben (die numerische Mathematik war eines meiner Lieblingsnebenfächer).
Grüsse Herbert
Immer in Bewegung...
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12909
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Re: KM Matrix Berechnung

Beitrag von AUGE_OHR »

Herbert hat geschrieben:Verstehst du die gestellte Aufgabe als Mathematikproblem oder ist was Reales dahinter?
...
Im diesem Fall erstellst du die Wegberechung am besten mit einem GPS-Programm und liest dann die Schnittstelle (berechnete Route) ein.
genau das ist mein "Problem" mit Mappoint.
innerhalb einer "City" kann man 100 Waypoints setzten und das :Calculate() geht schnell und auch zwischen 2 Citys ist es kein Problem.

sobald aber "Long Distance", also von Stadt zu Stadt zu Stadt ... dann dauert es "ewig" ... obwohl "nur" Autobahn dazwischen.

also hatte ich es schon "auf-gesplittet" nach Citys ... und die Citys nach Entfernung zum Ausgangspunkt (21509 Glinde)
Dies ist jedoch nur für Nord-Süd "gültig" da ich ihm, trotz GPS Koordinaten, das noch nicht "beibringen" konnte West und Ost zu "unterscheiden".
( XX.52719 , 10.23082 sind die Koordinaten, also müsste doch alles > 10.23082 östlich sein ? )

Es ist aber ein "bekanntes" mathematisches Problem : "Travel Salesman Problem" TSP
Herbert hat geschrieben:Bei reiner Mathe müsste ich meine Untelagen hervorgraben (die numerische Mathematik war eines meiner Lieblingsnebenfächer).
und da haben wir wieder das 2nd "Problem" ... wo war das noch ... wo hab ich das abgelegt ;)
gruss by OHR
Jimmy
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9367
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 102 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: KM Matrix Berechnung

Beitrag von Tom »

Herzlich,
Tom
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12909
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Re: KM Matrix Berechnung

Beitrag von AUGE_OHR »

hi,

ich habe mir mal die "Formeln" angesehen, aber die sind mir "zu hoch" ...
grundsätzlich kann man wohl zwischen "berechnen" (1-Baum-Reationlax, Lagrangerelaxation) und "probieren" (Nearest-Neighbor-Heuristik) unterscheiden.

ich habe ja eine "Tabelle" mit den KM Entfernungen.
1.) Als "Mensch" fange ich bei [1][1] an und suche mir den "nächsten" Kunden in der Tabelle.
2.) Danach gehe ich nach [x][1] als Anfang und suche wieder den "nächsten" Kunden wobei
a.) es nicht einer aus der Reihe "davor" sein darf
b.) es "vorwärts" und nicht "rückwärts" gehen darf
3.) wiederhole 2.) bis zum Ende

Nun brauche ich für 2.) aber eine ganze Routine für die Bedingungen a.) und b.)
Ergebnis von 3.) ist Start von 2.)

Code: Alles auswählen

Pseudocode NICHT lauffähig

aTour := {}
nNext := 1
iMax := LEN(aSammel)
FOR i := 1 TO iMax
      // suche Ort
      nNext := SucheOrt(aSammel,i,aTour,nNext)
      // besuchte Orte
      AADD(aTour,aSammel[nNext])
NEXT

FUNCTION SucheOrt(aSammel,i,aTour,nNext)
// extrahiere aktuelle Zeile
aClone := ACLONE(aSammel)
aZeile := aClone[i]

// sortiere die KM Entfernungen
ASort( aZeile,,, {|xKM,yKM| xKM[1] < yKM[1] } ) 
iMax := LEN(aZeile)
FOR i := 1 TO iMax
   cOrt := aZeile[i]

   // ist es schon in der Tour
   nPosi := ASCAN(aTour, {|x| x == cOrt } )
   IF nPosi > 0
      // ist schon in der Tour
   ELSE
      // wenn neu ist das der "nächste" 
      nPosi := ASCAN(aSammel, {|x| x[1] == cOrt },nNext )
      IF nPosi > 0
         EXIT
      ENDIF
   ENDIF
NEXT
RETURN nPosi
was ich nun möchte ist "alles" in einem AEVAL(Codeblock) ... das müsste doch gehen ;)
ich weiss im Augenblick nicht wie ich das "Ergebnis" von 3.) als Start von 2.) in "einem" Codeblock zusammen bekomme ... oder rekursiv ?
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12909
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Re: KM Matrix Berechnung

Beitrag von AUGE_OHR »

hi,

also die neue "Berechnung" scheint langsam zu klappen.
CalcRoute.JPG
CalcRoute.JPG (268.4 KiB) 3387 mal betrachtet
um es "optisch" zu "beobachten" habe ich das ganze Array nach Excel geschoben und farblich markiert.
GELB sind die "Treffer" und gruen das "Gegenstück"
TabelleRoute.JPG
TabelleRoute.JPG (164.05 KiB) 3387 mal betrachtet
Wenn man sich die Tabelle ansieht, besteht zwischen Hin- / Rück-Weg, fast immer eine geringe Differenz.
Ich müsste also noch beide addieren/2 um die Treffer zu "verfeinern"

den Code dazu stelle ich in die Wissensbasis.
gruss by OHR
Jimmy
Antworten