Sunteți pe pagina 1din 8

P r o b l e m a C o m i s- Voiajorului

Punerea problemei
Problema Comis-Voiajorului timp, caz in care costul unei muchii este egal cu timpul

este definita astfel [1]: Fie G = (V,E) in care un graf

necesar parcurgerii sale). Fie astfel graful conex

neorientat doua

oricare ale

varfuri sunt

diferite unite

neorientat G(V,E) definit de multimea varfurilor V si de multimea notam cu muchiilor E. Daca

grafului

intre

ele printr-o muchie careia i se asociaza un cost strict pozitiv. Se cere sa se

V ' = {v i | i = 1,...,n 1}
asociate

determine un ciclu care sa inceapa oarecare treaca toate sa se dintr-un al grafului, o data varf sa prin si

multimea

varfurilor

oraselor de vizitat iar cu v0 varful plecare avea asociat initial orasului (baza), De de vom

exact

celelalte intoarca

varfuri in

V = V ' {v0 } .

regula

varful

notam cu lij lungimea muchiei dintre varfurile vi si vj sau cu cij costul muchiei asociat dintre

initial, ciclul indeplinind in plus conditia de a avea un cost minim. Costul unui ciclu este definit ca suma a costurilor atasate muchiilor componente. Numele problemei provine de la analogia cu un comis-

parcurgerii

varfurile vi si vj. In [1] si [2] este prezentat urmatorul algoritm euristic de tip greedy care furnizeaza o solutie a problemelor de tip comis-voiajor intr-un interval de timp polinomial. Astfel, este

voiajor care pleaca dintr-un oras, trebuie sa viziteze un numar de orase date si apoi sa se intoarca in orasul de plecare (de cu minim in de efort de

daca

(v0,v1,...,vk)

lantul deja construit, atunci

exemplu

minim

- daca {v0,v1,...,vk}=V, atunci muchia se adauga si

muchie (vk,vk+1) care este de cost minim si pentru care vk+1{v0,v1,...,vk}.

(vk,v0)

constructia ciclului este incheiata; - daca {v0,v1,...,vk}V, atunci se adauga acea

Reprezentarea grafului G
Fie: N = |V|, numarul variabila COST, care va contine costul lantului

varfurilor grafului G; C = matrice patrata de ordinul N, C(N,N), in -

deja construit; vectorul componente 1, dac vrful i apartine P(i)= lantului deja construit ; 0, dac nu ; vectorul CICLU, avand N+1 componente, memoreaza varfurile construit; variabila contine varfurilor CICLU la NC, care va in in care se P avand N

care elementul c(i,j)0 reprezinta costul

asociat muchiei (i,j); Elementele diagonala de pe

principala,

c(i,i), vor avea valori mult mai mari decat

ordine deja

lantului

celelalte nediagonale, evita

elemente pentru a

aparitia

unor

muchii cu ambele capete incidente la un acelasi varf;

numarul existente pasul in

curent.

Procedura de calcul Comis-Voiaj


Procedura PCV (N, C, i, CICLU, COST) /* i este varful din care incepe constructia ciclului */ integer CICLU(N+1), P(N) real C(N,N) for k = 1,N P(k) = 0 CICLU(1) = i NC = 1 P(i) = 1 COST = 0 v = i for k = 1, N-1 CMIN = for j = 1, N /* se adauga pe rand N-1 varfuri; */ /* se identifica o muchie (v,w) de */ /* cost minim cu w varf neparcurs; */ CMIN = C(v,j) w = j endif repeat CICLU(k+1) = w COST = COST + CMIN P(W) = 1 v = w repeat CICLU(N+1) = i COST = COST + C(v,i) return end

if (P(j) = 0) (C(v,j) < CMIN) then

Aplicand

acest

algoritm
5 5 3 4 7 2

1 2 4 4 3 1 2

pentru graful din figura 1, graf avand n = 5 varfuri si m = 10 muchii, 1, si se pornind obtine

din

varful

ciclul din figura 2, avand costul egal cu 14. Costul

Fig. 1. Graf complet


1 7 5 2 1 3 2

individual al muchiilor este marcat ele, pe fiecare dintre de

fiind

trecut

asemenea si in matricea C.

Fig. 2. Ciclu posibil

1 C = 2 7 5

1 4 4 3

2 4 1 2

7 4 1 3

5 3 2 3

Acest optim mai

ciclu (nu mica are

nu

este

insa cea

obtin cicluri de cost 10. In figura 4 este reprezentat

lungimea

dintre

toate

ciclul de cost 10 considerand varful 3 drept varf initial.

ciclurile posibile in graf), existand de exemplu ciclul

din figura 3 pentru care se obtine costul 13 pornind din varful 5. Daca se porneste

din varfurile 2, 3 sau 4, se


4

1 5 5 1 2 5 3 4 3 4

1 2 1 2

Fig. 3. Ciclu de cost 13

Fig. 4. Ciclu de cost 10

Observatii
1. Algoritmul euristic deci ca reluarea cu mici modificari a unui algoritm euristic intr-o poate oarecare compensa masura

prezentat respecta conditia necesara ciclu de a obtine din un

pornind

varful

v0, trecand exact o data prin fiecare din celelalte varfuri si intorcandu-se

neajunsurile sale. 3. In cazul grafelor care nu sunt complete (exista

apoi in varful v0 , dar in locul conditiei ca ciclul sa fie de cost minim se

perechi de varfuri neunite prin muchii datorita

obstacolelor naturale din teren), algoritmul poate fi aplicat prin fixarea unor valori mult mai mari ale

accepta

compromisul

alegerii la fiecare pas a muchiei de cost minim. 2. Rezultatul algoritmul sus poate obtinut prezentat fi cu mai

costurilor inexistente fata

muchiilor de cele

imbunatatit

ale muchiilor existente. 4. Daca pentru un varf initial din cele alese se ajunge la un moment dat la un lant de cost mai mare decat cel al ciclului obtinut
5

daca se efectueaza rulari succesive pentru un numar M { 2, ... , N} de varfuri distincte, retinand dintre toate solutiile obtinute pe cea de cost minim. Rezulta

de prin

cost

minim

aplicarea

procedurii pentru varfurile deja tratate, se poate

c(i,j) c(j,i). Este cazul rutelor aeriene din Statele Unite, unde, datorita directiei predominante ale vanturilor, durata unui zbor intre doua orase in sensul de la est la vest difera de durata zborului de la vest la est intre aceleasi orase.

intrerupe

completarea

acestui lant si se va trece la varful initial urmator. 5. In exemplul prezentat, matricea C are o structura simetrica, respectiv c(i,j) = c(j,i). In realitate, pot exista situatii in care

Exemple de aplicatii tehnice


a) Determinarea configuratiei traseelor retelelor electrice buclate: Cunoscand amplasamentele conectate traseul printr-o cautat muchie,

