Documente Academic
Documente Profesional
Documente Cultură
FACULTATEA DE INFORMATIC
Lucrare de licen
propus de:
Prin prezenta declar c Lucrarea de licen cu titlul Cadru de lucru pentru rezolvarea
problemelor tip Stable-Matching este scris de mine i nu a mai fost prezentat niciodat la
o alt facultate sau instituie de nvmnt superior din ar sau din wstrintate. De ase-
menea, declar c toate sursele utilizate, inclusiv cele preluate de pe Internet, sunt indicate n
lucrare, cu respectarea regulilor de evitare a plagiatului:
toate fragmentele de text reproduse exact, chiar i n traducere proprie din alt
limb, sunt scrise ntre ghilimele i dein referina precis a sursei;
reformularea n cuvinte proprii a textelor scrise de ctre ali autori deine refer-
ina precis;
codul surs, imagini etc. preluate din proiecte open-source sau alte surse sunt uti-
lizate cu respectarea drepturilor de autor i dein referine precise;
_________________________
(semntura n original)
DECLARAIE DE CONSIMMNT
Prin prezenta declar c sunt de acord ca Lucrarea de licen cu titlul Cadru de lucru
pentru rezolvarea problemelor tip Stable-Matching, codul surs al programelor i celelalte
coninuturi (grafice, multimedia, date de test etc.) care nsoesc aceast lucrare s fie utili-
zate n cadrul Facultii de Informatic. De asemenea, sunt de acord ca Facultatea de Infor-
matic de la Universitatea Alexandru Ioan Cuza din Iai s utilizeze, modifice, reproduc i
s distribuie n scopuri necomerciale programele-calculator, format executabil i surs, reali-
zate de mine n cadrul prezentei lucrri de licen.
_________________________
(semntura n original)
5
Cuprins
Introducere ............................................................................................................................... 6
1 Stable Matching................................................................................................................ 9
1.1 Caracteristici generale .............................................................................................. 9
1.2 One-to-one ............................................................................................................. 10
1.3 One-to-many .......................................................................................................... 19
1.4 Many-to-many ....................................................................................................... 21
1.4.1 Stable - Allocation ................................................................................................. 21
1.4.2 Two-sided Market sau Teachers-Repartition ....................................................... 24
2 Modelarea problemelor de Stable-Matching prin reprezentri XML. Instanierea
problemelor ................................................................................................................................ 27
2.1 Schema XSD a modelului de baz ......................................................................... 27
2.2 Particularitile problemelor definite prin structura XML .................................. 29
2.3 Specificaii importante ........................................................................................... 32
3 Arhitectur i implementare ......................................................................................... 32
3.1 Schema general a funcionrii proiectului .......................................................... 33
3.2 Structura proiectului .............................................................................................. 34
3.3 Detalii de implementare al algoritmilor................................................................ 37
3.4 Serviciul REST ........................................................................................................ 39
3.5 Tehnologii i platforme utilizate ........................................................................... 40
4 Lucrul cu serviciul de Stable-Matching ........................................................................ 42
5 Concluzii i perspective de viitor .................................................................................. 46
Bibliografie ............................................................................................................................. 47
6
Introducere
Motivaie
Problema construirii unei repartiii stabile a aprut n 1962, introdus de Gale i Shap-
ley, n lucrarea College admissions and the stability of marriage [1] care a dezvoltat ulteri-
or un interes sporit din partea multor cercettori, fiind aplicabil n viaa real.
Dou seturi de entiti, femei i brbai, fiecare element avnd specificat o anumit
list de preferine cu corespondeni din setul opus, se doresc a fi repartizai ntr-un Stable-
Matching. Stabilitatea este dat de inexistena a dou elemente care s-ar prefera reciproc fa
de cei cu care au fost asignai. Varianta iniial a problemei face parte din clasa one-to-one
de instane i trateaz doar cazul unei distribuii ntre dou elemente din clase diferite.
Problema s-a extins i la cazuri mai complexe, one-to-many i many-to-many.
O problema real a fost sesizat n New York, unde, n fiecare an, elevii care ncheiau
clasa a 8-a, trebuiau s depun aplicaii pentru liceul dorit, completnd o list cu cte 5 pre-
ferine. n primul tur, liceele i alegeau preferaii din toi aplicanii iar elevii care nu au fost
acceptai la niciun liceu din cele specificate, intrau n urmtorul tur. Statistica a artat c
majoritatea participanilor care nu aveau performane deosebite nu au ajuns la vreun liceu
menionat n preferinele lor. S-a ajuns, astfel, la construirea unor liste care nu reflectau
neaprat aspiraiile reale ale aplicanilor ci dorina de a fi siguri c vor ajunge la un liceu
7
orecum potrivit din punctul lor de vedere. i, prin urmare, nc din primul tur puteau exista
elevi care s ajung la un liceu mai puin prestigios dei aveau un profil potrivit pentru unul
mai bun, acetia optnd pentru sigurana obinerii unui liceu aproape bun dect pentru a
risca s ajung la un liceu (mai ru) care nu se afla printre preferinele lor. Astfel, s-a
ncercat gsirea unei modaliti noi de distribuii care s reflecte meritele reale ale
aplicanilor [17].
n lucrarea de fa voi prezenta o mare varietate de probleme din aceast clas i voi
arat cum am pus n practic tot ce am studiat din diferite articole care trateaz aceast tem.
Astfel:
- n primul capitol, Stable Matching, am prezentat partea teoretic, att definiii,
tipuri de probleme, exemplificri de instane ct i algoritmii care construiesc
astfel de distribuii stabile;
- n ultima parte este nfiat modul n care se poate utiliza produsul pus la dis-
poziie prin intermediul serviciului REST.
Contribuii
1 Stable Matching
Problemele de tip Stable-Matching sunt nelese, n domenii precum: matematic,
informatic, tiine economice, ca fiind probleme de construire a unei distribuii stabile
ntre dou seturi de elemente. Stable-Marriage reprezint varianta de baz a problemelor de
acest tip.
Definiie SM:
- M = {1 ,2 ... } un set de n elemente, W = {1 ,2 ... } un set de n
elemente
- M este un matching peste cele 2 seturi de elemente (M, W), reprezentnd un
set de perechi (m, w), unde M i W
- M este stabil dac niciuna dintre perechi nu este pereche blocant, adic
trebuie s fie respectat condiia:
(, ) , , (, )
- (m, w) = dac au loc urmtoarele [3]:
o M(m) w;
o P(m, w) > P(m, M(m));
o P(w, m) > P(w, M(w)).
10
1.2 One-to-one
Vom trata pentru nceput cazul de baz, anume problema Stable-Marriage:
Enun:
Fie 2 seturi, femei (W ) i brbai (M ), fiecare avnd aceeai dimensiune, n. Fiecare
element din cele 2 seturi prezint cte o list, ordonat strict descresctor, cu preferinele
tuturor elementelor corespunztoare setului opus.
Cerin:
S se construiasc un SM peste cele dou seturi.
Exemplificare:
Gale i Shapley, n anul 1962, prezentau un algoritm care ar crea un astfel de SM [1];
demonstrnd, chiar, c orice astfel de instn prezint cel puin un SM. Complexitatea timp
a algoritmului este (2 ), n fiind dimensiunea fiecrui set n parte.
Descriere:
Plecnd de la una din mulimile de elemente, se fac, pe rnd, propuneri
Pentru elementul curent, din coada elementelor nc libere, se iau partenerii
preferai n ordine descresctoare
Dac primul element din lista de preferine este liber, atunci se adaug n match-
ul curent perechea (m, w)
n caz contrar, adic elementul w nu este disponibil, fiind deja repartizat cu
altcineva, se va verifica dac nu cumva, w l-ar prefera pe actualul pretendent fa
de cel cu care este deja repartizat, adic (, ) > (, 1 )
n pseudocod avem:
F = lista elementelor disponible; va fi iniializat cu mulimea elementelor din M
(men)
M = matching-ul ce va fi rezultat, iniial fiind mulimea vid ()
Pasul 1: iniializarea
o M=
o F = {1 , 2 , 3 }
o 1 , 2 , 3 = disponibile
o 1 ,2 ,3 = disponibile
Pasul 2: propunerile
. 1 face propuneri:
o F = F \ 1 = {2 , 3 }
o 1 propune ca i partener pe 1
o 1 este disponibil i l accept pe 1 ca i partener
o M = {(1, 1)}
. 2 face propuneri:
o F = F \ 2 = {3 }
o 2 propune ca i partener pe 3
o 3 este disponibil i l accept pe 2 ca i partener
o M = M {(m2, 3 )} = {(1, 1 ), (2, 3 )}
. 3 face propuneri:
o F = F \ 3 =
o 3 propune ca i partener pe 3
o 3 nu mai este disponibil i avem P (3 , 2 ) < (3 , 3 ), deci 3 l va accepta
pe 3 i l va respinge pe 2
o M = M \ {(2 , 3 )} = {(1 , 1 )}
14
Problema de baz Stable-Marriage prezint dou seturi de elemente, ambele cu cte n com-
ponente. Fiecare element prezint cte o list strict ordonat cu cele n elemente din setul
opus. Bineneles, n practic nu pot fi ndeplinite oricnd toate aceste condiii, de aceea ex-
ist i extensii n care condiiile sunt mai permisive.
Pentru aceste tipuri de instane stabilitatea matching-ului ce va fi construit este uor diferi-
t de varianta clasic. Se definesc, deci, trei tipuri de stabilitate [3]:
De acum vom folosi notaia SMTI pentru a ngloba toate tipurile de extensii de Stable-
Matching, anume SMT, SMI i SMTI. De asemenea, restul tipurilor de probleme au fost
tratate fr a fi respectate restriciile prezentate de problema clasic de Stable-Matching.
3 weak-stability n eng.
4 strong-stability n eng.
5 super-stability n eng.
16
Au fost propui algoritmi care construiesc aproximri ale unui SM maximal, spre exemplu
Irving i Manlove propun un algoritm cu factor de aproximare de 5/3 [4], dar cu condiia ca
doar unul din cele dou seturi s conin indiferene n listele de preferine.
Zoltn Kirly ofer o abordare n timp liniar care are factor de aproximare de 3/2 [5] i chiar
fr condiia impus de algoritmul precedent. De asemenea, exist multe alte propuneri ns
cu un factor de aproximare mai puin bun dect cele menionate.
Avnd n vedere c cel din urm prezint o aproximare mai bun, am decis s implementez
aceast variant optimizat a instanelor de tip SMTI i ca urmare l voi prezenta n contin-
uare.
nainte de a prezenta ideea propus de Kirly, vom defini factorul de aproximare. Factorul
de aproximare al unui algoritm de optimizare al dimensiunii matching-ului, pentru instane
de SMTI, desemnat prin f, este acel numr pentru care algoritmul returneaz un matching M
cu dimensiunea size(M) 1/f. [5]
Kirly a pornit de la faptul c multe elemente din primul set (cel care face propuneri) rmn
fr parteneri la final, unii dintre ei fiind preferai n mod egal cu cei cu care au fost dis-
tribuii pretendenii lor, adic P(f, m) = P(f, M(f)). Dezavantajul pornete de la faptul c
dac un nou element face o propunere unui pretendent care are deja ca i partener pe cineva
cu acelai nivel de preferin, acesta este refuzat n favoarea curentului match deoarece nu
prezint un nivel strict mai mare de preferin.
Principiul primul venit, primul servit. Asta reprezint o problem deoarece pot exist cazuri
cnd cel care a fost refuzat s nu mai poat fi acceptat de altcineva, n timp ce, cel pentru
17
care a fost refuzat, s mai poat avea i alte anse. Astfel, dimensiunea matching-ului are de
suferit.
Acest lucru se realizeaz prin creterea nivelului de preferin a tuturor elementelor dis-
ponibile din primul set n listele elementelor opuse. Creterea se face cu un , unde =
12. Spre exemplu dac P (w, 1 ) = P (w, 2 ), iar 2 a rezultat ca fiind disponibil n
matching, vom avea P (w, 2 ) = P (w, 2 ) + . Deci cnd 2 va face din nou propuneri w
l va prefera pe 2 fa de 1 . Valoarea lui este raional i subunitar deoarece se dorete
spargerea egalitilor i nu creterea cu un nivel al elementului care este promovat.
Odat ce un element a fost deja promovat el nu va mai putea fi promovat nc o dat, chiar
dac n matching-ul nou este tot nerepartizat.
Algoritmul se oprete cnd orice element care este liber, la un moment dat, a fost promovat.
GS i Kiraly. Comparaie
Avem instana: W = {1 , 2 , 3 , 4 , 5 } M = {1 , 2 , 3 , 4 , 5 }
Setul W: Setul M:
(1 ): 1 , 2 , 3 , 4 (1 ): 1 , 2
(2 ): 2 , 1 , 4 , 3 (2 ): 1 , (3, 2 ), 4
(3 ): 2 , 1 , 3 , 4 (3 ): 1 , 2 , 5
(4 ): 2 , 1 , 3 , 4 (4 ): 1 , 2
(5 ): 3 , 1 , 2 , 4 (5 ): 5 , 2
| | < | |7
Se observ, deci, c algoritmul lui Kirly ofer un matching cu o dimensiune mai mare dect
algoritmul obinuit. Pentru a crea matching-uri cu un factor de aproximare mai bun, algo-
ritmul lui Kirly a fost folosit i pentru instanele de one-to-many.
1.3 One-to-many
Enun:
Fie dou seturi: spitale (H ) i rezideni (R ). Fiecare element din cele dou seturi
prezint cte o list, ordonat descresctor, cu preferinele elementelor corespunztoare
setului opus. Fiecare spital prezint o capacitate, reprezentnd numrul de posturi
disponibile.
Cerin:
S se construiasc un SM peste cele dou seturi.
Particulariti
Exemplificare
Introducerea noului element care trebuie luat n calcul, capacitatea, nu reprezint o schim-
bare drastic n comportamentului algoritmului de baz. De aceea, elementele cu capacitate
sunt luate n calcul ca fiind capacitate(h) elemente n locul unui singur element h.
1 2 3 4 5 - o muchie orizontal/vertica-
l ntre 2 noduri reprezint 2
1 C(1 ) = 4 elemente preferate n mod
2 egal de elementul desemnat
C(2 ) = 2 de linie/coloan
Algoritm
Algoritmul se construiete pornind de la algoritmul GS, rezidenii fiind cei care fac
propuneri. Spitalele accept n numrul locurilor disponibile i pe baza preferinelor. n ca-
zul cuplurilor dac un spital ar accepta doar unul din cei doi, cuplul va trece la urmtoarea
opiune. Cuplul este tratat ca un singur element dar care ocup 2 locuri n loc de unul. [6]
1.4 Many-to-many
n aceast seciune vorbim despre dou probleme, fiecare cu propriile particulariti, Stable-
Allocation i Two-Sided Market/Teachers Repartition.
Enun:
Fie dou seturi: firme (F ) i lucrtori (W ). Fiecare element din cele dou seturi
prezint cte o list, ordonat descresctor, cu preferinele elementelor corespunztoare
setului opus. De asemenea, fiecare element prezint un numr de uniti. Pe lng unitile
fiecruia exist un numr maxim de uniti pe care l poate oferi un anumit lucrtor la o
anumit firm.
Cerin:
S se construiasc un SM peste cele dou seturi.
Particulariti
Exemplificare
Reprezentarea sub form de graf a acestei instane este mai greu de interpretat, nu aduce
niciun beneficiu vizual, prin urmare, nu o mai costruim.
Algoritm
Baou i Balinski descriu un algoritm pentru a rezolva aceast problem care pleac de la
algoritmul GS [2]. n acest context apare conceptul de alocare de uniti ntre entiti din
seturi diferite.
W = mulimea lucrtorilor
F = mulimea elementelor disponible; va fi iniializat cu W
A(w, f ) = numrul de uniti alocate ntre w i f
23
1 , 2 (1 , 2 ) = 12
Rezultatul obinut pentru instana prezentat:
1 , 3 (1 , 2 ) = 8
2 , 2 (2 , 2 ) = 12
2 , 1 (2 , 1 ) = 4
3 , 1 (3 , 1 ) = 15
4 , 2 (4 , 2 ) = 12
M= 4 , 3 (4 , 3 ) = 2
5 , 1 (5 , 1 ) = 15
5 , 3 (5 , 3 ) = 4
6 , 3 (6 , 3 ) = 10
6 , 2 (6 , 2 ) = 11
7 , 1 (7 , 1 ) = 15
{ 7 , 3 (7 , 3 ) = 7
24
Enun:
Fie dou seturi: firme (F ) i lucrtori (W ). Fiecare element din cele dou seturi
prezint cte o list, ordonat descresctor, cu preferine. Listele conin i grupuri de
elemente. De asemenea fiecare element prezint o anumit capacitate.
Cerin:
S se construiasc un SM peste cele dou seturi.
Particulariti
Exemplificare
Setul F :
P(1 ) : < 1 , 2 >, (< 1 , 3 >, < 3 , 4 >), < 2 , 4 >, < 1 , 4 >, < 2 , 3 >
, 1 , 2 , 3 , 4
P(2 ): (< 1 , 2 >, < 1 , 4 >), (< 2 , 3 >, < 2 , 4 >), < 3 , 4 >, < 1 , 3 >
P(3 ) : < 1 , 4 >, < 1 , 2 >, < 2 , 4 >, 1 , 2 , 4
P(4 ) : < 1 , 2 >, 1 , 2
C(1 ) = 2 C(2) = 2
C(3) = 2 C(4 ) = 2
Setul W:
P(1 ) : < 3 , 4 >, (< 2 , 3 >, < 2 , 4 >), < 1 , 3 >, < 1 , 2 >, 1 , 2 , 3 , 4
P(2 ): (< 3 , 4 >, < 2 , 4 >), < 2 , 3 >, < 1 , 4 >, (< 1 , 3 >, < 1 , 2 >), 1 , 2 , 3 , 4
P(3 ): (< 1 , 2 >, < 2 , 4 >, < 1 , 3 >), < 2 , 3 >, < 1 , 4 >, < 3 , 4 >, 1 , 2 , 3 , 4
P(4 ): (< 1 , 2 >, < 2 , 4 >, < 3 , 4 >), < 1 , 3 >, < 1 , 4 >, < 2 , 3 >, 1 , 2 , 3 , 4
C(1 ) = 2
C(2 ) = 2
C(3 ) = 2
C(4 ) = 2
Algoritm
La la fiecare pas, o firm face propuneri pn nu mai are posturi disponibile. La sfritul unei
runde de propuneri, angajaii, n caz de nc nu au primit suficiente oferte, rmn nc
disponibili, iar restul, care au primit prea multe cereri, aleg dintre ofertele primite ce prefer
mai mult, refuznd firmele mai puin dorite. n momentul n care o firm este respins are
loc fenomenul de eliminare a tuturor grupurilor ce conin entitatea care a refuzat-o.
Algoritmul se termin cnd toate firmele i-au ocupat toate posturile i, cnd cele care nc
au locuri disponibile au fost refuzate de toi angajaii pe care i i-ar mai fi dorit.
W = mulimea lucrtorilor
F = mulimea elementelor disponible; va fi iniializat cu W
c(x) = capacitatea unui element x
prin group se nelege orice tip de element, att grup format din n entiti ct i
dintr-un singur element
Bineneles, fiecare tip de problem prezint particularitile sale dar, toate pleac de la
aceeai configuraie de baz. n continuare voi prezenta structura general a XML-ului i
particularitile fiecrei probleme, iar la Anexe A-D sunt ataate modele de XML pentru
fiecare tip de problem n parte.
Un alt aspect important ce trebuie respectat este faptul c seturile de elemente trebuie
definite nainte s fie specificat vreo preferin. Elementele trebuie s existe pentru a putea
fi sau pentru a putea avea preferine.
n continuare este prezentat schema XSD a XML-ului de baz, pentru probleme one-to-
one.12
11 Deocamdat biblioteca rezolv doar probleme 2D, dar exist i opiunea 3D pentru extensii viitoare
12 Schema a fost generat folosind [13]
28
Definirea capacitii
Pentru instanele de tip one-to-many i many-to-many, unde este necesar s fie specificate
capacitile elementelor, se prezint o structur uor diferit al tagului <set>. Fiecare
element din set va fi caracterizat prin intermediul tagului <element> care va avea ca i
atribut name i capacity.
Definirea cuplurilor
<group>
<couple> r1, r2 </couple>
<couple> r3, r4 </couple>
</group>
Restricii: elementele definite sub tagul <couple> vor fi tratate ca avnd aceleai preferine
deci, dac apar liste pentru ambele elemente, instana se va considera invalid. Tagul
<couple> trebuie s conin maxim dou elemente separate prin virgul.
Definirea grupurilor
<preferences name="f4">
<element name="w1w2" level="1">
<group> w1, w2 </group>
</element>
<element name="w1" level="2">
<element name="w2" level="3">
</preferences>
31
Definirea unitilor
Restricii: max-unitile trebuie specificate pentru fiecare pereche de elemente n parte, iar
pentru aceeai pereche valoarea trebuie s fie identic, altfel instana va fi considerat in-
valid.
32
3 Arhitectur i implementare
n acest capitol se va discuta despre arhitectura proiectului ct i detaliile la nivel de imple-
mentare al cadrului de lucru.
Proiectul poate fi utilizat sub dou forme. n primul rnd, acesta poate fi utilizat ca o bibli-
otec Java importat ntr-un proiect. De asemenea, avnd n vedere uurina pe care o aduc
n ultima perioad microserviciile, proiectul prezint i un serviciu REST prin care ofer
soluii problemelor de Stable-Matching.
Pentru oferirea unei imagini de ansamblu al serviciului REST pe care l-am creat, putem
prezenta urmtoare schem de interacionare cu API-ul:
Fig.
Clientul face 3.1 Diagrama
o cerere de interaciune
HTTP prin care trimite cu
unserviciul
XML cu REST
datele instanei
Instanierea problemei:
Dup parsare, are loc instanierea. Diagrama de clase care modeleaz instanele este re-
prezentat astfel:
Rezolvarea problemei:
Pentru rezolvarea problemei, modulul principal, anume nucleul a fost construit respectnd
ca i design pattern Strategy.
n cazul de fa, Problem reprezint contextul, ea conine datele pentru care se va ti ce tip
de Solver este necesar. Bineneles, SmType este element esenial n determinarea tipului de
problem. SmType este definit ca fiind o enumeraie astfel13:
Structura de date definit pentru reprezentarea rezultatului final poart numele de Match-
ing i prezentm punctele principale din componena acesteia:
@Override
public Matching solve() {
SmLogger.start(true, algorithmName, solverName);
/* array which holds a boolean that specifies if a man was already re-promoted */
boolean visited[] = new boolean[problem.getSets().get(0).getSize()];
Arrays.fill(visited, false);
/* if the current man has already been promoted or it has a matching we pass over
him */
if (visited[i] || !matching.isFree(man))
continue;
/* we promote him */
gsSolver.matching.addFreeElement(problem.element(man.elemId()));
visited[i] = true;
finished = false;
Set women = problem.getSets().get(1);
int womenSize = women.getSize();
/* loop through women to raise the current man's priority with the value of
EPSILON */
for (int j = 0; j < womenSize; j++){
Element woman = women.getElements().poll();
/* we have to verify if the woman has the current man on her list, and if she
does, his priority is raised with EPSILON */
if (woman.accepts(man))
woman.prioritize(man, EPSILON);
}
}
}
SmLogger.start (false, algorithmName, solverName);
return matching;
}
@Override
public Matching solve() {
/* while there are elements that aren't matched yet */
while (!matching.freeElements().isEmpty()) {
/* get its preference element: looping through its list => by the level value */
while (!element.preferences().isEmpty()) {
Element pref = element.preferences().poll();
/* when current element that proposes is better than the current match */
if (currentMatchLevel > currentElemLevel){
if (matching.isFree(elem))
matching.removeFreeElement(elem);
pref.setAvailability(false);
element.setAvailability(false);
currentMatch.setAvailability(true);
/* add the current pair to the Matching and the old match for the
woman to the free list */
matching.removePairFor(element);
matching.addPair(new Pair(element, pref));
matching.addFreeElement(problem.element(currMatchName));
break;
}
}
return matching;
}
Fig 3.8 Implementarea algoritmului propus de Gale i Shapley pentru instane de one-to-one
39
n Figura 4.8 este prezentat implementarea funciei solve a algoritmul de baz de la care au
pornit ideile dezvolatate n toate celelalte variante de solver-e. Am preferat de asemenea s
prezint i algoritmul propus de Kirly, n figura 4.7, deoarece am vrut s nfiez felul n
care am decis s implementez principiul de spargere al egalitilor.
Unele servicii sunt mult mai uor de folosit i de meninut la zi cu toate modificrile dac
prezint i o interfa web, de aceea am optat i pentru oferirea unui serviciu REST.
Pentru implementarea serviciului REST am folosit SpringBoot care ofer o modalitate prac-
tic i uoar. Cea mai important rut este cea care rezolv instana primit, anume ruta de
POST.
n caz de XML-ul primit nu trece de procesul de validare, cu alte cuvinte nu sunt respectate
cerinele specificate n 2.3, se va ntoarce un XML de eroare. La generarea lui s-a folosit
JAXB. Spre exemplu, clasa de baz, adic ResponseXml prezint urmtoarea implementare:
Binncjsncjsbchjsb
Fig 3.11 Structura general a claselor care modeleaz XML-ul ce va fi returnat
Ca i tehnologie principal am optat pentru Java, aceasta oferind un mod uor de implemen-
tare al structurii proiectului i prezentnd concepte care permit gestionarea ntr-un mod
eficient al acestuia. De asemenea, Java are i o varietate de structuri de date uor de utilizat
n cadrul unor algoritmi.
41
Pentru crearea serviciului REST, am folosit framework-ul SpringBoot. REST14 este o arhitec-
tur nclinat spre expunerea unui mod uniform i uor de transfer de date [11]. Acest lucru
se realizeaz prin cereri i rspunsuri, metode HTTP15 16.
SpringBoot ofer un mod uor de lucru cu serviciile REST, acesta realizndu-se prin
adnotri, cum ar fi:
Cea de-a doua adnotare prezint i o multitudine de atribute care ajut la specificarea tu-
turor informaiilor necesare pentru o anumit rut, spre exemplu: value, method, consumes
(opional), produces (opional), headers etc. Utilizarea acestora poate fi observat n figura
3.9.
La realizarea XML-urilor, pentru a putea transpune datele din obiecte n noduri XML am
utilizat JAXB. Ca i SpringBoot, JAXB lucreaz tot cu ajutorul adnotrilor prin care ofer o
modalitate de mapare a obiectelor. Cteva adnotri importante ar fi: @RootElement,
@XmlAttribute, @XmlElement. Un exemplu n care au fost utilizate se poate constata
n figura 3.10.
n continuare se va prezenta modul n care se vor face cereri ctre serviciul rest. Ruta desti-
nat rezolvrii problemelor se apeleaz printr-o cerere20 de tip POST la URI-ul:
http://smrestservices.herokuapp.com/sm/algorithm/{param}.
{param} reprezint tipul problemei, el trebuie s fie identic cu numele problemei spe-cificat
n XML-ul trimis prin POST. Rezultatul pe care clientul l va primi, ca urmare al cerererii,
va fi tot un XML. Un exemplu ar putea fi:
18 host n eng.
19 deploy n eng.
20 request HTTP n eng.
43
Dup cum este menionat n aceast schem i dup cum am observat i n exemplu, output-
ul este alctuit din:
Nodul rdcin care poart numele <result> i prezint dou atribute care ofer de-
talii legate de modul n care a fost generat acest XML rezultat, prin algorithm se
specific numele algoritmului folosit, iar prin description se descrie n cteva cu-
vinte tipul acestuia
ntre 0 i n elemente <match> care prezint cte o pereche format din cel puin
dou noduri <element>
Fiecare <element> are precizat numele i setul din care face parte
44
Prin tagul <unmatched> sunt prezentate acele elemente (din primul set, adic setul
care face propuneri) care nu au reuit s fie distribuite cu nicio alt entitate din
setul opus
n imaginea de mai jos este afiat un exemplu de cerere POST ctre serviciu:
21 Interfaa folosit pentru clientul care apeleaz serviciul este POSTMAN (https://www.getpostman.com/apps)
45
Acum se va oferi un exemplu de rezultat n cazul n care se trimite un XML invalid. Spre
exemplu vom specifica o dimensiune invalid pentru unul dintre cele dou seturi.
Rspunsul care se primete n urma trimiterii unei cereri cu acest XML este:
46
Bibliografie
[1] D. Gale and L. S. Shapley, College admissions and the stability of marriage, Amer.
Math. Monthly, Vol.69, pp. 915, 1962.
[2] M. Baou and M. Balinski, Many-to-many matching: stable polyandrous polygamy (or
polygamous polyandry), Discrete Applied Mathematics, Vol. 101, pp. 112, 2000.
[3] Kazuo Iwama, A Survey of the Stable Marriage Problem and Its Variants, International
Conference on Informatics Education and Research for Knowledge-Circulating Society ,
2008.
[4] R. W. Irving, D. F. Manlove, Approximation algorithms for hard variants of the stable
marriage and hospitals/residents problems, Journal of Combinatorial
Optimization (2007)
[5] Zoltn Kirly, Better and simpler approximation algorithms for the stable marriage
problem, Egervry Research Group on Combinatorial Optimization, April 4, 2008.
[6] Robert W. Irving, David F. Manlove and Sandy Scott, The Hospitals/Residents Problem
with Ties.
[7] Ruth Martnez, Jordi Mass, Alejandro Neme and Jorge Oviedo, An algorithm to compute
the full set of many-to-many stable matchings, Journal of Economic Literature Classifica-
tion Number: C78, July, 2003.
[8] Robert W. Irving, David F. Manlove and Sandy Scott, Strong Stability in the Hospi-
tals/Residents Problem.
[9] David F. Manlove, Robert W. Irving, Kazuo Iwamay, Shuichi Miyazaki, and Yasufumi
Morita, Hard Variants of Stable Marriage.
48
[10] Dan Gusfiel, Three fast algorithms for four problems in Stable Marriage, Society for
Industrial and Applied Mathematics, Siam J. Comput., Vol. 16, No.1 , February, 1987.
[11] Robert W. Irving, Stable marriage and indifference, Discrete Applied Mathematics 48
(1994) 261-272, 5 February, 1990.
[12] Organising Committee of the Third International Competition of CSP Solvers, XML
Representation of Constraint Networks Format XCSP 2.1, 15 January, 2008.
[14] https://spring.io
[15] https://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm
[16] https://www.heroku.com/platform
[17] https://www.ams.org/samplings/feature-column/fc-2015-03
https://docs.oracle.com/javase/8/docs
https://www.draw.io
https://www.genmymodel.com
https://www.gliffy.com
49
Anexa A
Anexa B
<group>
<couple> r1, r3 </couple>
</group>
</problem>
51
Anexa C
Anexa D