Keliaujančio pardavėjo problema (dažnai sutrumpintai TSP) yra klasikinis algoritminis uždavinys informatikos ir operacijų tyrimų srityje. Ji priklauso optimizavimo uždavinių klasei ir dažnai interpretuojama kaip paieška trumpiausio maršruto per tam tikrą mazgų (taškų) aibę. Paprastai problema formuluojama ant pilno svorinėto grafo: duota mazgų aibė V ir kiekvienai mazgų porai priskirtas svoris (atstumas) w(u,v); užduotis – rasti Hamiltono ciklą (kelionę, kuri aplanko kiekvieną mazgą tik vieną kartą ir grįžta į starto tašką), kurio bendras svoris minimaliu.
Šioje srityje geresnis sprendimas dažnai reiškia sprendimą, kuris yra pigesnis, trumpesnis arba greitesnis. TSP yra tiek teorinė, tiek labai praktinė problema: sprendimai taikomi maršrutų planavimui, logistikai, gamybos procesams ir net biotechnologijose.
Istorija
XIX a. keliaujančio pardavėjo problemą pirmaisiais paminėjimais sieja airių matematikas W. R. Hamiltonas ir britų matematikas Thomas Kirkmanas. Hamiltono Icosian Game buvo pramoginis galvosūkis, pagrįstas Hamiltono ciklo radimu. Svarbesnis formalus TSP nagrinėjimas prasidėjo XX a. trečiajame dešimtmetyje – matematikai Vienoje ir Harvarde (tarp jų Karlas Mengeris) aiškiai formulavo problemos variacijas, aptarė paprastas (brutalios jėgos) strategijas ir pastebėjo kai kurias euristikas kaip neoptimalias. Mengerio citata iš to laikotarpio iliustruoja probleminį pobūdį:
Pašnekovo uždaviniu (nes praktiškai šį klausimą turėtų spręsti kiekvienas paštininkas, bet kokiu atveju ir daugelis keliautojų) vadiname uždavinį rasti trumpiausią maršrutą, jungiantį fiziškai daug taškų, kurių poriniai atstumai yra žinomi. Žinoma, šis uždavinys išsprendžiamas baigtinai daug bandymų. Taisyklės, dėl kurių bandymų skaičius būtų mažesnis už duotų taškų permutacijų skaičių, nėra žinomos. Taisyklė, kad iš pradinio taško pirmiausia reikia eiti į artimiausią tašką, tada į artimiausią tašką ir t. t., apskritai neduoda trumpiausio maršruto.
Netrukus Prinstono universitete Hassleris Whitney pavadino šį uždavinį keliaujančio pardavėjo problema. Vėliau, XX a. viduryje, Dantzigas, Fulkersonas ir Johnsonas (1954) demonstravo praktinius sprendimo metodus (šakų ir ribų metodus bei LP formuluotes) ir parodė, kad su kompiuterine pagalba galima išspręsti gana dideles instancijas. Vėlesni darbai – Held–Karp (dinaminio programavimo riba ir 2^n n^2 laiko algoritmas), Christofides (1.5 aproksimacija metric TSP) ir galingi komerciniai bei akademiniai sprendėjai (pvz., Concorde, LKH) – gerokai išplėtė galimybes.
Formalus apibrėžimas ir variacijos
Standartiškai TSP apibrėžiama taip: duotas pilnas svorinėtas grafas G=(V,E) su |V|=n ir svoriais w: E → R_+. Raskite Hamiltono ciklą su mažiausia svorių suma. Dažniausios variacijos:
- Simetrinis TSP – w(u,v)=w(v,u) visoms poroms (dažnai modeliuoja euklidinę geometriją).
- Asimetrinis TSP – w(u,v) ≠ w(v,u) (pvz., skrydžių ar vienpusių kelių tinklai).
- Metric TSP – svoriai tenkina trikampio nelygybę: w(u,v) ≤ w(u,x)+w(x,v) (daug praktinių atvejų, pvz., Euklidiniai atstumai).
- Kita – papildomos sąlygos: laiko langai, kelių maršrutų (VRP), apribojimai dėl krovinio ir pan.
Skaičiavimo sudėtingumas
TSP yra skaičiavimo požiūriu sudėtinga: optimizavimo versija yra NP-sunki, o sprendimo egzistavimo (ar yra maršrutas, kurio ilgis ≤ B) versija yra NP-pilna. Tai reiškia, kad greito (polinominio laiko) algoritmo, kuris visada rastų optimalų sprendimą, kol kas nežinoma; manytina, jog toks algoritmas neegzistuoja (nebent P=NP).
Algoritmai
Yra trys pagrindinės sprendimo priėmimo kryptys: tikslūs metodai, aproksimacinės algoritmai ir euristikos / metaeuristikos.
Tikslūs algoritmai
- Brutalios permutacijos: išbandomos visos (n-1)! maršrutų permutacijos — garantuoja optimalumą, bet laiko sudėtingumas O(n!) greitai tampa nevaldoma.
- Dinaminis programavimas (Held–Karp): laikas O(n^2 2^n), atmintis O(n 2^n) — praktinis iki n ≈ 30–40.
- Šakų ir ribų (branch-and-bound) bei karpymo plokščių metodai (cutting planes, LP): naudojami profesionaliuose sprendžiuose (pvz., Concorde) ir leidžia išspręsti labai dideles instancijas optimaliai.
Aproksimaciniai algoritmai
- Christofides algoritmas (1976): suteikia 1.5 aproksimaciją metric versijai (simetrinis TSP su trikampio nelygybe).
- Double-tree (2-approx): paprastas dvigubinimo ir sutrumpinimo metodas.
- Asimetrinė versija turi savus aproksimacijos rezultatus, tačiau sunkiau pasiekti mažus koeficientus.
Euristikos ir metaeuristikos
Dažnai praktiškai sprendžiant dideles instancijas prioritetas yra gera kokybinė sprendimo greitai (nebūtinai optimalu). Populiarūs metodai:
- Artimiausio kaimyno (nearest neighbor): paprasta, bet gali duoti prastą rezultatą (kaip pastebėjo Mengeris).
- Įterpimo euristikos (insertion) – greitos pradinės sprendimo konstrukcijos.
- Lokalus tobulinimas: 2-opt, 3-opt (keitimai, kurie pašalina kryžmius), Lin–Kernighan heuristika (labai efektyvi praktikoje).
- Metaeuristikos: genetiniai algoritmai, sukimo atitirpinimas (simulated annealing), skruzdžių kolonijų optimizavimas (ant colony optimization) — tinkami didelėms, realioms problemoms.
Praktinės įgyvendinimo priemonės
Yra kelios plačiai naudojamos bibliotekos ir sprendėjai: Concorde (galingas tikslus sprendėjas), LKH (Lin–Kernighan heuristikos implementacija), įvairūs komerciniai optimizavimo paketai. Šios priemonės naudoja mišrias strategijas: LP relaxacijas, šakų ir ribų, karpymo plokštes bei pažangias lokalaus tobulinimo heuristikas.
Panaudojimo sritys
TSP ir jos variacijos taikomos:
- krovinių ir maršrutų planavimui, logistikai;
- gamybos procesų optimizavimui (pvz., gręžimo tvarka)
- mikrograndinių (PCB) gamybai ir litografijai;
- genetinių duomenų apdorojimui (kai kurias problemas galima modeliuoti kaip eiliškumą ar sutapimus);
- robotikos maršrutų planavimui ir kt.
Išvados
Keliaujančio pardavėjo problema – fundamentali ir plačiai nagrinėjama optimizavimo užduotis: ji turi stiprų teorinį pagrindą, įdomią istoriją ir daugybę praktinių pritaikymų. Nors optimalus sprendimas yra skaičiavimo požiūriu sunkus, plati įrankių ir algoritmų įvairovė leidžia rasti gerus sprendimus įvairioms realioms situacijoms.


