Perché TSP non richiede ripetizione delle città?


9

Mi sembra strano che il TSP neghi la possibilità di città ripetute. L'obiettivo di questo commesso viaggiatore è di andare il più velocemente possibile e visitare tutte le città, giusto? E se fosse più veloce viaggiare in una città in cui sei già stato?


2
Sono sicuro che è arbitrario. Solo in rari casi consentire città ripetute farebbe alcuna differenza (mai nel TSP metrico). Quindi i problemi non sono affatto diversi. Il motivo è probabilmente storico.
Karolis Juodelė,

8
Ho sentito che il venditore vende prodotti davvero scadenti e non sarebbe saggio incontrare i suoi vecchi clienti :)
ssch

Risposte:


3

Non importa esattamente come lo definisci perché è solo un modo di modellare un problema del mondo reale. In TSP, hai solo un set di città e il costo del viaggio tra ciascuna coppia di esse. Ciò non esclude la possibilità che, nella situazione del mondo reale che stai modellando, il percorso migliore tra B e C possa passare attraverso A. In tal caso, sì, il percorso modellato come ABCA in TSP potrebbe coinvolgi davvero molto bene la guida attraverso A, un tempo in più sulla strada da B a C, ma tali dettagli sono sottratti al modello TSP.


1
Un punto valido, ma vorrei sottolineare che il TSP viene spesso utilizzato nelle situazioni del mondo reale. Il requisito di non ripetizione è perdonato quando si implementano applicazioni nel mondo reale?
danmcardle

@danmcardle Dipende dall'applicazione.
Tom van der Zanden,

2

Concordo sul fatto che il vincolo sembra strano e, per molte situazioni pratiche, non è pertinente. Come sottolineato da David nella sua risposta, se puoi modificare tu stesso la modellazione, non importa davvero. Ma data un'istanza non modificabile, farà la differenza, perché il TSP generale con questo vincolo non è approssimabile all'interno di alcun fattore costante, mentre il rilassamento del vincolo a singola visita sembra renderlo approssimabile all'interno del fattore 2 (anche se non è metrico ). A meno che non mi manchi qualcosa, per argomenti standard, puoi prima costruire un albero di spanning minimo (di costo diciamo ), quindi visitare questo albero con la tecnica del tour di Eulero. Chiaramente, il costo totale del tour è quindi di 2 c c , quindi questo tour può essere utilizzato per dedurre un MST di costo inferiore a cc2c (due volte ogni bordo). Per contraddizione, se esistesse un tour di costo inferiore acc, che è una contraddizione.


1

Dato qualsiasi tour con ripetizioni, puoi inventare un tour più breve che non ripete nessuna città. Ad esempio, si consideri un tour della forma quali visite A due volte. Puoi prendere una scorciatoia per la tua seconda visita ad A , andando direttamente da X a Y : A X Y .

AXAY,
AAXY
AXY.

Potrebbe essere che la via più breve da a Y passa attraverso A , ma che è già incapsulato nel bordo X Y . Si può pensare a una menzione di A non come "passaggio" A , ma piuttosto "fermandosi a" A . Devi solo fermarti ad A una volta, anche se potresti passare attraverso A diverse volte.XYAXYAAAAA

Gli algoritmi reali per TSP potrebbero avere questo passaggio di "prendere scorciatoie", ad esempio l'algoritmo di Christofides. Vedi ad esempio questa descrizione o quell'account più breve .


4
A,X1,,Xnd(A,Xi)=1d(xi,xj)=100i,jAX1AX2AAXnA2n+1AX1XnA100n98

Certamente, ma (1) il PO sembra interessato alle applicazioni del mondo reale del TSP, che sono metriche, e (2) il TSP non metrico non è così interessante (poiché è troppo difficile).
Yuval Filmus,

2
@YuvalFilmus TSP del mondo reale non sono metriche necessarie. Alcune volte viaggiando da A a B richiederà più tempo di AC + CB in quanto vi è traffico sulla strada da A a B.
Ilya Gazman,

1
(A,B)ABAB

0

Non c'è una risposta generale a questo, tranne "le persone non sono stupide". Applicheranno la soluzione adeguata alla loro situazione. Raramente le persone sono interessate al problema del commesso viaggiatore stesso. Eveb nell'istanza classica, un venditore del mondo reale si preoccuperebbe maggiormente del problema di massimizzare il proprio reddito in un determinato periodo di tempo entro un determinato insieme di vincoli. In questo caso del problema, la distanza totale percorsa è solo uno dei numerosi fattori che vanno a cercare la risposta ottimale.


0

Se le ripetizioni sono consentite, basta andare a esaminare tutte le connessioni X -> A -> Y, e se questo è più corto di X -> Y, si sostituisce la lunghezza di X -> Y con la lunghezza di X -> A -> Y, e risolvi il problema risultante con l'algoritmo standard. Penso che devi ripetere il processo di sostituzione fino a quando non ci sono cambiamenti, perché se trovi una connessione più breve X -> Y questo potrebbe significare che ora X -> Y -> Z è più breve di X -> Y.

Tieni traccia delle connessioni modificate, passa attraverso le connessioni nella soluzione e se la soluzione contiene X -> Y, sostituisci questa con X -> A -> Y.

PS. Penso che la mia idea sia fantastica, ma al momento non sono molto sicuro che sia corretta. Poiché X -> A -> Y anziché X -> Y non è solo una scorciatoia, copre anche la città A.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.