Dies ist der Befehl v.net.salesmangrass, der beim kostenlosen Hosting-Anbieter OnWorks mit einer unserer zahlreichen kostenlosen Online-Workstations wie Ubuntu Online, Fedora Online, dem Windows-Online-Emulator oder dem MAC OS-Online-Emulator ausgeführt werden kann
PROGRAMM:
NAME/FUNKTION
v.net.salesman - Erstellt einen Zyklus, der bestimmte Knoten verbindet (Problem des Handlungsreisenden).
Beachten Sie, dass TSP NP-hart ist. Dieses Modul verwendet einen heuristischen Algorithmus und erstellt möglicherweise einen Zyklus
suboptimal sein
SCHLÜSSELWÖRTER
Vektor, Netzwerk, Verkäufer
ZUSAMMENFASSUNG
v.net.salesman
v.net.salesman --help
v.net.salesman [-g] Varianten des Eingangssignals:=Name Möglichkeiten für das Ausgangssignal:=Name [arc_layer=Schnur]
[arc_type=Schnur[,Schnur,...]] [node_layer=Schnur] [arc_column=Schnur]
[arc_backward_column=Schnur] [Reihenfolge=Name] center_cats=Angebot [--überschreiben] [--Hilfe]
[--ausführlich] [--ruhig] [--ui]
Flaggen:
-g
Geodätische Berechnung für Längen- und Breitengrade verwenden
--überschreiben
Ausgabedateien erlauben, vorhandene Dateien zu überschreiben
--help
Nutzungszusammenfassung drucken
- ausführlich
Ausführliche Modulausgabe
--ruhig
Leiser Modulausgang
--ui
Starten des GUI-Dialogs erzwingen
Parameter:
Varianten des Eingangssignals:=Name [erforderlich]
Name der Eingabevektorkarte
Oder Datenquelle für direkten OGR-Zugriff
Möglichkeiten für das Ausgangssignal:=Name [erforderlich]
Name für die Ausgabevektorkarte
arc_layer=Schnur
Bogenschicht
Vektor-Features können Kategoriewerte in verschiedenen Layern aufweisen. Diese Zahl bestimmt
welche Schicht verwendet werden soll. Bei Verwendung mit direktem OGR-Zugriff ist dies der Layername.
Standard: 1
arc_type=Zeichenfolge[,Zeichenfolge,...]
Bogentyp
Option: Linie, Grenze
Standard: Linie, Grenze
node_layer=Schnur
Knotenschicht (wird für Städte verwendet)
Vektor-Features können Kategoriewerte in verschiedenen Layern aufweisen. Diese Zahl bestimmt
welche Schicht verwendet werden soll. Bei Verwendung mit direktem OGR-Zugriff ist dies der Layername.
Standard: 2
arc_column=Schnur
Kostenspalte Bogen vorwärts/beide Richtung(en) (Zahl)
arc_backward_column=Schnur
EXPERIMENTELL: Kostenspalte für Bogenrückwärtsrichtung (Anzahl)
Reihenfolge=Name
Name der Ausgabedatei mit der Knotensequenz („-“ für stdout)
center_cats=Angebot [erforderlich]
Kategoriewerte
Kategorien von Punkten („Städten“) auf Knoten (Ebene wird durch nlayer angegeben)
BESCHREIBUNG
v.net.salesman berechnet die optimale Route zum Besuch von Knoten in einem Vektornetzwerk.
Bei den Kosten kann es sich entweder um Zeilenlängen oder um in einer Datenbanktabelle gespeicherte Attribute handeln. Diese Attribut
Werte werden als Kosten ganzer Segmente angenommen, nicht als Kosten für die Durchquerung einer Längeneinheit (z. B
Meter) des Segments. Liegt die Geschwindigkeitsbegrenzung beispielsweise bei 100 km/h, fallen die Kosten an
Das Durchqueren eines 10 km langen Straßenabschnitts muss wie folgt berechnet werden:
Länge / Geschwindigkeit = 10 km / (100 km/h) = 0.1 h.
Unterstützt werden Kostenzuweisungen für Bögen sowie unterschiedliche Kosten für beide Richtungen eines
Vektorlinie. Für Gebiete werden die Kosten entlang der Grenzlinien berechnet.
Der Eingabevektor muss mit vorbereitet werden v.net operation=connect um zu verbinden
Punkte, die zentrale Knoten des Netzwerks darstellen.
Durch die Kategorie angegebene Punkte müssen genau auf Netzwerkknoten und der Eingabevektorkarte liegen
muss mit vorbereitet werden v.net operation=connect.
ANMERKUNG
Bögen können mit Kosten = -1 geschlossen werden.
BEISPIEL
Handlungsreisender für 6 digitalisierte Knoten (Spearfish):
Kürzester Weg, entlang unbefestigter Straßen:
Schnellster Weg, entlang von Autobahnen:
Suche nach dem kürzesten Weg anhand der Entfernung und dem schnellsten Weg anhand der Reisezeit
entsprechend den Geschwindigkeitsbegrenzungen verschiedener Straßentypen:
# Speerfisch
g.copy vect=roads,myroads
# Wir haben auf unserer Reise 6 Orte zu besuchen
echo "1|601653.5|4922869.2|a
2|608284|4923776.6|b
3|601845|4914981.9|c
4|596270|4917456.3|d
5|593330.8|4924096.6|e
6|598005.5|4921439.2|f" | v.in.ascii in=- cat=1 x=2 y=3 out=centers col="cat integer, \
Ost-Doppelpräzision, Nord-Doppelpräzision, Beschriftung varchar(43) "
# Datenvorbereitung überprüfen
v.db.select Zentren
v.Kategoriezentren op=report
# Typanzahl min. max
# Punkt 6 1 6
# Linienkarte erstellen, die Punkte mit dem Netzwerk verbindet (auf Ebene 2)
v.net myroads points=centers out=myroads_net op=connect thresh=500
v.category myroads_net op=report
# Ebene / Tabelle: 1 / myroads_net
# Typanzahl min. max
# Zeile 837 1 5
#
# Schicht: 2
# Typanzahl min. max
# Punkt 6 1 5
# den kürzesten Weg finden
v.net.salesman myroads_net center_cats=1-6 out=mysalesman_distance
# Kosten als Reisezeit einrichten
# Erstellen Sie für jede Straße in Ebene 3 eindeutige Kategorien
v.category in=myroads_net out=myroads_net_time opt=add cat=1 layer=3 type=line
# Neue Tabelle für Ebene 3 hinzufügen
v.db.addtable myroads_net_time layer=3 col="cat integer,label varchar(43),Länge doppelte Präzision, Geschwindigkeit doppelte Präzision, Kosten doppelte Präzision, bKosten doppelte Präzision“
# Straßentyp in Layer 3 kopieren
v.to.db myroads_net_time layer=3 qlayer=1 opt=query qcolumn=label columns=label
# Straßenlänge in Meilen hochladen
v.to.db myroads_net_time Layer=3 Typ=Linie Option=Länge Spalte=Länge Einheit=Meilen
# Geschwindigkeitsbegrenzungen in Meilen/Stunde festlegen
v.db.update myroads_net_time layer=3 col=speed val="5.0"
v.db.update myroads_net_time layer=3 col=speed val="75.0" where="label='interstate'"
v.db.update myroads_net_time layer=3 col=speed val="75.0" where="label='primäre Autobahn, harte Oberfläche'"
v.db.update myroads_net_time layer=3 col=speed val="50.0" where="label='sekundäre Autobahn, harte Oberfläche'"
v.db.update myroads_net_time layer=3 col=speed val="25.0" where="label='leichte Straße, verbesserte Oberfläche'"
v.db.update myroads_net_time layer=3 col=speed val="5.0" where="label='unimproved road'"
# Reisekosten als Reisezeit in Minuten definieren:
# Kosten vorlegen
v.db.update myroads_net_time layer=3 col=cost val="length / speed * 60"
# Rückwärtskosten setzen
v.db.update myroads_net_time layer=3 col=bcost val="length / speed * 60"
# den schnellsten Weg finden
v.net.salesman myroads_net_time arc_layer=3 node_layer=2 arc_column=cost arc_backward_column=bcost center_cats=1-6 out=mysalesman_time
Um das Ergebnis anzuzeigen, führen Sie beispielsweise Folgendes aus:
# Zeigen Sie die Ergebnisse an
g.region vector=myroads_net
# kürzester Weg
d.mon x0
d.vect myroads_net
d.vect centres -c icon=basic/triangle
d.vect mysalesman_distance col=grün width=2
d.font Vera
d.vect zentriert col=red disp=attr attrcol=label lsize=12
#schnellster Weg
d.mon x1
d.vect myroads_net
d.vect centres -c icon=basic/triangle
d.vect mysalesman_time col=grün width=2
d.font Vera
d.vect zentriert col=red disp=attr attrcol=label lsize=12
Nutzen Sie v.net.salesmangrass online über die Dienste von onworks.net