corespunde

unuia din cele (N-1)! cicluri posibile ce se pot forma intre varfurile numarul grafului, al N fiind

consumatorilor si pe cel al sursei de alimentare, avem

total

varfurilor

de determinat un traseu care pornind de pe bara sursei de alimentare sa treaca exact o data pe la fiecare

grafului. b) Determinarea configuratiei traseelor conductelor de

termoficare; c) Determinarea rutelor pentru mijloace de transport: transport aerian; transport urban public; transport de marfa

consumator si sa se intoarca la sursa, traseul

indeplinind si conditia de a avea o lungime minima.

Considerand consumatorii si sursa de alimentare ale unui in drept graf care sunt
6

varfuri neorientat oricare

conex

doua

varfuri

Bibliografie
1. L.Livovschi, H.Georgescu: Sinteza si analiza Editura algoritmilor. Stiintifica, 3. Editura Bucuresti, 1994. O.Patrascoiu, Gh.Marian, N.Mitroi: grafuri Copos, combinatorica. algoritmi si Elemente de si Metode, programe. Intact,

Bucuresti, 1986. 2. I. Odagescu, C.

D. Luca, F. Furtuna, I. Smeureanu: tehnici de Metode si

Editura All, Bucuresti, 1994.

programare.

Problema Comis-Voiajorului
#include <stdio.h> #include <conio.h> int i, n, k, nc, v, w, j, cost,cmin; int ciclu[100], p[100]; int c[5][5]={{999,1,2,7,5},{1,999,4,4,3},{2,4,999,1,2},{7,4,1,999,3},{5,3,2,3,999}}; void main (void) { clrscr(); cost=0; printf("\nIntroduceti numarul virfurilor: "); scanf("%d",&n); for (k=1; k<n+1; k++) { p[k]=0; } printf("\nDeclarati virful din care incepe constructia ciclului: "); scanf("%d",&i); ciclu[1]=i; nc=1; p[i]=1; v=i; for (k=1; k<n; k++) { cmin=999; for (j=1;j<n+1;j++) { if ((p[j]==0) && (c[v-1][j-1]<cmin)) { cmin=c[v-1][j-1]; w=j; } } ciclu[k+1]=w; cost=cost+cmin; p[w]=1; v=w; } ciclu[n+1]=i; cost=cost+c[v-1][i-1]; printf("\nOrdinea de parcurgere a virfurilor este :\n\n"); for (k=1; k<n+1; k++) { printf(" %d ", ciclu[k]); } printf("\n\nValoarea costului asociat ciclului parcurs este : "); printf("%d", cost); printf("\n\nApasati o tasta pentru terminarea programului "); getch(); }

Tema
Modificati programul de calcul de mai sus pentru a permite: a. construirea automata, pe rand, a ciclurilor incepand din fiecare varf al grafului; b. memorarea ciclului cu cel mai scazut cost; c. preluarea coordonatelor xOy ale varfurilor grafului, calculul automat al distantelor dintre varfuri si apoi rezolvarea problemei ca la punctul anterior.
8