Sunteți pe pagina 1din 10

CUPRINS

INTRODUCERE.......................................................................................................................................3

I. PROBLEMA COMIS-VOIAJORULUI. CONSIDERAȚII TEORETICE...........................................4

I.1. SCURT ISTORIC...............................................................................................................................4

I.2. DEFINIREA PCV..............................................................................................................................5

I.3. METODE DE SOLUȚIONARE.......................................................................................................6

II. PROBLEMĂ REZOLVATĂ...............................................................................................................8

II.1. Problema 1.........................................................................................................................................8

CONCLUZIE..........................................................................................................................................10

BIBLIOGRAFIE.....................................................................................................................................11

2
INTRODUCERE

Problema comis-voiajorului (PCV) pune următoarea întrebare: „Dată fiind o listă de orașe și
distanțele între fiecare două orașe, care este cel mai scurt traseu posibil care vizitează fiecare oraș o
singură dată și se întoarce la orașul de origine?” Ea este o problemă NP-dură în optimizarea
combinatorie, cu importanță în cercetarea operațională și în informatica teoretică.

PCV este un caz special al problemei cumpărătorului ambulant și a problemei rutării


vehiculelor.

În teoria complexității, versiunea de decizie a PCV (unde, dată fiind o lungime L, sarcina este
de a decide dacă graful are un ciclu complet mai scurt decât L) aparține clasei problemelor NP-
complete. Astfel, este posibil ca timpul de rulare în cel mai rău caz pentru orice algoritm pentru PCV
să crească superpolinomial (dar nu mai mult decât exponențial cu numărul de orașe.

Problema a fost formulată pentru prima dată în 1930 și este una dintre cele mai intens studiate
probleme de optimizare. Ea este utilizată ca benchmark pentru multe metode de optimizare. Chiar dacă
problema este dificilă computațional, se cunosc numeroși algoritmi euristici și exacți, astfel încât unele
cazuri cu zeci de mii de orașe pot fi rezolvate complet și chiar probleme cu milioane de orașe pot fi
aproximate cu o eroare de 1%.

PCV are mai multe aplicații, chiar și în cea mai pură formulare, cum ar fi
în planificare, logistică, și la fabricarea de microcipuri. Ușor modificată, ea apare ca o subproblemă în
multe domenii, cum ar fi secvențierea ADN-ului. În aceste aplicații, conceptul de oraș reprezintă, de
exemplu, clienți, puncte de sudură, sau fragmente de ADN, și conceptul de distanță reprezintă durata
de deplasare, costul de realizare, sau o măsură a similarității între fragmente de ADN. PCV apare și în
astronomie, astronomii care observă mai multe surse dorind să minimizeze timpul petrecut de telescop
în mișcare între surse. În multe aplicații se pot impune constrângeri suplimentare, cum ar fi resursele
limitate sau ferestre de timp.

3
I. PROBLEMA COMIS-VOIAJORULUI. CONSIDERAȚII TEORETICE

I.1. SCURT ISTORIC

Originile problemei comis-voiajorului nu sunt bine cunoscute. Un manual pentru vânzătorii


ambulanți din 1832 menționează problema și include exemple de drumuri optime prin Germania și
Elveția, dar nu conține nicio tratare matematică.

Problema comis-voiajorului a fost formulată matematic în anii 1800 de către matematicianul


irlandez W. R. Hamilton și de matematicianul britanic Thomas Kirkman. Jocul icosian al lui
Hamilton era un puzzle bazat pe găsirea unui ciclu hamiltonian. Forma generală a PCV pare să fi fost
mai întâi studiată de către matematicieni în anii 1930, la Viena și la Harvard, în special de către Karl
Menger, care a definit problema, a considerat algoritmul evident al forței brute, și a observat
neoptimalitatea euristicii bazate pe vecinul cel mai apropiat:

„Prin problema curierului (întrucât în practică această întrebare și-o pune fiecare poștaș, dar
și numeroși alți calători) notăm găsirea, pentru un număr finit de puncte între care știm distanțele
două câte două, a rutei celei mai scurte care leagă toate punctele. Desigur, această problemă poate fi
rezolvată printr-un număr finit de încercări. Nu se cunosc reguli care să aducă numărul de încercări
sub numărul de permutări al punctelor date. Regula care duce curierul din primul punct în cel mai
apropiat, apoi în cel mai apropiat de acesta etc., în general nu produce ruta cea mai scurtă.”

Prima dată a fost analizată matematic în anii 1930 de către Merrill Flood, care încerca să
rezolve problema rutării unui autobuz școlar. Hassler Whitney de la Universitatea Princeton a introdus
numele de problema comis-voiajorului puțin după aceea.

În următoarele decenii, problema a fost studiată de mulți cercetători din matematică,


informatică, chimie, fizică și alte științe. În anii 1960, însă, a fost creată o nouă abordare care, în loc să
caute soluțiile optime, producea o soluție a cărei lungime era demonstrabil delimitată de un multiplu al
lungimii optime, și astfel se creea limite inferioare pentru problemă; acestea pot fi apoi utilizate cu
abordări branch and bound. O metodă în acest sens a fost crearea un arbore minim de acoperire al
grafului și apoi dublarea tuturor marginilor sale, care produce limita ca lungimea unui drum optim să
fie cel mult dublul ponderii unui arbore minim de acoperire.

4
I.2. DEFINIREA PCV

Problema Comis-Voiajorului este definită astfel:

Fie G = (V, E) este un graf neorientat în care oricare două vârfuri diferite ale grafului
sunt unite printr-o latură căreia îi este asociat un cost strict pozitiv. Cerința este de a determina
un ciclu care începe de la un nod aleatorie a grafului, care trece exact o dată prin toate celelalte
noduri şi care se întoarce la nodul inițial, cu condiția ca ciclul sa aibă un cost minim. Costul unui
ciclu este definit ca suma tuturor costurilor ataşate laturilor ciclului.

Numele problemei provine din analogia cu un vanzator ambulant care pleacă dintr- un
oraş, care trebuie să viziteze un număr de oraşe dat şi care apoi trebuie să se întoarcă la punctul de
plecare, cu un efort minim (de exemplu timpul minim, caz în care costul fiecărei laturi este egal cu
timpul necesar parcurgerii drumului).
Prin urmare, fie-G = (V, E) un graf conectat neordonat, definit de un set de noduri V şi de
un set de laturi E.
Dacă vom marca cu V '= {vi | i =1,..., n -1} set de noduri asociate oraşelor care trebuie să
fie vizitate şi dacă vom marca cu v0 nodul care este asociat cu oraşul din care vanzator ambulant
pleaca (de bază), vom avea V = V ' {v0 }.Am marca, de obicei, lungimea laturii dintre nodurile
vi şi vj cu lij şi costul asociat parcurgerii laturii dintre vi si vj cu cji.

Fig.1.1 Fig.1.2

Marginile colorate în verde, ne dau un ciclu care porneste de la nodul A, având costul următor:
1 +4 +1 +2 +5 = 13 pe calea A-B-D-C-E-A.

Marginile colorate în roşu ne dau un ciclu care porneste de lanodul B, având costul următor:
1 +2 +1 +3 +3 = 10 pe calea B-A-C-D-E-B.

Prin urmare, al doilea ciclu este mai bun ca prima, având în vedere costul redus.
5
I.3. METODE DE SOLUȚIONARE

Căile principale de abordare ale problemelor de tipul « NP » sunt următoarele :


Algoritmi pentru găsirea soluţiilor exacte (ex. Backtracking - aceştia vor funcţiona rezonabil
doar pentru problemele de dimensiuni relativi mici)
I. Prin metoda backtracking, orice vector soluție este construit progresiv, începând cu
prima componentă și mergând către ultima, cu eventuale reveniri asupra valorilor
atribuite anterior.
Metoda backtracking urmărește să evite generarea tuturor soluțiilor posibile, scurtându-se
astfel timpul de calcul.
Componentele vectorului x primesc valori în ordinea crescătoare a indicilor. Aceasta
înseamnă că lui xk nu i se atribuie valori decât după ce x1, ...,xk-1 au primit valori care nu contrazic
condițiile interne. Mai mult, valoarrea lui xk trebuie aleasă astfel încât x1,...,xk să îndeplinească și
ele anumite condiții, numite condiții de continuare, care sunt strâns legate de condițiile interne.
Astfel, dacă în exemplul dat componentele x1 și x2 au primit amândouă valoarea X, atunci
lui x3 nu i se mai poate atribui această valoare (pentru a nu încălca restricția ca numărul maxim de
pronosticuri X să fie cel mult 2).
Neîndeplinirea condițiilor de continuare exprimă faptul că oricum am alege xk+1,...xn, nu
vom obține o soluție (deci condițiile de continuare sunt strict necesare pentru obținerea unei soluții).
Ca urmare se va trece la atribuirea unei valori lui xk doar când condițiile de continuare sunt
îndeplinite. În cazul neîndeplinirii condițiilor de continuare, se alege o nouă valoare pentru xk sau, în
cazul când mulțimea finită de valori Vk a fost epuizată, se încearcă să se facă o nouă alegere pentru
componenta precedentă xk-1 a vectorului, micșorând pe k cu o unitate etc. Această revenire dă
numele metodei, exprimând faptul că atunci când nu putem avansa, urmărim înapoi secvența curentă
din soluție.
Trebuie observat că în anumite cazuri, faptul că v1,v2,...,vk-1 satisfac condițiile de
continuare nu este suficient pentru a garanta că se va obține o soluție alei care prime k-1 componente
coincid cu aceste valori. De pildă, chiar dacă x1 și x2 sunt X, iar x3 este 1 (deci aceste valori
îndeplinesc condițiile de continuare curente), totuși (X,X,1,1) nu este soluție.
Alegerea condițiilor de continuare este foarte importantă, o alegere bună ducând la o
reducere substanțială a numărului de calcule. În cazul ideal, condițiile de continuare ar trebui să fie
nu numai necesare, dar și suficiente pentru obținerea unei soluții. De obicei însă, acestea reprezintă
restricția condițiilor interne la primele k componente ale vectorului. Evident, condițiile de continuare
în cazul k=n sunt chiar condițiile interne.
6
Prin metoda backtracking, orice vector soluție este construit progresiv, începând cu prima
componentă și mergând către ultima, cu eventuale reveniri asupra valorilor atribuite anterior.
Reamintim că x1,x2,...,xn primesc valori în mulțimile v1, ,vn .

II. Născocirea metodelor euristice de rezolvare aproximativă a TSP (metode bune, dar
care nu pot fi considerate optime)

În situațiile în care pentru anumite problem complexe, pentru a căror rezolvare nu se cunosc
algoritmi, sau aceștia sunt ineficienți(timp memorie, cost), se prefer utilizarea unor algoritmi care
rezolvă problema dată mult mai rapid, cu effort mic, însă nu ne va furniza întotdeauna cea mai bună
soluție, cîd oar soluții acceptabile, adică soluții corecte care pot fi eventual îmbunătățite.

Prin algoritm euristic vom înțelege un algoritm care furnizează soluții bune nu neapărat optime,
care poate fi implementat rapid și furnizează rezultate în timp util.

O idee frenvent ultilizată constă în descompunerea procesului de determinare a soluției în mai


multe etape successive pentru care se poate determina optimul local.

III. Găsirea unor cazuri speciale pentru problemă (Greedy).

În strategia backtracking căutarea soluţiei, adică vizitarea secvenţială a nodurilor grafului


soluţiilor cu revenire pe urmă lăsată, se face oarecum “orbeşte” sau rigid, după o regulă simplă care să
poată fi rapid aplicată în momentul “părăsirii” unui nod vizitat. În cazul metodei (strategiei) greedy
apare suplimentar ideea de a efectua în acel moment o alegere. Dintre toate nodurile următoare
posibile de a fi vizitate sau dintre toţi paşii următori posibili, se alege acel nod sau pas care asigură un
maximum de “cîştig”, de unde şi numele metodei: greedy = lacom.

Aparent această metodă de căutare a soluţiei este mai eficientă, din moment ce la fiecare pas se
trece dintr-un optim (parţial) într-altul. Totuşi, ea nu poate fi aplicată în general ci doar în cazul în care
există certitudinea alegerii optime la fiecare pas, certitudine rezultată în urma etapei anterioare de
analiză a problemei.

7
II. PROBLEMĂ REZOLVATĂ

Problema 1:

Un comis-voiajor pleacă dintr-un oraș, trebuie să viziteze un număr de orașe și să se întoarcă în


orașul de unde a plecat cu efort minim. Orice oraș i este legat printr-o șosea de orice alt oraș j printr-un
drum de A[i,j] kilometri.
Se cere traseul pe care trebuie să-l urmeze comis-voiajorul, astfel încât să parcurgă un număr
minim de kilometri.
Rezolvare:
#include <iostream>
using namespace std;
int s[10],a[10][10],n,i,j,v,p,vs,vs1,mint,cost;
main()
{

cout<<"Numar noduri=";cin>>n;
for(i=1;i<=n;i++)
for(j=i+1;j<=n;j++)
cout<<"A["<<i<<"]["<<j<<"]=",cin>>a[i][j],a[j][i]=a[i][j];
cout<<"Nod de pornire:";cin>>v; s[v]=1;
vs1=v;
cout<<"Drumul trece prin:"<<v<<' ';
p=v;
for(i=1;i<n;i++)
{
mint=3000;
for(j=1;j<=n;j++)
if(a[v][j]!=0&&s[j]==0&&mint>a[v][j])
{
mint=a[v][j];
vs=j;
}
cost+=a[v][vs];
cout<<vs<<' ';
s[vs]=1;
v=vs;
}
cout<<p;
cost+=a[vs1][v];
cout<<endl<<"Cost="<<cost;

8
Răspuns:

9
CONCLUZIE

Se mai poate spune foarte multe la tema dată, însă prin intermediul aceastei lucrări am avut
tendința de a arata și demonstra unele elemente și linii generale privind tematica data. Un lucru este
cert, în urma citirii acestei lucrari, putem afirma cu certitudne că problema „comis-voiajorului” este
una complexă și poate fi abordată din diferite perspective.

Scopul propus la elaborarea acestei lucrări a fost de a afla întîi de toate istoria acesteia, cine au
fost primii savanți care au descoperit și definit această problemă, dar și principalele metode de
soluționare a ei. În primul capitol am prezentat istoria apariției problemei și proveniența numelui
acesteia. Am încercat să definesc problema în linii generale și să prezint o reprezentare grafică cu
ajutorul grafului. În următorul subcapitol am cercetat algoritmi pentru găsirea soluţiilor exacte și
anume: Metoda backtracking, care urmărește să evite generarea tuturor soluțiilor posibile, scurtându-
se astfel timpul de calcul; Metoda euristică, ce prezintă un algoritm care furnizează soluții bune nu
neapărat optime, care poate fi implementat rapid și furnizează rezultate în timp util; Metoda Gredy,
care aparent această metodă de căutare a soluţiei este mai eficientă, din moment ce la fiecare pas se
trece dintr-un optim (parţial) într-altul. Totuşi, ea nu poate fi aplicată în general ci doar în cazul în care
există certitudinea alegerii optime la fiecare pas, certitudine rezultată în urma etapei anterioare de
analiză a problemei.

În ultimul capitol am realizat un program în limbajul c++, cu ajutorul căruia putem obține
rezolvarea unei anumite probleme.

10
BIBLIOGRAFIE

1. Stoica M., Ioniţă I., Botezatu M., Modelarea şi simularea proceselor economice, Editura
Economică, Bucureşti, 1997.
2. Ratiu-Suciu, C., Modelarea şi simularea proceselor economice, Editura didactică şi pedagogică,
Bucuresti, 1995.
3. https://ro.wikipedia.org/wiki/Problema_comis-voiajorului

11

S-ar putea să vă placă și