Lade...
 

CX_ACCESS_NODE::FindOptimalRoute

CX_ACCESS_NODE::FindOptimalRoute

Beschreibung:

Eingabe ist ein Weg von einem Start-Knoten (das Objekt selbst) über einen Vektor von Knoten, die alle erreicht werden müssen, zu einem Endknoten.
Die Methode ermittelt den optimalen Weg = den Weg mit den geringsten Kosten (siehe (siehe CX_ACCESS_WAY::edgeWeight).

Abschätzung der Performance: FindOptimalRoute ruft eine interne Version von FindRouteToObject auf.
Ist die Anzahl der übergeben Zielknoten [Start, Objekte im Vektor, Ziel-Objekt] = n, muss FindRouteToObject n! / (n - 2)!  mal ausgeführt werden.

Code-Beispiel:
Var(origin, goal, node1, node2, node3, totalWeight)

 

// Construct the graph
. . .
-> origin // starting point

-> goal   // end point

-> node1 ... -> node2 ... -> node3 // an optimal way MUST pass these points

0$ -> totalWeight  // total costs of the optimal way (supposing CX_ACCESS_WAY::edgeWeight is describing costs in $)
 

[node1 node2 node3] goal totalWeight origin Call(FindOptimalRoute)

FillObox(win, route) // display the optimal way

totalWeight PutValue(win, totalWeight) // display the total costs for this way
 

 

 

Window(win, ....)
{
  ObjectListView
(route, AUTO_POSITION, ... )
 INITIALIZE:
  [ HEADER T("next node") "CX_ACCESS_WAY::accessNode.uniqueID" HEADER T("next node") ] SetFormat
  [ 
HEADER T("weight") "CX_ACCESS_WAY::edgeWeight" HEADER T("weight") ] SetFormat
  [ HEADER T("next node") "CX_ACCESS_WAY::accessNode.uniqueID" HEADER T("next node") ] SetFormat
 
 [ HEADER T("weight") "CX_ACCESS_WAY::edgeWeight" HEADER T("weight") ] SetFormat

  String(totalWeight, ...)
}
 

Stack
Stack Position Objekttyp Kurzbeschreibung
Stack(In) Top CX_ACCESS_NODE Startobjekt der Suche
  Top-1 CX_INTEGER / CX_NUMERIC / CX_VALUE oder NULL optional: Summe der Wegekosten für den gefundenen Weg wird in das Objekt geschrieben
  Top-2 CX_ACCESS_NODE Zielobjekt
Stack(Out) Top VECTORject> der gefundene Weg als Vektor von CX_ACCESS_WAY-Objekten

 

Existiert in dem zu durchsuchenden Graph kein Weg, der alle geforderten Knoten erreicht, ist das Ergebnis eine leerer Vektor.
Wurde ein Objekt für die Wegekosten als Parameter übergeben, wird der Wert auf -1 gesetzt.

Funktionsaufruf: Call(FindOptimalRoute)