Ho una serie di coordinate grafiche e ho bisogno di trovare il percorso unidirezionale più breve attraverso tutte. Non ho un inizio/fine predeterminato, ma ogni punto deve essere toccato una sola volta e NON è necessario ritornare all'origine ottimale.Percorso più corto a una via attraverso più nodi
Ho provato un paio di approcci TSP, ma sembrano tutti basati sul ritorno all'origine alla fine che dà risultati terribilmente inefficienti in questo caso.
Esempio
1, 13
3, 0
3, 7
2, 21
2, 11
3, 12
1, 19
3, 6
risolverebbe a
3, 0
3, 6
3, 7
3, 12
2, 11
1, 13
1, 19
2, 21
Note:
Sì ho provato la ricerca funzione, c'è una domanda sostanzialmente identica Algorithm: shortest path between all points tuttavia l'unica vera risposta è un TSP, che ancora una volta, circuito chiuso è inefficiente per questo.
Non ha bisogno di essere accurato al 100%, ho già un metodo di permutazioni, ma il suo troppo lento, ho bisogno di gestire almeno ~ 25-30 punti, stabilendosi con una buona approssimazione funziona per me
Grazie in anticipo.
Modifica per chiarire, TSP tende a risolvere come in img # 1, il mio risultato desiderato è img # 2
img 3 è il campione sopra risolto tramite un TSP e img # 4 è desiderato (x coordinate spostato indietro - .5 per visibilità)
Coppia più buona misura # 1 = TSP, # 2 = desiderata,
Fondamentalmente voglio più breve collegamento in catena di punti, utilizzando il punto di inizio e di fine più efficiente
Com'è collegato a PHP? Hai codice da mostrare, ad es. strutture che rappresentano nodi e grafici? – rik
Beh, immagino che non sia direttamente correlato al php se non a una soluzione php come quella che mi piacerebbe terminare (supponendo che php possa gestire l'elaborazione in un tempo ragionevole), ma un algoritmo o qualche commento decente il codice in una lingua principale (C++, java, ruby, ecc.) sarebbe sufficiente –
Il pattern nella grafica dice che non si desidera il percorso _changing directions_. Che ne dici di aumentare i costi dei collegamenti con (x2, y2) <(x1, y1)? Sarebbe bias algoritmi TSP standard verso soluzioni che iniziano vicino a sinistra in alto, e finiscono vicino in basso a destra. – Apalala