Probleme algoritmice ˆ ın studiul [612513]

Facultatea de Informatic˘ a
Universitatea ”Al. I. Cuza” Ia¸ si
Probleme algoritmice ˆ ın studiul
propriet˘ at ¸ilor ereditare pe
grafuri
Tez˘ a de doctorat
Doctorand: [anonimizat]˘ asinaru
Coordonator : Prof. Dr. Elefterie Olaru
Noiembrie, 2006

Mult ¸umiri
Mult ¸umesc conduc˘ atorului meu de doctorat, domnul profesor doctor Elef-
terie Olaru, pentru sprijinul, ˆ ındrum˘ arile ¸ si bun˘ avoint ¸a acordate pe ˆ ıntreaga
perioad˘ a ˆ ın care mi-a supervizat activitatea.
De asemenea, mult ¸umesc domnului profesor doctor Cornelius Croitoru
pentru ¸ sansa pe care mi-a oferit-o de a lucra al˘ aturi de dumnealui ¸ si pentru
toate sfaturile acordate de-a lungul anilor, sfaturi care m-au ajutat s˘ a m˘ a
dezvolt atˆ at din punct de vedere profesional, dar ¸ si ca om.
Mult ¸umesc mult sot ¸iei mele ¸ si ˆ ıntregii familii pentru faptul c˘ a m-au
ˆ ıncurajat ¸ si m-au ajutat s˘ a duc la bun sfˆ ar¸ sit aceast˘ a lucrare.
Declarat ¸ie
Declar c˘ a aceast˘ a tez˘ a este scris˘ a de mine ¸ si toate rezultatele prezen-
tate sunt obt ¸inute de mine, cu except ¸ia celor care sunt marcate cu referint ¸e
bibliografice sau sunt declarate explicit ca fiind preluate de la alt ¸i autori.
Cristian Fr˘ asinaru, noiembrie 2006

Cuprins
1 Introducere 5
1.1 Cont ¸inutul tezei . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2 Satisfacerea constrˆ angerilor 11
2.1 Introducere . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.2 Definit ¸ii de baz˘ a . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.2.1 Tuple, relat ¸ii . . . . . . . . . . . . . . . . . . . . . . . 14
2.2.2 Reprezentarea relat ¸iilor . . . . . . . . . . . . . . . . . . 14
2.2.3 Operat ¸ii cu relat ¸ii . . . . . . . . . . . . . . . . . . . . . 15
2.3 Ret ¸ele de constrˆ angeri . . . . . . . . . . . . . . . . . . . . . . 18
2.3.1 Solut ¸iile unei ret ¸ele de constrˆ angeri . . . . . . . . . . . 19
2.3.2 Echivalent ¸a ret ¸elelor . . . . . . . . . . . . . . . . . . . 19
2.3.3 Reprezentarea ret ¸elelor . . . . . . . . . . . . . . . . . . 20
2.3.4 Rezolvarea ret ¸elelor de constrˆ angeri . . . . . . . . . . . 22
2.3.5 Analiza complexit˘ at ¸ii . . . . . . . . . . . . . . . . . . . 24
2.4 Satisfacerea part ¸ial˘ a a constrˆ angerilor . . . . . . . . . . . . . . 27
2.4.1 Instant ¸e specifice . . . . . . . . . . . . . . . . . . . . . 30
2.4.2 Operat ¸ii cu funct ¸ia de cost . . . . . . . . . . . . . . . . 30
2.4.3 C˘ autarea solut ¸iilor . . . . . . . . . . . . . . . . . . . . 31
2.4.4 Algoritmul ”branch-and-bound”(b-b) . . . . . . . . . . 32
2.4.5 Funct ¸ii de m˘ arginire inferioar˘ a . . . . . . . . . . . . . . 34
2.4.6 Funct ¸ii de m˘ arginire superioar˘ a . . . . . . . . . . . . . 37
2.4.7 Tehnici locale de c˘ autare . . . . . . . . . . . . . . . . . 37
3 Rezolvarea ret ¸elelor de constrˆ angeri 39
3.1 Algoritmi sistematici de c˘ autare . . . . . . . . . . . . . . . . . 39
3.2 Backtracking . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
3.2.1 Structura general˘ a a algoritmului . . . . . . . . . . . . 40
1

2 CUPRINS
3.2.2 Testarea consistent ¸ei unei instant ¸ieri part ¸iale . . . . . . 40
3.3 Backjumping . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
3.4 Backmarking . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
3.5 Algoritmi de filtrare ¸ si propagare . . . . . . . . . . . . . . . . 45
3.6 Arc-consistent ¸a . . . . . . . . . . . . . . . . . . . . . . . . . . 48
3.6.1 Algoritmul de proiect ¸ie . . . . . . . . . . . . . . . . . . 50
3.6.2 Construct ¸ia unei subret ¸ele cu dou˘ a variabile . . . . . . 50
3.6.3 Testarea arc-consistent ¸ei . . . . . . . . . . . . . . . . . 51
3.6.4 Procedura de reducere a domeniilor Revise . . . . . . . 52
3.6.5 Algoritmul de arc-consistent ¸˘ a AC-1 . . . . . . . . . . . 53
3.6.6 Algoritmul de arc-consistent ¸˘ a AC-3 . . . . . . . . . . . 54
3.6.7 Algoritmul de arc-consistent ¸˘ a AC-4 . . . . . . . . . . . 55
3.7 Constrˆ angeri globale . . . . . . . . . . . . . . . . . . . . . . . 56
3.7.1 Exemple de constrˆ angeri globale . . . . . . . . . . . . . 57
3.7.2 AllDiff . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
3.7.3 Global Cardinality Constraint (GCC) . . . . . . . . . . 61
4 Crearea unui solver CSP 65
4.1 Introducere . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
4.2 Nivelul de modelare . . . . . . . . . . . . . . . . . . . . . . . . 68
4.2.1 Reprezentarea problemei . . . . . . . . . . . . . . . . . 68
4.2.2 Definirea variabilelor . . . . . . . . . . . . . . . . . . . 70
4.2.3 Crearea domeniilor . . . . . . . . . . . . . . . . . . . . 72
4.2.4 Specificarea constrˆ angerilor . . . . . . . . . . . . . . . 73
4.2.5 Reprezentarea tuplelor . . . . . . . . . . . . . . . . . . 75
4.3 Nivelul de control . . . . . . . . . . . . . . . . . . . . . . . . . 75
4.3.1 Conceptul general de solver . . . . . . . . . . . . . . . 76
4.3.2 Rezolvarea sistematic˘ a (complet˘ a) . . . . . . . . . . . . 78
4.3.3 Exemplu de implementare . . . . . . . . . . . . . . . . 81
4.3.4 Definirea strategiilor de explorare . . . . . . . . . . . . 85
4.4 Monitorizarea procesului de rezolvare . . . . . . . . . . . . . . 88
4.5 Crearea constrˆ angerilor . . . . . . . . . . . . . . . . . . . . . . 92
4.5.1 Constrˆ angeri explicite . . . . . . . . . . . . . . . . . . 92
4.5.2 Constrˆ angeri binare . . . . . . . . . . . . . . . . . . . . 94
4.5.3 Constrˆ angeri oarecare . . . . . . . . . . . . . . . . . . 94
4.5.4 Constrˆ angeri globale . . . . . . . . . . . . . . . . . . . 97
4.6 Ret ¸ele slabe de constrˆ angeri . . . . . . . . . . . . . . . . . . . 99
4.6.1 Structuri de evaluare . . . . . . . . . . . . . . . . . . . 99

CUPRINS 3
4.6.2 Modelarea unei probleme de optimizare . . . . . . . . . 101
4.6.3 Optimizare multi-criterial˘ a . . . . . . . . . . . . . . . . 102
5 Explicat ¸ii 105
5.1 Introducere . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
5.2 Ce ˆ ınseamn˘ a o explicat ¸ie ? . . . . . . . . . . . . . . . . . . . . 106
5.2.1 Cum poate fi explicat˘ a inconsistent ¸a ? . . . . . . . . . 107
5.2.2 Mult ¸imi suport . . . . . . . . . . . . . . . . . . . . . . 109
5.3 Construirea unei explicat ¸ii . . . . . . . . . . . . . . . . . . . . 111
5.3.1 Graful elimin˘ arilor . . . . . . . . . . . . . . . . . . . . 111
5.3.2 Arborele reducerilor . . . . . . . . . . . . . . . . . . . 114
5.4 Implementarea algoritmului . . . . . . . . . . . . . . . . . . . 119
6 Problema satisfiabilit˘ at ¸ii 121
6.1 Introducere . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
6.2 Un nod model CSP pentru SAT . . . . . . . . . . . . . . . . . 122
6.3 Graful asociat modelului CSP . . . . . . . . . . . . . . . . . . 125
6.4 Arc consistent ¸a . . . . . . . . . . . . . . . . . . . . . . . . . . 127
6.5 Propriet˘ at ¸i ale grafului . . . . . . . . . . . . . . . . . . . . . . 128
6.6 Implementare ¸ si experimente . . . . . . . . . . . . . . . . . . . 131
6.7 Concluzii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
7 Problema orarului 135
7.1 Introducere . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
7.1.1 Activit˘ at ¸i (Evenimente) . . . . . . . . . . . . . . . . . 136
7.1.2 Domeniul temporal . . . . . . . . . . . . . . . . . . . . 138
7.1.3 Participant ¸i (Actori) . . . . . . . . . . . . . . . . . . . 138
7.1.4 Resurse . . . . . . . . . . . . . . . . . . . . . . . . . . 140
7.2 Ret ¸eaua de constrˆ angeri . . . . . . . . . . . . . . . . . . . . . 140
7.2.1 Variabile ¸ si domenii . . . . . . . . . . . . . . . . . . . . 141
7.2.2 Constrˆ angeri . . . . . . . . . . . . . . . . . . . . . . . 142
7.2.3 Complexitatea problemei . . . . . . . . . . . . . . . . . 149
7.3 Rezolvarea problemei orarului . . . . . . . . . . . . . . . . . . 150
8 Rezolvarea interactiv˘ a a problemelor 153
8.1 Starea unui solver . . . . . . . . . . . . . . . . . . . . . . . . . 154
8.2 Oprirea ¸ si reluarea execut ¸iei . . . . . . . . . . . . . . . . . . . 155
8.3 Salvarea ¸ si restaurarea st˘ arii extinse . . . . . . . . . . . . . . . 158

4 CUPRINS
8.4 Extinderea st˘ arii curente . . . . . . . . . . . . . . . . . . . . . 158
8.5 Anularea unor decizii . . . . . . . . . . . . . . . . . . . . . . . 158
8.6 Inactivarea unor variabile . . . . . . . . . . . . . . . . . . . . 159
8.7 Ad˘ augarea de noi variabile . . . . . . . . . . . . . . . . . . . . 161
8.8 Modificarea constrˆ angerilor . . . . . . . . . . . . . . . . . . . . 161
8.9 Concluzii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
9 Probleme de colorare 163
9.1 Introducere . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
9.2 Colorarea grafurilor . . . . . . . . . . . . . . . . . . . . . . . . 164
9.3 Rezolvarea unor probleme de colorare . . . . . . . . . . . . . . 167
9.3.1 Colorarea vˆ arfurilor unui graf . . . . . . . . . . . . . . 167
9.3.2 Star-coloring . . . . . . . . . . . . . . . . . . . . . . . . 167
9.3.3 Acyclic-coloring . . . . . . . . . . . . . . . . . . . . . . 168
9.3.4 Harmonious-coloring . . . . . . . . . . . . . . . . . . . 169
9.4 Euristici de colorare . . . . . . . . . . . . . . . . . . . . . . . . 170
9.5 Analizoare de problem˘ a . . . . . . . . . . . . . . . . . . . . . . 171
10 Concluzii 175

Capitolul 1
Introducere
Ideea de la care a pornit realizarea acestei teze poate fi redus˘ a la urm˘ atoarea
ˆ ıntrebare: ”Dat˘ a o problem˘ a, cum putem s˘ a o rezolv˘ am ?”. Dezvoltarea
industriei ¸ si economiei, gradul de tehnologizare a societ˘ at ¸ii curente fac ca ˆ ın
cadrul foarte multor procese de calcul sau sisteme integrate de analiz˘ a s˘ a
intervin˘ a situat ¸ii complexe a c˘ aror rezolvare nu este deloc evident˘ a. Domeni-
ile de activitate din care aceste probleme provin sunt extrem de diverse ¸ si
de multe ori aceea¸ si problem˘ a se poate ascunde sub o multitudine de forme,
diferent ¸ele sintactice fiind date de modurile specifice de formulare ale fiec˘ arui
tip de activitate ˆ ın parte.
A¸ sadar, dat˘ a o problem˘ a, cum putem s˘ a o rezolv˘ am ? Primul pas este,
evident, s˘ a o reformul˘ am ˆ ıntr-un mod abstract astfel ˆ ıncˆ at particularit˘ at ¸ile
domeniului din care provine s˘ a devin˘ a transparente, ˆ ıncercˆ and astfel inte-
grarea ei ˆ ıntr-o clas˘ a de probleme cunoscute. Dac˘ a acest lucru este posibil,
putem apela la ”baza de date” a algoritmilor existent ¸i pentru clasa respec-
tiv˘ a de probleme ¸ si s˘ a folosim unul din ei. In cazul ˆ ın care acest lucru nu este
realizabil, singura solut ¸ie ar fi dezvoltarea unui algoritm dedicat problemei
respective, abordare care ˆ ıns˘ a poate fi anevoioas˘ a ¸ si implic˘ a atˆ at efort teo-
retic pentru g˘ asirea unei solut ¸ii eficiente cˆ at ¸ si efort pentru implementarea
ei. Din punct de vedere practic, acest proces poate fi extrem de costisitor.
Un alt aspect care trebuie luat ˆ ın calcul este urm˘ atorul: chiar ˆ ın condit ¸ia ˆ ın
care am redus problema init ¸ial˘ a la una deja cunoscut˘ a, exist˘ a un algoritm
eficient pentru ea ?
Conform teoriei complexit˘ at ¸ii, problemele de decizie care pot fi rezolvate
de o ma¸ sin˘ a secvent ¸ial˘ a determinist˘ a ˆ ın timp polinomial relativ la dimen-
siunea intr˘ arii formeaz˘ a clasa de complexitate P. Acestea sunt considerate
5

6 CAPITOLUL 1. INTRODUCERE
”u¸ soare”, ˆ ın sensul c˘ a timpul de lucru cre¸ ste proport ¸ional cu dimensiunea
datelor de intrare.
Clasa NPeste reprezentat˘ a de probleme de decizie ale c˘ aror solut ¸ii pot
fi verificate ˆ ın timp polinomial sau care pot fi g˘ asite ˆ ın timp polinomial de o
ma¸ sin˘ a nedeterminist˘ a. A¸ sadar P⊆NPdar, dup˘ a cum se ¸ stie, incluziunea
strict˘ a nu a fost demonstrat˘ a ˆ ınc˘ a. O clas˘ a aparte este cea a problemelor
NP-complete , sau a a¸ sa numitelor probleme ”dificile” din NP, ce are pro-
prietatea c˘ a dac˘ a una din ele ar putea fi rezolvat˘ a de un algoritm polinomial,
atunci acel algoritm ar putea fi folosit pentru rezolvarea tuturor din aceast˘ a
clas˘ a.
In 1979, Michael Garey ¸ si David Johnson ˆ ın lucrarea ”Computers and
Intractability: A Guide to the Theory of NP-Completeness” [40] au realizat
un compendiu al problemelor NP-complete astfel ˆ ıncˆ at acestea s˘ a poat˘ a fi
folosite ca reper ˆ ın ˆ ıncercarea de a determina gradul de dificultate al unei
probleme oarecare.
In condit ¸iile ˆ ın care am ajuns la concluzia c˘ a problema noastr˘ a este NP-
dificil˘ a este de a¸ steptat s˘ a nu dispunem de nici un algoritm eficient pentru
rezolvarea ei. Este momentul ˆ ın care trebuie s˘ a decidem ˆ ın ce fel dorim
solut ¸ionarea ei: este necesar s˘ a obt ¸inem toate solut ¸iile exacte, doar a uneia
singure sau este suficient˘ a o solut ¸ie aproximativ˘ a ? Sigur c˘ a r˘ aspunsul la
aceste ˆ ıntreb˘ ari depinde foarte mult ¸ si de natura problemei. Astfel, prob-
lema satisifiabilit˘ at ¸ii nu las˘ a loc la aproxim˘ ari ˆ ın timp ce colorarea unui graf
poate fi privit˘ a ca o problem˘ a de optimizare ˆ ın care nu vrem decˆ at o colorare
”suficient de bun˘ a”, nu neap˘ arat ideal˘ a. In cazul din urm˘ a, putem apela la
diferite tehnici de programare bazate pe euristici care, de¸ si nu garanteaz˘ a
reu¸ sita, sunt folosite cu succes ˆ ın multe situat ¸ii. Vom presupune ˆ ın contin-
uare c˘ a nu suntem interesat ¸i ˆ ın principal de eurisitici, ci c˘ aut˘ am o rezolvare
care s˘ a permit˘ a, chiar ˆ ın cazul problemelor dificile, obt ¸inerea unei sau a tu-
turor solut ¸iilor exacte ˆ ın condit ¸ia ˆ ın care dimensiunile datelor de intrare sunt
rezonabile.
Avˆ and ˆ ın vedere toate aceste lucruri, dorim s˘ a identific˘ am un mecanism
de rezolvare care s˘ a poat˘ a fi aplicat ˆ ın mod unitar la cˆ at mai multe tipuri de
probleme, s˘ a poat˘ a aborda situat ¸ii NP-dificile cˆ at mai performant posibil ¸ si
s˘ a pun˘ a ˆ ın valoare existent ¸a unor restrict ¸ii polinomiale ale problemei date.
O teorie care ofer˘ a solut ¸ii pentru cerint ¸ele de mai sus este cea a satis-
facerii constrˆ angerilor, ˆ ın care problemele sunt modelate ca instant ¸e CSP
(Constraint Satisfaction Problems) iar apoi sunt utilizate diferite tehnici de
programare cu constrˆ angeri pentru rezolvarea lor.

1.1. CONT ¸INUTUL TEZEI 7
De¸ si lucr˘ ari dedicate constrˆ angerilor au ap˘ arut ˆ ınc˘ a din anii ’70 [41], [36],
[16], domeniul CSP a devenit activ ¸ stiint ¸ific ˆ ıncepˆ and cu 1980, ast˘ azi fiind
identificat de ACM (Association for Computing Machinery) ca o ”direct ¸ie
strategic˘ a de dezvoltare a informaticii”. Eugene C. Freuder spunea ˆ ın 1997:
”Constraint programming represents one of the closest approaches
computer science has yet made to the Holy Grail of programming:
the user states the problem, the computer solves it.”
Programarea cu constrˆ angeri a intrat deplin ¸ si ˆ ın aria aplicativ˘ a prin aparit ¸ia
unor sisteme comerciale foarte performante de rezolvare automat˘ a a prob-
lemelor modelate cu constrˆ angeri, cum ar fi Ilog Solver [27], dar ¸ si a unei
multitudini de alte aplicat ¸ii de acest tip create pe diverse platforme de pro-
gramare Java, C++, Prolog, etc. [30], [31], [18]. Un aport esent ¸ial la dez-
voltarea ¸ si la impunerea paradigmei de programare cu constrˆ angeri l-a avut
¸ si saltul remarcabil al performant ¸elor dispozitivelor hardware de calcul din
ultimii ani. Incepˆ and cu anii ’90 au ap˘ arut ¸ si o serie de monografii [13], [1],
[50], [2], [45] care ofer˘ a o imagine de ansamblu asupra ˆ ıntregii teorii.
1.1 Cont ¸inutul tezei
Capitolul 2 ˆ ı¸ si propune s˘ a ofere o imagine general˘ a asupra teoriei satis-
facerii constrˆ angerilor, introducˆ and definit ¸iile ¸ si rezultatele necesare pentru
prezent˘ arile ulterioare. Pentru a respecta terminologia actual˘ a, ca surs˘ a prin-
cipal˘ a bibliografic˘ a a fost utilizat˘ a recenta monografie ”Constraint Process-
ing”, scris˘ a de Rina Dechter [13].
Capitolul 3 abordeaz˘ a o serie de tehnici care pot fi utilizate pentru re-
zolvarea ret ¸elelor de constrˆ angeri, accentul fiind pus pe algoritmii sistematici
de explorare ai spat ¸iului solut ¸iilor.
Capitolul 4 constituie o descriere ampl˘ a a tuturor aspectelor care trebuie
analizate ˆ ın implementarea unui sistem software capabil s˘ a rezolve probleme
modelate cu ajutorul constrˆ angerilor, fiind de fapt o prezentare detaliat˘ a a
solverului OmniCS1care a fost creat de noi pentru a sust ¸ine din punct de
vedere practic ideile din aceast˘ a lucrare. In acest capitol sunt oferite exemple
concrete care s˘ a ajute laˆ ınt ¸elegerea modului de utilizare a aplicat ¸iei precum ¸ si
specificat ¸iile necesare pentru a controla procesul general de g˘ asire a solut ¸iilor,
1http://omnics.sourceforge.net

8 CAPITOLUL 1. INTRODUCERE
cum ar fi strategiile de explorare a spat ¸iului solut ¸iilor sau asocierea unor al-
goritmi dedicat ¸i de filtrare constrˆ angerilor. De asemenea, o component˘ a im-
portant˘ a a sistemului de rezolvare const˘ a ˆ ın posibilitatea de integrare a unor
algoritmi eficient ¸i dezvoltat ¸i pentru diverse restrict ¸ii ale problemei init ¸iale ˆ ın
cadrul algoritmului general, ˆ ın scopul cre¸ sterii performant ¸elor.
Implementarea solverului OmniCS reprezint˘ a contribut ¸ia principal˘ a a
tezei, acesta aducˆ and numeroase lucruri noi fat ¸˘ a de alte produse similare
existente la ora actual˘ a, cum ar fi: rezolvarea atˆ at a ret ¸elelor clasice de con-
strˆ angeri cˆ at ¸ si a celor slabe, implementarea unui mecanism de observare
a procesului de c˘ autare a solut ¸iei, posibilitatea de a genera explicat ¸ii ¸ si de
a aborda probleme dinamice, interactivitate, etc. Pe lˆ ang˘ a acestea, trebuie
ment ¸ionat faptul c˘ a a fost gˆ andit astfel ˆ ıncˆ at ˆ ınt ¸elegerea, utilizarea ¸ si extin-
derea acestuia s˘ a fie extrem de simple, putˆ and fi astfel folosit cu u¸ surint ¸˘ a ˆ ın
activit˘ at ¸i didactice sau de cercetare.
Capitolul 5 este o extensie a capitolului 4, ˆ ın care se ˆ ıncearc˘ a g˘ asirea unei
modalit˘ at ¸i de a r˘ aspunde la ˆ ıntrebarea: ”De ce o problem˘ a nu are solut ¸ie
?”. Pe baza metodei alese pentru implementarea solverului a fost creat un
mecanism capabil s˘ a extrag˘ a pe parcursul procesului de rezolvare informat ¸iile
necesare pentru a genera, ˆ ın cazul ˆ ın care problema nu are solut ¸ie, o suc-
cesiune de rat ¸ionamente care s˘ a explice ˆ ıntr-un mod cˆ at mai apropiat de
ˆ ınt ¸elegerea uman˘ a motivul e¸ secului. Explicat ¸iile, a¸ sa cum au fost introduse
ˆ ın cadrul solverului Choco [31] cu extensia PaLM (Propagation and Learn-
ing with Move) [6], se refer˘ a la informat ¸ii care s˘ a explice starea curent˘ a a
sistemului. Ceea ce ne propunem noi este s˘ a cre˘ am o modalitate simpl˘ a de
generare a unei structuri de date din care s˘ a putem extrage un rat ¸ionament
complet ¸ si clar care s˘ a demonstreze inconsistent ¸a unei probleme.
Capitolul 6 este un prim studiu de caz ˆ ın care este analizat˘ a problema sat-
isfiabilit˘ at ¸ii ˆ ın varianta restrˆ ans˘ a 3-SAT. Sunt prezentate dou˘ a solut ¸ii diferite
de reprezentare a problemei cu ajutorul constrˆ angerilor, una fiind cea clasic˘ a
folosit˘ a ˆ ın mod curent de c˘ atre solverele SAT existente, iar cea de a doua
constituind o abordare original˘ a de modelare care s˘ a ne ofere transformarea
problemei 3-SAT ˆ ıntr-una echivalent˘ a de grafuri. Studiind structura grafu-
lui obt ¸inut, pot fi identificate cazuri particulare care s˘ a fie utilizate pentru
eficientizarea procesului de rezolvare.
Capitolul 7 analizeaz˘ a problema orarului care, dup˘ a cum se ¸ stie, este de
asemenea o problem˘ a NP-dificil˘ a. Pe lˆ ang˘ a dezvoltarea unui model foarte
flexibil care s˘ a permit˘ a abordarea unor probleme de planificare cˆ at mai di-
verse a fost creat˘ a ¸ si o libr˘ arie de constrˆ angeri cu ajutorul c˘ areia s˘ a poat˘ a

1.1. CONT ¸INUTUL TEZEI 9
fi formalizate restrict ¸iile generale precum ¸ si preferint ¸ele participant ¸ilor, ˆ ın
vederea rezolv˘ arii automate a problemei.
Capitolul 8 reia problema orarului ¸ si pune ˆ ın evident ¸˘ a aspecte legate
de necesitatea ca un solver CSP s˘ a fie interactiv, ˆ ın sensul de a permite
utilizatorului s˘ a direct ¸ioneze procesul de c˘ autare a solut ¸iei prin extinderea
manual˘ a a solut ¸iei curente sau revocarea unor decizii luate de solver precum
¸ si de a oferi posibilitatea de a modifica dinamic problema rezolvat˘ a prin
ad˘ augarea/eliminarea de variabile sau constrˆ angeri.
Capitolul 9 descrie o serie de tehnici de modelare a problemelor de colorare
a grafurilor, scopul final fiind integrarea unor alogritmi polinomiali dezvoltat ¸i
pentru diverse clase de grafuri ˆ ın algoritmul general de rezolvare. In acest
context, este introdus˘ a not ¸iunea de analizor de problem˘ a ¸ si sunt prezentate
modalit˘ at ¸i de utilizare ale acestora.
Capitolul 10 prezint˘ a concluziile tezei precum ¸ si principalele direct ¸ii de
cercetare ulterioar˘ a.

10 CAPITOLUL 1. INTRODUCERE

Capitolul 2
Satisfacerea constrˆ angerilor
2.1 Introducere
Problemele de satisfacere a constrˆ angerilor sunt utilizate ˆ ın orice situat ¸ie ˆ ın
care este necesar s˘ a identific˘ am o stare a unui sistem format dintr-o mult ¸ime
de obiecte care s˘ a satisfac˘ a o serie de restrict ¸ii, numite constrˆ angeri. Obiectele
problemei init ¸iale sunt modelate cu ajutorul unor variabile care au asociate
anumite domenii de valori iar o solut ¸ie reprezint˘ a o atribuire de valori acestor
variabile astfel ˆ ıncˆ at s˘ a fie respectate toate constrˆ angerile. Avˆ and ˆ ın vedere
generalitatea acestei definit ¸ii ¸ si diversitatea problemelor ce pot fi ˆ ıncadrate
ˆ ın aceast˘ a categorie este necesar s˘ a clarific˘ am, deocamdat˘ a informal, o serie
de aspecte cum ar fi:
•Cum pot fi formulate ˆ ın mod unitar problemele ?
–Ce este o variabil˘ a ?
–Ce este o constrˆ angere ¸ si cum putem s˘ a o specific˘ am ?
•Ce tehnici de rezolvare putem utiliza ?
Dup˘ a cum am spus deja, o variabil˘ a formalizeaz˘ a o necunoscut˘ a a proble-
mei, fiind o reprezentare simbolic˘ a a unui obiect c˘ aruia trebuie s˘ a-i atribuim
o anumit˘ a valoare. Nu se impune nici o restrict ¸ie asupra tipului unei vari-
abile, elementele acestuia putˆ and fi ˆ ıntregi, logice, mult ¸imi sau orice altceva.
De asemenea, nu este necesar ca toate variabilele s˘ a aib˘ a acela¸ si tip. Fiec˘ arei
variabile ˆ ıi este asociat un domeniu reprezentˆ and mult ¸imea valorilor posibile
pe care le poate primi acea variabil˘ a.
11

12 CAPITOLUL 2. SATISFACEREA CONSTR ˆANGERILOR
Oconstrˆ angere poate fi privit˘ a intuitiv ca o restrict ¸ionare a spat ¸iului
posibilelor solut ¸ii ale unei probleme. Ca ¸ si ˆ ın cazul variabilelor, nu se im-
pune nici o modalitate de specificare a constrˆ angerilor, orice informat ¸ie ce
poate fi extras˘ a dintr-un set de specificat ¸ii corespunz˘ atoare unei probleme
putˆ and fi privit˘ a ca o restrˆ angere a domeniului solut ¸iilor acesteia, deci ca o
constrˆ angere.
Modul de definire a constrˆ angerilor trebuie s˘ a satisfac˘ a urm˘ atoarele pro-
priet˘ at ¸i [3]:
•Constrˆ angerile pot specifica informat ¸ii part ¸iale ; cu alte cuvinte con-
strˆ angerile pot s˘ a nu identifice ˆ ın mod unic valorile permise pentru
anumite variabile.
•Constrˆ angerile sunt ne-direct ¸ionale , o constrˆ angere definit˘ a pe vari-
abilele x¸ siyavˆ and aceea¸ si semantic˘ a atˆ at din perspectiva variabilei x
cˆ at ¸ si a lui y:x=y+ 1 ¸ si y=x−1 sunt echivalente.
•Constrˆ angerile sunt declarative ; ele definesc o restrict ¸ie ce trebuie sat-
isf˘ acut˘ a f˘ ar˘ a a specifica un mod computat ¸ional de impunere a acestei
restrict ¸ii.
•Constrˆ angerile sunt aditive ; ordinea ˆ ın care acestea sunt impuse nu
conteaz˘ a din punctul de vedere al rezultatului final.
•Constrˆ angerile pot avea variabile comune ceea ce ˆ ınseamn˘ a c˘ a satisfac-
erea lor trebuie privit˘ a ˆ ın ansamblu ¸ si nu individual, pentru fiecare ˆ ın
parte.
A¸ sadar, modelarea unei probleme presupune identificarea urm˘ atoarelor
componente:
•un set finit de variabile,
•o funct ¸ie care mapeaz˘ a fiecare variabil˘ a la un domeniu finit,
•un set finit de constrˆ angeri.
In sect ¸iunea urm˘ atoare vom prezenta not ¸iunea de ret ¸ea de constrˆ angeri care
formalizeaz˘ a modalitatea de reprezentare a unei instant ¸e CSP.
G˘ asirea unei solut ¸ii pentru respectiva problem˘ a const˘ aˆ ın atribuirea fiec˘ arei
variabile a unei valori din domeniul s˘ au astfel ˆ ıncˆ at nici o constrˆ angere s˘ a
nu fie ˆ ınc˘ alcat˘ a. In funct ¸ie de natura problemei, rezolvarea poate consta ˆ ın
identificarea :

2.1. INTRODUCERE 13
•unei singure solut ¸ii, indiferent care este aceasta;
•tuturor solut ¸iilor;
•unei solut ¸ii optime, sau care se apropie cˆ at mai mult de un optim ¸ stiut,
ˆ ın cazul ˆ ın care este specificat˘ a o funct ¸ie obiectiv definit˘ a pe variabilele
problemei.
Mai jos sunt doar cˆ ateva exemple de probleme care demonstreaz˘ a aria
larg˘ a de aplicabilitate a acestui tip de reprezentare:
•Problema celor 8 regine
•Probleme cripto-aritmetice (SEND+MORE=MONEY)
•P˘ atratul magic, P˘ atratul latin, Sudoku, etc.
•Colorarea grafurilor
•Problema satisfiabilit˘ at ¸ii (SAT) [11]
•Probleme de rutare ¸ si explorare [10]
•Crearea interfet ¸elor grafice [21]
•…
”Problema celor nregine”
Inainte de a formaliza not ¸iunile prezentate pˆ an˘ a acum, s˘ a consider˘ am un
exemplu concret de problem˘ a pe care s˘ a o model˘ am din perspectiva CSP.
Un exemplu clasic frecvent utilizat pentru a demonstra modalitatea de
utilizare a constrˆ angerilor este ”Problema celor nregine”. Problema cere sa
fie plasate nregine pe o tabl˘ a de ¸ sah de dimensiuni n×nastfel ˆ ıncˆ at nici
o pereche de regine s˘ a nu se g˘ aseasc˘ a ˆ ıntr-o situat ¸ie de atac. O posibil˘ a for-
mulare ca o problem˘ a cu constrˆ angeri poate fi urm˘ atoarea. Consider˘ am cˆ ate
o variabil˘ a pentru fiecare coloan˘ a a tablei de ¸ sah: x1, x2, …, x n. Domeniile
variabilelor vor coincide cu mult ¸imea liniilor tablei de ¸ sah: {1, …, n}. Pe
fiecare coloan˘ a trebuie plasat˘ a cˆ ate o regin˘ a, a¸ sadar constrˆ angerile vor im-
pune ca nici o pereche de regine s˘ a nu se g˘ aseasc˘ a pe acee¸ si linie sau diagonal˘ a:
∀i, j:xi/negationslash=xj∧|xi−xj|/negationslash=|i−j|.

14 CAPITOLUL 2. SATISFACEREA CONSTR ˆANGERILOR
2.2 Definit ¸ii de baz˘ a
2.2.1 Tuple, relat ¸ii
Unk-tuplu reprezint˘ a o secvent ¸˘ a de kelemente, notat˘ a prin ( a1, …, a k), nu
neap˘ arat distincte, fiecare element din tuplu fiind denumit ¸ si component˘ a .
Atunci cˆ and num˘ arul kde elemente este subˆ ınt ¸eles, vom folosi doar termenul
detuplu .
Produsul cartezian al unor mult ¸imi D1, …, D k, notat D1×…×Dkeste
mult ¸imea tuturor k-tuplelor ( a1, …, a k) cu proprietatea c˘ a ∀i:ai∈Di.
Pentru a exemplifica, fie D1={a, b}¸ siD2={0,1,2}.
D1×D2={{a,0},{a,1},{a,2},{b,0},{b,1},{b,2}}
Fiind dat˘ a o mult ¸ime de variabile X={x1, …, x k}, fiecare variabil˘ a
xiavˆ and asociat un domeniu Di, definim o relat ¸ie de aritate kca fiind o
submult ¸ime a produsului cartezian D1×…×Dk. Mult ¸imea variabilelor
pe care este definit˘ a o relat ¸ie Ro vom mai nota var(R). Dac˘ a not˘ am
S=var(R), relat ¸ia Rmai poate fi scris˘ a ¸ si ca RS, pentru a pune ˆ ın evident ¸˘ a
variabilele acesteia. Pentru k= 1,2,3 relat ¸iile se mai numesc unare ,binare ,
respectiv ternare . Dac˘ a R=D1×…×Dk, atunci relat ¸ia este universal˘ a .
FieD1={a, b}¸ siD2={0,1,2}.R={{a,0},{a,1},{b,2}}este un
exemplu de relat ¸ie, fiind o submult ¸ime a produsului D1×D2.
2.2.2 Reprezentarea relat ¸iilor
Relat ¸iile sunt mult ¸imi de tuple definite peste acea¸ si mult ¸ime de variabile,
ele putˆ and fi reprezentate fie explicit , situat ¸ie ˆ ın care sunt enumerate efectiv
tuplele relat ¸iei, fie implicit , prin expresii aritmetice sau alte funct ¸ii. Relat ¸ia
R={{0,1},{0,2},{1,2}}definit˘ a sub forma ei explicit˘ a pe domeniile D1=
D2={0,1,2}poate fi scris˘ a implicit ¸ si astfel: R={(x1, x2)|x1∈D1, x2∈
D2, x1< x 2}.
S˘ a not˘ am c˘ a tuplele unei relat ¸ii pot fi enumerate ¸ si sub forma unui tabel,
ˆ ın care coloanele reprezint˘ a variabilele relat ¸iei iar fiecare linie este un tuplu.
x1x2
01
02
12

2.2. DEFINIT ¸II DE BAZ ˘A 15
Reprezentarea explicit˘ a a unei relat ¸ii de aritate kpoate fi f˘ acut˘ a, mai com-
pact, folosind tablouri k-dimensionale cu elementele 0 ¸ si 1. Astfel, o relat ¸ie
binar˘ a Rcu variabile{x1, x2}, avˆ and valori ˆ ın domeniile D1={a1, …, a n}
¸ siD2={b1, …, b m}poate fi definit˘ a folosind o (0 ,1)-matrice de dimensiuni
n×m, ˆ ın care fiecare linie corespunde unui element din D1¸ si fiecare coloan˘ a
corespunde unui element din D2. Prezent ¸a unui 1 in matrice la pozit ¸ia ( i, j)
semnific˘ a faptul c˘ a ( ai, bj)∈R, ˆ ın timp ce valoarea 0 semnific˘ a ( ai, bj)/negationslash∈R.
FieD1={a, b},D2={x, y, z}. Relat ¸ia R={{a, x},{a, y},{b, z}}poate
fi reprezentat˘ a astfel:
xyz
a110
b001
2.2.3 Operat ¸ii cu relat ¸ii
In primul rˆ and, fiind mult ¸imi de tuple, asupra relat ¸iilor pot fi aplicate operat ¸iile
uzuale de la mult ¸imi: reuniunea ,intersect ¸ia ¸ sidiferent ¸a , acestea avˆ and sens
doar ˆ ın situat ¸ia cˆ and relat ¸iile sunt definite pe aceea¸ si mult ¸ime de variabile.
Astfel, fie R, R/primedou˘ a relat ¸ii ¸ si var(R) =var(R/prime).
•R∪R/prime={t tuplu|t∈R∨t∈R/prime}
•R∩R/prime={t tuplu|t∈R∧t∈R/prime}
•R−R/prime={t tuplu|t∈R∧t/negationslash∈R/prime}
In toate cele trei operat ¸ii, relat ¸ia rezultat˘ a are aceea¸ si mult ¸ime de variabile
ca ¸ si relat ¸iile asupra c˘ arora au fost aplicate.
Structura special˘ a a elementelor unei relat ¸ii (tuple) permite ˆ ıns˘ a definirea
¸ si a unor operat ¸ii specifice acestora, pe lˆ ang˘ a cele comune tuturor mult ¸imilor.
Cele mai reprezentative sunt: select ¸ia ,proiect ¸ia ¸ silegarea (join) . S˘ a le
analiz˘ am pe fiecare ˆ ın parte.
Select ¸ia ( σ)este un operator care creaz˘ a o nou˘ a relat ¸ie, eliminˆ and din
tuplele unei relat ¸ii pe cele care nu satisfac o serie de condit ¸ii ce impun anumite
valori asupra unor anumite variabile. In reprezentarea tabelar˘ a, select ¸ia va

16 CAPITOLUL 2. SATISFACEREA CONSTR ˆANGERILOR
elimina linii, acestea fiind corespunz˘ atoare tuplelor. Astfel, s˘ a consider˘ am
o relat ¸ie R,{x1, …, x n}variabilele acesteia ¸ si {D1, …, D n}domeniile pe care
sunt definite acestea. Fie Y={xi1, …, x ik}o submult ¸ime a lui var(R) ¸ si
t={ai1, …, a ik}un k-tuplu cont ¸inˆ and valori din domeniile corespunz˘ atoare.
Operatorul de select ¸ie va p˘ astra din tuplele relat ¸iei Rdoar pe acelea cu
proprietatea c˘ a∀j:xij=aij¸ si vom nota acest lucru prin σxi1=ai1,…,x ik=aik(R)
sau, mai simplu, σY=t(R).
FieR={{0,1},{0,2},{1,2}},var(R) ={x1, x2},D1=D2={0,1,2}.
σx1=0(R) ={{0,1},{0,2}}
σx1=0,×2=1(R) ={{0,1}}
Proiect ¸ia ( π)este un operator care creeaz˘ a o nou˘ a relat ¸ie, p˘ astrˆ and
doar componentele unui anumit set de variabile din toate tuplele unei relat ¸ii.
In reprezentarea tabelar˘ a, proiect ¸ia va elimina coloane ale tabelului, acestea
fiind corespunz˘ atoare variabilelor. Fie o relat ¸ie R,X={x1, …, x n}variabilele
acesteia ¸ si Y={xi1, …, x ik}o submult ¸ime a lui X. Operatorul de proiect ¸ie
va p˘ astra toate tuplele relat ¸iei Rdar va elimina componentele variabilelor
care nu apart ¸in mult ¸imii Y. Vom nota acest lucru prin πxi1,…,x ik(R) sau, mai
simplu, πY(R). Evident, πX(R) =R.
Pentru relat ¸ia anterioar˘ a R={{0,1},{0,2},{1,2}}:
πx1(R) ={{0},{1}}
πx2(R) ={{1},{2}}
Atunci cˆ and aplic˘ am proiect ¸ia doar asupra unei tuple a={a1, …, a k},
pot fi folosite oricare din notat ¸iile πY(a) sau a[Y].
Legarea ( ⊿ /triangleleft)a dou˘ a relat ¸ii RS¸ siRT, notat˘ a cu RS⊿ /triangleleft R T, va produce o
nou˘ a relat ¸ie format˘ a din combinarea tuplelor din RS¸ siRTcare au acelea¸ si
valori pentru componentele corespunz˘ atoare variabilelor comune (din S∩T).
S˘ a not˘ am C=S∩T={x1, …, x k}¸ si s˘ a presupunem c˘ a rescriem tuplele
celor dou˘ a relat ¸ii astfel ˆ ıncˆ at componentele corespunz˘ atoare variabilelor din
Csunt pe primele kpozit ¸ii. Un tuplu r∈RS⊿ /triangleleft R Tva fi construit astfel:

2.2. DEFINIT ¸II DE BAZ ˘A 17
1.lu˘ am un tuplu s= (s1, …, s k, sk+1…sn) din RS
2.lu˘ am un tuplu t= (t1, …, t k, tk+1, …, t m) din RTcu proprietatea c˘ a
∀i= 1, k:si=ti
3.r= (s1=t1, …, s k=tk, sk+1…sn, tk+1, …, t m).
S˘ a observ˘ am c˘ a var(RS⊿ /triangleleft R T) =S∪T¸ si c˘ a legarea a dou˘ a relat ¸ii cu aceea¸ si
mult ¸ime de variabile este de fapt intersect ¸ia celor dou˘ a: RS⊿ /triangleleft R/prime
S=RS∩R/prime
S.
FieS={x, y, z},T={x, a}, fiecare variabil˘ a avˆ and domeniul {0,1,2}¸ si
dou˘ a relat ¸ii: RS={{0,0,0},{0,1,0},{1,0,0},{1,1,1}},RT={{0,0},{0,1}}.
RS⊿ /triangleleft R Tva avea ca variabile pe S∪T={x, y, z, a}¸ si va fi:
RS⊿ /triangleleft R T={{0,0,0,0},{0,1,0,0},{0,0,0,1},{0,1,0,1}}

18 CAPITOLUL 2. SATISFACEREA CONSTR ˆANGERILOR
2.3 Ret ¸ele de constrˆ angeri
Oret ¸ea de constrˆ angeri este un triplet ( X, D, C ) ˆ ın care:
•X={x1, …, x n}reprezint˘ a o mult ¸ime de variabile;
•D={D1, …, D n}reprezint˘ a domeniile finite ˆ ın care variabilele din X
pot lua valori;
•C={C1, …, C t}reprezint˘ a o mult ¸ime de constrˆ angeri.
Dup˘ a cum am precizat deja, nu se impune nici o restrict ¸ie asupra tipului
variabilelor: acestea pot fi ˆ ıntregi, logice, mult ¸imi sau orice altceva ¸ si, de
asemenea, nu se impune nici o restrict ¸ie asupra modului ˆ ın care sunt definite
constrˆ angerile. Formal, o constrˆ angere Ci∈C este o pereche < S i, Ri>,
unde Ridenot˘ a o relat ¸ie definit˘ a pe o submult ¸ime Side varibile din X,
aceasta reprezentˆ and atribuirile legale, simultane, permise respectivelor vari-
abile. Cˆ and mult ¸imea de variabile a relat ¸iei este subˆ ınt ¸eleas˘ a, vom identifica
constrˆ angerea Cicu relat ¸ia Ri. De asemenea, pentru claritate, Cimai poate
fi referit˘ a ¸ si sub notat ¸ia RSi. Tot pentru claritate, mult ¸imea de variabile
{x1, …, x k}ale unei constrˆ angeri va mai fi scris˘ a ¸ si sub forma x1…xk, astfel
c˘ a o constrˆ angere C=<{x, y, z}, R > va fi notat˘ a simplu Rxyz.
Mult ¸imeaS={S1, …, S t}a tuturor seturilor de variabile din ret ¸ea pe
care sunt definite constrˆ angeri se nume¸ ste schema ret ¸elei. F˘ ar˘ a a restrˆ ange
generalitatea, putem presupune c˘ a ∀i/negationslash=j:Si/negationslash=Sj, cu alte cuvinte nu
exist˘ a constrˆ angeri definite pe aceea¸ si mult ¸ime de variabile. In cazul ˆ ın care
ar exista, putem reuni relat ¸iile celor dou˘ a constrˆ angeri, obt ¸inˆ and o ret ¸ea
echivalent˘ a.
Aritatea unei constrˆ angeri coincide cu aritatea relat ¸iei de care este definit˘ a,
fiind cardinalul mult ¸imii sale de variabile. O ret ¸ea este binar˘ a dac˘ a toate con-
strˆ angerile sale au cel mult dou˘ a variabile.
Pentru o mult ¸ime de variabile Svom nota cu T(S) mult ¸imea tuturor
tuplelor ce pot fi formate cu variabilele respective ¸ si valori din domeniile
acestora:
T(S) =/productdisplay
xi∈SDi

2.3. RET ¸ELE DE CONSTR ˆANGERI 19
2.3.1 Solut ¸iile unei ret ¸ele de constrˆ angeri
Instant ¸ierea unei variabile reprezint˘ a atribuirea unei valori din domeniul aces-
teia, ˆ ın timp ce instant ¸ierea unei mult ¸imi de variabile Y={xi1, …, x it}pre-
supune instant ¸ierea fiec˘ areia dintre ele ¸ si vom nota acest lucru ca un tuplu,
sub una din formele: ( < x i1, ai1>, …, < x ik, aik>), (xi1=ai1, …, x ik=aik),
sau chiar a= (ai1, …, a ik) atunci cˆ and mult ¸imea de variabile este subˆ ınt ¸eleas˘ a;
evident,∀j∈{i1, …i k}:aj∈Dj.
O instant ¸iere aa variabilelor din Y={xi1, …, x it}satisface o constrˆ angere
RSdac˘ a ¸ si numai dac˘ a proiect ¸ia tuplei apeste Sapart ¸ine relat ¸iei R:
a[S]∈R
Osolut ¸ie a unei ret ¸ele de constrˆ angeri R= (X,D,C), unde X={x1, …, x n},
reprezint˘ a o instant ¸iere a tuturor variabilelor din Xastfel ˆ ıncˆ at toate con-
strˆ angerile ret ¸elei sunt satisf˘ acute. Mult ¸imea tuplelor definite pe Xcare
reprezint˘ a solut ¸ii ale unei ret ¸ele Rformeaz˘ a relat ¸ia solut ¸iilor luiR¸ si va fi
notat˘ a cu sol(R) sau ρX. Mai spunem c˘ a ret ¸eau exprim˘ a saureprezint˘ a
relat ¸ia solt ¸iilor sale.
sol(R) ={a= (a1, …, a n)|∀i:ai∈Di∧a[Si]∈Ri}
O instant ¸iere part ¸ial˘ a aa unui set de variabile Sale unei ret ¸ele este
consistent˘ a dac˘ a ¸ si numai dac˘ a satisface toate constrˆ angerile definite doar pe
variabile dintre cele c˘ arora le-au fost atribuite valori:
∀Si∈schema (R), Si⊆S⇒a[Si]∈RSi
O instant ¸iere part ¸ial˘ a consistent˘ a a unor variabile se mai nume¸ ste ¸ si solut ¸ie
part ¸ial˘ a . Vom nota cu sol(A) sau ρArelat ¸ia tuturor solut ¸iilor part ¸iale ale
unei ret ¸ele peste o submult ¸ime de variabile A.
2.3.2 Echivalent ¸a ret ¸elelor
Dou˘ a ret ¸ele de constrˆ angeri sunt echivalente dac˘ a sunt definite pe aceea¸ si
mult ¸ime de variabile ¸ si au aceea¸ si mult ¸ime de solut ¸ii. T ¸ inˆ and cont de aceast˘ a
definit ¸ie, rezolvarea unei probleme modelat˘ a ca o ret ¸ea de constrˆ angeri pre-
supune de multe ori modificarea ret ¸elei init ¸iale ˆ ıntr-o nou˘ a ret ¸ea, ad˘ augˆ and
sau eliminˆ and constrˆ angeri, astfel ˆ ıncˆ at ret ¸eaua obt ¸inut˘ a este echivalent˘ a cu
prima, dar mai ”u¸ sor” de rezolvat. Crearea de noi constrˆ angeri pe baza celor
existente se nume¸ ste deducere sauinferent ¸˘ a .

20 CAPITOLUL 2. SATISFACEREA CONSTR ˆANGERILOR
O constrˆ angere este redundant˘ a dac˘ a eliminarea ei din ret ¸ea nu afecteaz˘ a
cu nimic mult ¸imea solut ¸iilor, cu alte cuvinte, ret ¸eaua obt ¸inut˘ a este echiva-
lent˘ a cu cea original˘ a. Evident,ˆ ın urma procesului de inferent ¸˘ a constrˆ angerile
rezultate sunt redundante.
2.3.3 Reprezentarea ret ¸elelor
Unei ret ¸ele ˆ ıi pot fi asociate diverse reprezent˘ ari prin intermediul c˘ arora s˘ a
poat˘ a fi identificate mai u¸ sor unele propriet˘ at ¸i ale acesteia, care s˘ a simplifice
procesul de g˘ asire a solut ¸iilor.
Reprezentarea ca hipergraf
Unhipergraf este o structur˘ aH= (V,S) , unde V={v1, …, v n}reprezint˘ a o
mult ¸ime de noduri iar S={S1, …, S m}este o mult ¸ime format˘ a din submult ¸imi
ale lui V, fiecare din ele purtˆ and denumirea de hipermuchie . Un graf este
a¸ sadar un hipergraf ˆ ın care toate hipermuchiile cont ¸in exact dou˘ a noduri.
Unei ret ¸ele de constrˆ angeri R= (X,D,C) ˆ ıi poate fi asociat un hipergraf
H= (V,S) ˆ ın care:
•Nodurile hipergrafului sunt variabilele ret ¸elei: V=X={x1, …, x n}.
•Hipermuchiile vor fi mult ¸imile de noduri corespunz˘ atoare variabilelor
pe care sunt definite constrˆ angerile ret ¸elei:
{xi1, …, x ik}∈S (H)⇔∃Cj=< S j, Rj>∈C:Sj={xi1, …, x ik}.
Este evident c˘ a pot exista ret ¸ele diferite care s˘ a aib˘ a aceea¸ si reprezentare
ca hipegraf, acesta furnizˆ and doar informat ¸ii despre dependent ¸a variabilelor
ˆ ıntre ele ¸ si nu despre relat ¸iile constrˆ angerilor ret ¸elei.
Graful primal al constrˆ angerilor
Graful G= (V, E) al constrˆ angerilor unei ret ¸ele R= (X,D,C), numit ¸ si
primal , este construit astfel:
•Nodurile grafului sunt variabilele ret ¸elei: V=X={x1, …, x n}.
•Intre dou˘ a noduri ale grafului exist˘ a muchie dac˘ a ¸ si numai dac˘ a ˆ ın ret ¸ea
exist˘ a o constrˆ angere a c˘ arei mult ¸ime de variabile le cont ¸ine ¸ si pe cele

2.3. RET ¸ELE DE CONSTR ˆANGERI 21
corespunz˘ atoare nodurilor:
xixj∈E⇔∃C=< S, R >∈C:{xi, xj}⊆S
A¸ sadar, acest graf pune ˆ ın evident ¸˘ a dependent ¸a variabilelor una de cealalt˘ a,
prezent ¸a unei muchii ˆ ıntre nodurile corespunz˘ atoare a dou˘ a variabile in-
dicˆ and faptul c˘ a valoarea uneia este constrˆ ans˘ a ˆ ıntr-un anumit fel de valoarea
celeilalte, ˆ ın timp ce absent ¸a muchiei semnific˘ a faptul c˘ a cele dou˘ a variabile
pot fi instant ¸iate independent, f˘ ar˘ a ca vreo constrˆ angere s˘ a fie ˆ ınc˘ alcat˘ a – cu
alte cuvinte, cele dou˘ a variabile apart ¸in relat ¸iei universale care cont ¸ine toate
tuplele produsului cartezian al celor dou˘ a domenii.
Este evident c˘ a pot exista ret ¸ele diferite care s˘ a aib˘ a grafurile constrˆ angerilor
izomorfe. Practic, acest graf ne va fi de ajutor ˆ ın situat ¸ia ˆ ın care el nu este
complet, pentru a putea identifica variabilele care nu depind una de cealalt˘ a.
In situat ¸ia ˆ ın care el este complet, informat ¸ia transmis˘ a nu simplific˘ a ˆ ın nici
un fel rezolvarea problemei.
Graful dual al constrˆ angerilor
Graful G= (V, E)dual al constrˆ angerilor este construit astfel:
•Nodurile grafului corespund constrˆ angerilor ret ¸elei: V=C={C1, …, C m}.
•Intre dou˘ a noduri ale grafului exist˘ a muchie dac˘ a ¸ si numai dac˘ a ˆ ın
ret ¸ea mult ¸imile variabilelor pe care sunt definite constrˆ angerile core-
spunz˘ atoare nodurilor au intersect ¸ia nevid˘ a:
∀Ci=< S i, Ri>, C j=< S j, Rj>∈V, C iCj∈E⇔Si∩Sj/negationslash=∅
Practic, aceast˘ a reprezentare ne ofer˘ a urm˘ atoarea informat ¸ie: prezent ¸a unei
muchii semnific˘ a faptul c˘ a dou˘ a constrˆ angeri depind una de cealalt˘ a ˆ ın sensul
c˘ a o instant ¸iere consistent˘ a a variabilelor uneia dintre ele poate fi inconsis-
tent˘ a pentru variabilele celeilalte, ˆ ın timp ce absent ¸a unei muchii indic˘ a faptul
c˘ a satisfacerea celor dou˘ a constrˆ angeri este independent˘ a una de cealalt˘ a. Ca
¸ si ˆ ın cazul grafului primal, acest graf ne va fi de ajutor doar ˆ ın situat ¸ia ˆ ın
care el nu este complet.
Graful relat ¸iilor
In continuare ne punem problema cum am putea reprezenta sub forma unui

22 CAPITOLUL 2. SATISFACEREA CONSTR ˆANGERILOR
graf atˆ at variabilele unei ret ¸ele cˆ at ¸ si constrˆ angerile acesteia, astfel ˆ ıncˆ at
problema satisfacerii constrˆ angerilor s˘ a poat˘ a fi exprimat˘ a sub forma unei
probleme pe grafuri.
FieR= (X,D,S) o ret ¸ea de constrˆ angeri, X={x1, …, x n}variabilele
sale ¸ si{D1, …, D n}domeniile corespunz˘ atoare. Vom defini graful G= (V, E)
al relat ¸iilor lui Rastfel:
•Nodurile grafului sunt toate perechile de forma ( xi, aj), unde xi∈X
¸ siaj∈Di. Cu alte cuvinte, pentru fiecare variabil˘ a cre˘ am perechi cu
toate valorile cu care poate fi instant ¸iat˘ a aceasta. Num˘ arul de noduri
al grafului va fi|V|=/summationtext
i=1,n|Di|.
•Intre dou˘ a noduri ( x, a) ¸ si (y, b) ale grafului exist˘ a muchie dac˘ a ¸ si numai
dac˘ a
–x/negationslash=y
–ˆ ın ret ¸ea exist˘ a o constrˆ angere definit˘ a pe o mult ¸ime de variabile ce
include pe x¸ siyiar relat ¸ia sa cont ¸ine o tupl˘ aˆ ın care componentele
corespunz˘ atoare lui x¸ siyau valorile a, respectiv b.
–ˆ ın ret ¸ea variabilele x¸ siysunt independente, cu alte cuvinte graful
primal al constrˆ angerilor nu cont ¸ine muchia xy.
Graful astfel format este multipartit, avˆ and |V|clase ale partit ¸ii, o clas˘ a fiind
mult ¸imea stabil˘ a generat˘ a de o variabil˘ a a ret ¸elei.
Propozit ¸ie 1 [13] Orice solut ¸ie a ret ¸elei corespunde unui drum din graful
relat ¸iilor de lungime n, avˆ and cˆ ate un nod din fiecare partit ¸ie.
2.3.4 Rezolvarea ret ¸elelor de constrˆ angeri
Vom ˆ ıncheia aceast˘ a sect ¸iune cu o privire de ansamblu asupra metodelor pe
care la putem folosi pentru a g˘ asi una sau toate solut ¸iile unei ret ¸ele de con-
strˆ angeri. Avˆ andˆ ın vedere c˘ a problemele modelate folosind constrˆ angeri sunt
ˆ ın general dificile, algoritmii pot aborda problema g˘ asirii solut ¸iilor fie sistem-
atic, ˆ ın cazul ˆ ın care spat ¸iul solut ¸iilor nu este foarte mare, fie aproximativ
prin diverse euristici care ˆ ıns˘ a nu garanteaz˘ a rezolvarea corect˘ a a ret ¸elei.

2.3. RET ¸ELE DE CONSTR ˆANGERI 23
Algoritmi sistematici de rezolvare
In principiu, algoritmii sistematici de c˘ autare parcurg tot spat ¸iul solut ¸iilor
problemei ce trebuie rezolvat˘ a, atribuind pe rˆ and variabilelor ret ¸elei toate
valorile din domeniul lor. In felul acesta, suntem siguri c˘ a vom g˘ asi toate
posibilele solut ¸ii, dac˘ a exist˘ a vreuna, sau vom trage concluzia c˘ a problema nu
are rezolvare. In mod evident, dezavantajul abord˘ arii sistematice a c˘ aut˘ arii
const˘ a ˆ ın faptul c˘ a timpul de lucru al acestor algoritmi depinde strict de
dimensiunea spat ¸iului solut ¸iilor, care poate fi foarte mare.
Generare ¸ si test
Cel mai simplist algoritm sistematic de rezolvare const˘ aˆ ın generarea secvent ¸ial˘ a
a tuturor tuplelor din produsul cartezian al domeniilor variabilelor ret ¸elei ¸ si
testarea fiec˘ areia dintre acestea pentru a vedea dac˘ a sunt satisf˘ acute toate
constrˆ angerile. Algoritmul se poate opri la g˘ asirea unei solut ¸ii sau poate
continua pˆ an˘ a ce tot spat ¸iul de c˘ autare a fost analizat. Practic, metoda nu
prezint˘ a nici o important ¸˘ a, ineficient ¸a abord˘ arii constˆ and ˆ ın faptul c˘ a nu
sunt exploatate informat ¸iile cont ¸inute de constrˆ angeri ˆ ın pasul de generare a
posibilelor solut ¸ii.
Backtracking
O metoda sistematic˘ a, dar mult mai eficient˘ a decˆ at cea anterioar˘ a, const˘ a ˆ ın
atribuirea succesiv˘ a de valori variabilelor ret ¸elei ¸ si testarea consistent ¸ei aces-
tor instant ¸ieri part ¸iale. In felul acesta, algoritmul de backtracking ˆ ıncearc˘ a
ˆ ın permanent ¸˘ a s˘ a extind˘ a o solut ¸ie part ¸ial˘ a c˘ atre una complet˘ a. In situat ¸ia
ˆ ın care o solut ¸ie part ¸ial˘ a este inconsistent˘ a algoritmul nu va mai ˆ ıncerca s˘ a
asigneze valori ¸ si celorlalte variabile ci va face un pas ˆ ınapoi, ultima variabil˘ a
care a fost instant ¸iat˘ a va primi o alt˘ a valoare ¸ si a¸ sa mai departe. In felul
acesta, spat ¸ii ˆ ıntregi din produsul cartezian al domeniilor variabilelor vor fi
excluse de la testare, sporind astfel eficient ¸a c˘ aut˘ arii sistematice a solut ¸iilor.
De¸ si backtrackingul este un algoritm mult mai bun decˆ at cel de generare
¸ si test, ˆ ın cazul problemelor dificile aplicarea sa ˆ ın forma standard nu este
foarte eficient˘ a, motivele care pot provoca acest lucru fiind:
•repetarea gre¸ selilor (thrashing) – deoarece la aparit ¸ia unei inconsistent ¸e
nu sunt identificate variabilele care sunt ˆ ın conflict, acela¸ si conflict se
poate repeta ¸ si ˆ ın alte situat ¸ii f˘ ar˘ a ca el s˘ a fie detectat ˆ ın prealabil.

24 CAPITOLUL 2. SATISFACEREA CONSTR ˆANGERILOR
•redundant ¸a – const˘ a ˆ ın efectuarea acelora¸ si teste pentru verificarea
consistent ¸ei de mai multe ori f˘ ar˘ a a ret ¸ine rezultatul lor, lucru care
spore¸ ste nejustificat timpul de lucru al algoritmului.
•detectarea tˆ arzie a conflictelor – semnific˘ a faptul c˘ a algoritmul stan-
dard nu ˆ ı¸ si poate da seama atunci cˆ and se ˆ ındreapt˘ a cu sigurant ¸˘ a c˘ atre
un conflict, efectuˆ and iar˘ a¸ si calcule inutile care pot fi extrem de costisi-
toare din punctul de vedere al timpului total de lucru.
Plecˆ and de la backtracking-ul standard, vom studia ˆ ın capitolele urm˘ atoare
o serie de tehnici care ˆ ıncearc˘ a s˘ a elimine dezavantajele prezentate mai sus,
ˆ ımbun˘ at˘ at ¸ind substant ¸ial comportarea general˘ a algoritmului.
Euristici de rezolvare
Euristicile de rezolvare renunt ¸˘ a la c˘ autarea sistematic˘ a a solut ¸iilor, ˆ ıncercˆ and
s˘ a ajung˘ a la acestea prin metode aproximative care nu garanteaz˘ a reu¸ sita
ˆ ıns˘ a au un timp de lucru mult mai bun fat ¸˘ a de algoritmii sistematici. Printre
metodele care pot fi amintite aici sunt: algoritmii genetici, algoritmi stochas-
tici, simulated annealing, etc. Uneori, combinarea unor algoritmi sistematici
cu euristici de rezolvare poate produce algoritmi eficient ¸i pentru diferite clase
de probleme.
2.3.5 Analiza complexit˘ at ¸ii
Analiza complexit˘ at ¸ii unui algoritm prespune stabilirea resurselor necesare
acestuia pentru realizarea calculului presupus de rezolvarea problemei c˘ areia
ˆ ıi este destinat. Cele mai comune resurse care sunt luate ˆ ın considerare sunt:
•timpul – num˘ arul de pa¸ si necesari;
•spat ¸iul – necesarul de memorie pentru reprezentarea datelor init ¸iale ¸ si
intermediare.
Pentru a compara performant ¸ele unor algoritmi diferit ¸i dar care rezolv˘ a
aceea¸ si problem˘ a, au fost introduse m˘ asuri care s˘ a cuantifice consumul de
resurse al acestora, punˆ andu-le astfel ˆ ın evident ¸˘ a eficient ¸a.
Complexitatea timp a unui algoritm reprezint˘ a num˘ arul de operat ¸ii atom-
ice necesare rezolv˘ arii unei instant ¸e a unei probleme, avˆ and o intrare de o

2.3. RET ¸ELE DE CONSTR ˆANGERI 25
anumit˘ a dimensiune n(uzual reprezentat˘ a ca un ¸ si de bit ¸i). A¸ sadar, com-
plexitatea timp poate fi v˘ azut˘ a ca o funct ¸ie favˆ and ca intrare dimensiunea
intr˘ arii n¸ si ca ie¸ sire num˘ arul necesar de operat ¸ii. Pentru a m˘ asura valo-
rile acestei funct ¸ii este folosit˘ a notat ¸ia Big-O , introdus˘ a de germanul Paul
Bachmann ˆ ın 1892 ˆ ın cartea Analytische Zahlentheorie ¸ si popularizat˘ a apoi
de un alt german Edmund Landau, din acest motiv ea mai numindu-se ¸ si
simbolul Landau . Prin intermediul acestei notat ¸ii este oferit un mecanism
care s˘ a descrie comportamentul asimptotic al unei funct ¸ii, cu alte cuvinte, s˘ a
poat˘ a fi stabilit˘ a o limit˘ a superioar˘ a asimptotic˘ a a unei funct ¸ii ˆ ın raport cu
alte funct ¸ii mai simple, care pot fi luate ca reper.
S˘ a consider˘ am ca exemplu un algoritm care necesit˘ a T(n) = 2 n2+ 3n+ 4
pa¸ si pentru a rezolva o anumit˘ a problem˘ a de dimensiune n. Pe m˘ asur˘ a ce n
cre¸ ste, valoarea lui T(n) se va apropia asimptotic de valoarea lui 2 n2. F˘ acˆ and
abstract ¸ie de coeficient ¸i, putem scrie c˘ a T(n)∈O(n2), cu alte cuvinte algo-
ritmul are ordinul de complexitate n2.
Formal, fiind date dou˘ a funct ¸ii reale f¸ sig, spunem c˘ a f(x)∈O(g(x))
cˆ and x→∞ dac˘ a ¸ si numai dac˘ a exist˘ a o valoare real˘ a x0¸ si o constant˘ a M
pentru care are loc:
|f(x)|≤M|g(x)|,∀x > x 0.
Prin abuz de notat ¸ie, faptul c˘ a f(x)∈O(g(x)) va fi scris de cele mai
multe ori f(x) =O(g(x)).
Cele mai comune clase de funct ¸ii folosite pentru a exprima complexitatea
algoritmilor sunt:
Notat ¸ie Denumire
O(1) constant˘ a
O(log(n)) logaritmic˘ a
O([log(n)]c)polilogaritmic˘ a
O(n) liniar˘ a
O(nlog(n)) supraliniar˘ a
O(n2) patratic˘ a
O(nc), c > 1polinomial˘ a
O(cn), c > 1exponent ¸ial˘ a
O(n!) factorial˘ a
Dintre propriet˘ at ¸ile pe care trebuie s˘ a le avem ˆ ın vedere ˆ ın calculul com-
plexit˘ at ¸ii algoritmilor, cele mai utilizate sunt:

26 CAPITOLUL 2. SATISFACEREA CONSTR ˆANGERILOR
•O(f(n))O(g(n)) =O(f(n)g(n))
•O(f(n)) +O(g(n)) =O(max{f(n), g(n)})
•O(cf(n)) =O(f(n)), unde c >0 este o constant˘ a.
•O(c+f(n)) =O(f(n)), unde c >0 este o constant˘ a.
De¸ si notat ¸ia Oeste cea mai folosit˘ a, mai exist˘ a ¸ si alte instrumente pentru
a descrie asimptotic comportamentul unei funct ¸ii. Acestea sunt prezentate
ˆ ın tabelul de mai jos:
Notat ¸ie Semnificat ¸ie Definit ¸ie
f(n)∈O(g(n))limit˘ a superioar˘ a asimptotic˘ a lim supx→∞|f(x)
g(x)|<∞
f(n)∈o(g(n)) asimptotic neglijabil˘ a limx→∞f(x)
g(x)= 0
f(n)∈Ω(g(n))limit˘ a inferioar˘ a asimptotic˘ a lim inf x→∞|f(x)
g(x)|>0
f(n)∈ω(g(n))asimptotic dominat˘ a limx→∞g(x)
f(x)= 0
f(n)∈Θ(g(n))asimptotic marginit˘ a f∈O(g) ¸ sig∈O(f)
Inainte de a prezenta diver¸ si algoritmi pe ret ¸ele de constrˆ angeri, s˘ a vedem
care sunt parametrii dup˘ a care putem analiza complexitatea acestora. Fie
R= (X,D,C) o ret ¸ea oarecare.
•n=|X|- num˘ arul de variabile
•k=max{|D||D∈D} – cardinalul maxim al domeniilor de definit ¸ie.
•e=|C|- num˘ arul de constrˆ angeri
•t=max{|R||C=< S, R >∈C} – num˘ arul maxim de tuple al relat ¸iilor
ce definesc constrˆ angerile ret ¸elei.
Num˘ arul maxim de constrˆ angeri ce poate fi definit pe nvariabile este:
C1
n+C2
n+…+Cn
n= 2n−1. A¸ sadar O(e) =O(2n).
Un exemplu simplu care s˘ a ilustreze acest lucru este: X={x, y, z},C=
{Rx, Ry, Rz, Rxy, Rxz, Ryz, Rxyz}.
In cazul ret ¸elelor binare, e <=C1
n+C2
n, ceea ce ˆ ınseamn˘ a c˘ a O(e) =O(n2).
Num˘ arul maxim de tuple dintr-o relat ¸ie este cardinalul produsului cartezian
al domeniilor variabilelor relat ¸iei, a¸ sadar parametrul tva depinde de num˘ arul

2.4. SATISFACEREA PART ¸IAL ˘A A CONSTR ˆANGERILOR 27
maxim de variabile ¸ si de dimensiunea maxim˘ a a domeniilor: t <=kn.
Astfel, dac˘ a X={x, y, z},Dx=Dy=Dz={0,1},Rxyzpoate fi
{(0,0,0),(0,0,1),(0,1,0),(0,1,1),(1,0,0),(1,0,1),(1,1,0),(1,1,1)},
avˆ and a¸ sadar 23= 8 tuple.
In cazul ret ¸elelor binare t <=k2.
Intrucˆ at algoritmii prezentat ¸i vor avea ca intrare ret ¸ele de constrˆ angeri
oarecare, nu vom face supozit ¸ii care s˘ a limiteze valorile acestor parametri, ci
ˆ ıi vom folosi ca atare.
Din punct de vedere algoritmic, este important s˘ a analiz˘ am complexi-
tatea operat ¸iunilor elementare pe care le vom efectua, deoarece acestea vor fi
implicate ˆ ın stabilirea complexit˘ at ¸ii totale a acestora. Din acest motiv vom
organiza structurile de date astfel ˆ ıncˆ at, cu pret ¸ul unui calcul mai costisitor
init ¸ial, s˘ a optimiz˘ am efectuarea operat ¸iilor de baz˘ a.
Astfel, vom presupune c˘ a:
•testarea apartenent ¸ei unei variabile la mult ¸imea de variabile a unei
constrˆ angeri,
•determinarea constrˆ angerilor ˆ ın care este implicat˘ a o anumit˘ a variabil˘ a
pot fi f˘ acute ˆ ın timp constant folosind structuri de date corespunz˘ atoare.
2.4 Satisfacerea part ¸ial˘ a a constrˆ angerilor
Modelul clasic de definire a problemelor de satisfacere a constrˆ angerilor pleac˘ a
de la premiza c˘ a identificarea unei solut ¸ii presupune satisfacerea tuturor con-
strˆ angerilor problemei. Din acest punct de vedere, singura diferent ¸iere ˆ ıntre
dou˘ a asign˘ ari ale variabilelor problemei este dac˘ a acestea sunt sau nu consis-
tente. Exist˘ a ˆ ıns˘ a multe situat ¸ii reale care modelate sub forma unei instant ¸e
CSP conduc la probleme a c˘ aror rezolvare nu poate fi f˘ acut˘ a (folosind sol-
vere clasice CSP) ˆ ıntr-un timp rezonabil datorit˘ a complexit˘ at ¸ii lor, sau chiar
care nu au nici o solut ¸ie, a¸ sa numitele probleme supra-constrˆ anse (overcon-
strained) [17], [5]. Un exemplu ˆ ın acest sens este problema orarului ˆ ın care,
la restrict ¸iile tari ale problemei care nu pot fi sub nici o form˘ a violate (o sal˘ a
nu poate fi ocupat˘ a ˆ ın acela¸ si timp cu dou˘ a activit˘ at ¸i) se adaug˘ a o mult ¸ime
de constrˆ angeri care modeleaz˘ a, s˘ a spunem, preferint ¸ele profesorilor. Intr-o

28 CAPITOLUL 2. SATISFACEREA CONSTR ˆANGERILOR
solut ¸ie ideal˘ a este de dorit respectarea tuturor acestor preferint ¸e ˆ ıns˘ a de cele
mai multe ori acest lucru nu este posibil, caz ˆ ın care trebuie s˘ a alc˘ atuim un
orar care s˘ a satisfac˘ a part ¸ial dar ”cˆ at mai bine” mult ¸imea acestor restrict ¸ii
personale. Acest ”cˆ at mai bine” poate reprezenta minimizarea num˘ arului de
constrˆ angeri care nu au fost satisf˘ acute sau poate fi definit ˆ ın a¸ sa fel ˆ ıncˆ at
respectarea preferint ¸elor unui profesor s˘ a aib˘ a prioritate ˆ ın fat ¸a doleant ¸elor
altora.
A¸ sdar, ˆ ın situat ¸ii cum este cea prezentat˘ a mai sus, devine necesar˘ a o
abordare care s˘ a ne conduc˘ a ˆ ıntr-un mod eficient c˘ atre o solut ¸ie part ¸ial˘ a
satisf˘ ac˘ atoare . In continuare vom formaliza not ¸iunea de ”satisf˘ ac˘ ator” ¸ si
vom prezenta diferite modele de lucru.
Definit ¸ie 1 Oret ¸ea slab˘ a de constrˆ angeri [46] este un triplet ( X, D, C ),
unde
•X={x1, …, x n}reprezint˘ a o mult ¸ime de variabile;
•D={D1, …, D n}reprezint˘ a domeniile finite ˆ ın care variabilele din X
pot lua valori;
•C={C1, …, C t}reprezint˘ a o mult ¸ime de constrˆ angeri slabe .
Oconstrˆ angere slab˘ a C=< S, f >∈Ceste definit˘ a ca o pereche for-
mat˘ a dintr-o mult ¸ime S⊆Xde variabile ¸ si o funct ¸ie fdefinit˘ a pe
mult ¸imea tuplelor ce pot fi asignate variabilelor din Savˆ and valori ˆ ıntr-
o mult ¸ime Ece denot˘ a nivele de preferint ¸˘ a. Formal, f:/producttext
xi∈SDi→E.
Pentru simplitate, vom mai nota o astfel de constrˆ angere prin fS.
Pentru o mult ¸ime de variabile Svom nota T(S) =/producttext
xi∈SDi.
Evident, pentru a putea spune c˘ a o instant ¸iere ta variabilelor dintr-o
mult ¸ime Seste mai bun˘ a decˆ at o alta t/primerelativ la o constrˆ angere fS, trebuie
ca pe mult ¸imea Es˘ a fie definit˘ a o relat ¸ie de ordine total˘ a /precedesequal, astfel ˆ ıncˆ at t
este mai bun˘ a decˆ at t/primedac˘ a ¸ si numai dac˘ a fS(t)/precedesequalfS(t/prime).
De asemenea, deoarece dorim s˘ a integr˘ am modelul clasic CSP ˆ ın acest
nou model, trebuie s˘ a existe dou˘ a elemente ˆ ın mult ¸imea E, s˘ a le not˘ am⊥¸ si
/latticetopcu semnificat ¸iile de ”tupl˘ a permis˘ a” (absent ¸a oric˘ arei interdict ¸ii), repectiv
”tupl˘ a interzis˘ a” din varianta clasic˘ a. Relativ la ordinea /precedesequala elementelor din
E,⊥reprezint˘ a minimul iar /latticetopmaximul.

2.4. SATISFACEREA PART ¸IAL ˘A A CONSTR ˆANGERILOR 29
∀a∈E⊥/precedesequala/precedesequal/latticetop
Fiea,a/primedou˘ a instant ¸ieri ale tuturor variabilelor din X. Intrebarea pe care
ne-o punem este cum putem aprecia care din cele dou˘ a instat ¸ierei este mai
bun˘ a, din perspectiva satisfacerii tuturor constrˆ angerilor din ret ¸ea. Pentru a
r˘ aspunde la aceast˘ a ˆ ıntrebare, trebuie s˘ a definim un operator ⊕pe mult ¸imea
Ecare s˘ a specifice cum se ”combin˘ a” nivelele de preferint ¸˘ a reprezentate de
elementele lui E. Folosind acest operator, putem defini nivelul de satisfact ¸ie
oferit de o instant ¸iere aca fiind funct ¸ia F:T(X)→E:
F(a) =/circleplusdisplay
{f(a[S])|∀C=< S, f >∈C}
Spunem c˘ a o ret ¸ea slab˘ a de constrˆ angeri are solut ¸ie dac˘ a ∃t∈T(X)
astfel ˆ ıncˆ at F(t)≺/latticetop. O astfel de solut ¸ie se nume¸ ste admisibil˘ a . O solut ¸ie
aeste optimal˘ a dac˘ a ¸ si numai dac˘ a ∀t/prime∈T(X)F(t)/precedesequalF(t/prime). Dac˘ a∀t∈
T(X)F(t) =/latticetop, spunem c˘ a ret ¸eaua nu are nici o solut ¸ie.
In continuare vom extinde funct ¸ia cost fastfel: f:/uniontext{T(S)|S∈X},
f(t) =/circleplusdisplay
{f(a[S])|∀C=< S, f >∈C:var(t)∩S/negationslash=∅}
Definit ¸ie 2 [49] O structur˘ a de evaluare este o cvintupl˘ a ( E,⊕,/precedesequal,⊥,/latticetop)
astfel ˆ ıncˆ at:
•Eeste o mult ¸ime ale c˘ arei elemente sunt numite evalu˘ ari , total ordonat˘ a
dup˘ a/precedesequal, avˆ and minimul⊥¸ si maximul/latticetop.
•Eeste ˆ ınchis˘ a dup˘ a operatorul binar ⊕ce satisface propriet˘ at ¸ile de:
–comutativitate:∀a, b∈E a⊕b=b⊕a.
–asociativitate:∀a, b, c∈E(a⊕b)⊕c=a⊕(b⊕c).
–element neutru:∀a∈E a⊕/latticetop =/latticetop⊕a=a
–element de scufundare: ∀a∈E a⊕⊥ =⊥⊕a=⊥
–monotonie:∀a, b, c∈Ea/precedesequalb⇒(a⊕c)/precedesequal(b⊕c)
Definit ¸ie 3 Oret ¸ea evaluat˘ a de constrˆ angeri este o cvadrupl˘ a ( X, D, C, S ),
unde ( X, D, C ) este o ret ¸ea slab˘ a de constrˆ angeri iar So structur˘ a de eval-
uare.

30 CAPITOLUL 2. SATISFACEREA CONSTR ˆANGERILOR
2.4.1 Instant ¸e specifice
Prin particularizarea structurii de evaluare obt ¸inem u¸ sor modele studiate
deja de reprezentare a problemelor folosind constrˆ angeri.
•Modelul clasic
In modelul clasic mult ¸imea Eeste format˘ a din cele dou˘ a valori logice
pentru adev˘ arat ¸ sifals, operatorul de compunere fiind cel de ¸ si logic .
•Aditiv
In modelul aditiv, nerespectarea unei constrˆ angeri atrage dup˘ a sine o
penalizare reprezentat˘ a sub forma unui num˘ ar ˆ ıntreg pozitiv, scopul
fiind de a minimiza suma total˘ a a penaliz˘ arilor.
•MAX-CSP
MAX-CSP este o particularizare a modelului aditiv ˆ ın care ne intere-
seaz˘ a doar minimizarea num˘ arul de constrˆ angeri care nu sunt sat-
isf˘ acute, a¸ sadar penaliz˘ arile pot fi doar 0 sau 1.
Sintetiz˘ am particulariz˘ arile de mai sus ˆ ın urm˘ atorul tabel:
CSP E/precedesequal⊥/latticetop⊕
Clasic{0,1}0/precedesequal101∧
Aditiv N≤ 0∞ +
MAX-CSP{0,1}≤ 0|C| +
2.4.2 Operat ¸ii cu funct ¸ia de cost
S˘ a analiz˘ am ˆ ın continuare operatorii care pot fi aplicat ¸i funct ¸iilor ce definesc
constrˆ angerile unei ret ¸ele.
Restrict ¸ia
FiefSo constrˆ angere, xi∈S¸ sia∈Di. Restrict ¸ia este un operator care,
pentru asignarea xi=a, creeaz˘ a o nou˘ a constrˆ angere fS−xi=fS[xi=a]
definit˘ a astfel:
∀t∈T(S−xi)fS−xi(t) =fS(t ⊿ /triangleleft(xi=a))
Proiect ¸ia
FiefSo constrˆ angere ¸ si xi∈S. Proiect ¸ia este un operator care creaz˘ a o
nou˘ a constrˆ angere fS−xi=fS[S−xi] =not.fS[−xi] definit˘ a astfel:
∀t∈T(S−xi)fS−xi(t) =min{a∈Di|fS(t ⊿ /triangleleft(xi=a))

2.4. SATISFACEREA PART ¸IAL ˘A A CONSTR ˆANGERILOR 31
Combinarea
FiefS,gS/primedou˘ a constrˆ angeri. Funct ¸ia hS∪S/prime=fS⊕gS/primeeste definit˘ a astfel:
∀t∈T(S∪S/prime)h(t) =fS(t[S])⊕gS/prime(t[S/prime])
Folosind aceast˘ a notat ¸ie, o solut ¸ie a unei ret ¸ele slabe de constrˆ angeri este o
asignare ta tuturor variabilelor astfel ˆ ıncˆ at:
(/circleplusdisplay
f∈Cf)(t)/negationslash=/latticetop
Compararea
FiefS,gS/primedou˘ a constrˆ angeri. Spunem c˘ a feste mai tare decˆ at g(¸ si not˘ am
fS≥gS/prime) dac˘ a ¸ si numai dac˘ a:
∀t∈T(S∪S/prime)fS(t[S])/followsequalgS/prime(t[S/prime])
Dac˘ a f≤g¸ sig≤fcele dou˘ a constrˆ angeri sunt echivalente.
2.4.3 C˘ autarea solut ¸iilor
In cazul ret ¸elelor slabe de constrˆ angeri problema rezolv˘ arii acestora poate fi
privit˘ a sub mai multe aspecte. Astfel, se poate cere:
•determinarea costului optimal al unei solut ¸ii;
•identificarea unei sau a tuturor solut ¸iilor optimale;
•g˘ asirea unei solut ¸ii suficient de bun˘ a (al c˘ arei cost nu dep˘ a¸ se¸ ste o con-
stant˘ a specificat˘ a);
•determinarea tuplelor interzise (nu pot face parte din nici o solut ¸ie
optimal˘ a);
•transformarea ret ¸eleiˆ ıntr-una echivalent˘ a din punctul de vedere al solut ¸iilor,
dar ”mai simpl˘ a” din punctul de vedere al rezolv˘ arii.
In cazul modelului clasic, rezolvarea ret ¸elelor era realizat˘ a pe structura
unui algoritm sistematic de explorare a spat ¸iului solut ¸iilor, de tip backtrack ,
condit ¸ia fiind de satisfacere deplin˘ a a unei mult ¸imi de constrˆ angeri. Pentru
modelul generalizat ˆ ıns˘ a aceast˘ a abordare nu mai este suficient˘ a, acest lucru

32 CAPITOLUL 2. SATISFACEREA CONSTR ˆANGERILOR
fiind datorat diferent ¸ei conceptuale fat ¸˘ a de CSP. Ceea ce ne intereseaz˘ a acum
este identificarea unei solut ¸ii care s˘ a satisfac˘ a ”cˆ at mai bine” constrˆ angerile
impuse, acest lucru traducˆ andu-se prin necesitatea optimiz˘ arii unei funct ¸ii
obiectiv.
Distingem urm˘ atoarele categorii de algoritmi:
•sistematici – un astfel de algoritm (numit ¸ si complet ) va garanta re-
spectarea cerint ¸elor impuse (cum ar fi identificarea unei solut ¸ii optimale
sau ”suficient de bun˘ a”) sau va determina c˘ a problema nu are nici o
solut ¸ie admisibil˘ a.
•euristici – acesteaˆ ıncearc˘ a g˘ asirea unei solut ¸ii optimale f˘ ar˘ a a garantaˆ ın
vreun fel reu¸ sita; scopul lor este de a oferi o modalitate de complexitate
polinomial˘ a pentru a ”ˆ ıncerca” rezolvarea problemelor foarte dificile.
•hibrizi – sunt algoritmi sistematici care folosesc diverse euristici pentru
eficientizarea procesului de c˘ autare a solut ¸iilor.
Trebuie observat c˘ a rezolvarea ret ¸elelor slabe de constrˆ angeri prin inter-
mediul algoritmilor sistematici este mult mai dificil˘ a decˆ at situat ¸ia similar˘ a
din modelul clasic, deoarece ˆ ın situat ¸ia ˆ ın care operatorul ⊕nu este idem-
potent – cum ar fi ˆ ın structurile de evaluare aditive – calitatea unei asign˘ ari
nu este cunoscut˘ a decˆ at dup˘ a ˆ ınsumarea tuturor penaliz˘ arilor generate de
constrˆ angerile care nu sunt satisf˘ acute. In modelul clasic, nerespectarea unei
constrˆ angeri conducea la oprirea procesului de evaluare a asign˘ arii, aceasta
fiind evident inconsistent˘ a.
2.4.4 Algoritmul ”branch-and-bound”(b-b)
In descrierea general˘ a a algoritmului b-bvom porni de la urm˘ atoarele ipoteze:
•Peste o problem˘ a de optimizare, ˆ ın cazul nostru o ret ¸ea slab˘ a de con-
strˆ angeri: P= (X, D, C, S ).
•Dimensiunea problemei este notat˘ a cu dim(P) ¸ si este dat˘ a de num˘ arul
variabilelor ret ¸elei dim(P) =|X|.
•feste funct ¸ia obiectiv care trebuie minimizat˘ a (extensia funct ¸iei de
cost).

2.4. SATISFACEREA PART ¸IAL ˘A A CONSTR ˆANGERILOR 33
Rezolvarea va consta ˆ ın identificarea valorii fopt(P) ¸ si unei tuple a∗∈T(X)
astfel ˆ ıncˆ at:
fopt(P) =f(a∗) =min{f(t)|t∈T(X)}≺/latticetop
[9] Metoda b-beste de tip divide-et-impera ¸ si poate fi descris˘ a astfel:
(a)Se descompune problema Pˆ ın problemele Pi(i= 1, k), instant ¸e ale
problemei P¸ sidim(Pi)< dim (P).
(b)fopt(P) se construie¸ ste ˆ ın timp polinomial din fopt(Pi),i= 1, k.
(c)Pentru o problem˘ a P, dac˘ a dim(P) este suficient de mic, nu este nevoie
s˘ a se mai realizeze descompunerea ci se determin˘ a ˆ ın timp constant
solut ¸ia fopt(P) ¸ sia∗.
(d)In procesul recursiv de calcul descris de (a),(b) ¸ si (c) se dispune de o
metod˘ a de ”eliminare” a rezolv˘ arii unei probleme Pipe baza concluziei
c˘ a la etapa (b) solut ¸ia problemei Pi,fopt(Pi) nu va afecta calculul lui
fopt(P).
La nivel de implementare, vom avea nevoie de:
•O variabil˘ a foptcare va ret ¸ine optimul curent ¸ si o tupl˘ a a∗care va
memora instant ¸ierea optim˘ a curent˘ a. fopt=f(opt).
•Unpredicat de oprire care s˘ a determine dac˘ a o problem˘ a Ppoate fi
rezolvat˘ a f˘ ar˘ a a o mai descompune ˆ ın subprobleme. Acesta va fi ˆ ınsot ¸it
de algoritmi de rezolvare a cazurilor simple de oprire.
•Ofunct ¸ie de ramificare responsabil˘ a cu descompunerea problemei.
•Ofunct ¸ie de m˘ arginire inferioar˘ a capabil˘ a s˘ a calculeze ˆ ıntr-un timp
rezonabil marginea inferioar˘ a a unei ret ¸ele P, sub care nu poate coborˆ ı
evaluarea nici unei solut ¸ii admisibile: m(P)≤fopt(P). Dac˘ a m(P) este
mai mare decˆ at optimul curent, nu are rost s˘ a mai rezolv˘ am problema
P.
•Ofunct ¸ie de m˘ arginire superioar˘ a – aceasta ne ofer˘ a informat ¸ia c˘ a op-
timul problemei Pnu poate dep˘ a¸ si o anumit˘ a valoare: fopt(P)≤M(P).
Dac˘ a m(P)> M (P) atunci problema nu are solut ¸ie.

34 CAPITOLUL 2. SATISFACEREA CONSTR ˆANGERILOR
•Ostrategie de c˘ autare care va determina la fiecare ramificare modali-
tatea ˆ ın care subproblemele generate vor fi selectate pentru rezolvare.
•Oeuristic˘ a de c˘ autare local˘ a a solut ¸iei pornind de la o instant ¸iere
part ¸ial˘ a a variabilelor.
•Oordine de instant ¸iere variabilelor .
•Oordine de selectare a valorilor .
La apelul init ¸ial al algoritmului vom seta fopt=/latticetop¸ siopt=∅. O variant˘ a
simplist˘ a de m˘ arginire este:
upperBound (P) =fopt
lowerBound (P) =⊥
2.4.5 Funct ¸ii de m˘ arginire inferioar˘ a
Vom considera ˆ ın continuare modelul aditiv de tip WCSP (Weighted CSP) al
ret ¸elelor slabe, ˆ ın care fiecare constrˆ angere are asociat˘ a o penalizare pe care
o atrage nerespectarea sa iar evaluarea unei asign˘ ari se face prin ˆ ınsumarea
tuturor penaliz˘ arilor induse.
S˘ a consider˘ am arborele corespunz˘ ator execut ¸iei unui algoritm de tip b−b
¸ si s˘ a facem urm˘ atoarele notat ¸ii:
•A={x1, …, x i−1}- mult ¸imea variabilelor deja instant ¸iate
•a= (x1=a1, …, x i−1=ai−1) – asignarea curent˘ a
•xi=aiatribuirea ce urmeaz˘ a a fi f˘ acut˘ a ¸ si care reprezint˘ a de fapt nodul
curent al arborelui de c˘ autare.
•F=X−A- mult ¸imea variabilelor r˘ amase de instant ¸iat
•µbc- penalizarea curent˘ a ( backward checking cost ):
µbc=f(a) =def/summationdisplay
{f(a[S])|fS∈C, A∩S/negationslash=∅}
De asemenea, vom nota:
•lb- marginea inferioar˘ a ce semnific˘ a penalizarea minim˘ a a unei solut ¸ii
complete ce va fi construit˘ a pornind de la instant ¸ierea part ¸ial˘ a curent˘ a.

2.4. SATISFACEREA PART ¸IAL ˘A A CONSTR ˆANGERILOR 35
Algorithm 1 Structura general˘ a a procedurii Branch-and-Bound
Intrare: O ret ¸ea slab˘ a de constrˆ angeri P= (X, D, C, S ). Consider˘ am
definite funct ¸iile isSimple ,resolveSimple ,branch ,select ,upperBound ,
lowerBound ,localSearch cu semnificat ¸iile descrise mai sus. Consider˘ am
init ¸ializate variabilele opt¸ sifopt.
Rezultat: O solut ¸ie optim˘ a a problemei Psau mesajul c˘ a aceasta nu are
nici o solut ¸ie admisibil˘ a.
ub=upperBound (P)
lb=lowerBound (P)
ifub < lb then
{Problema nu are solut ¸ie }
return (/latticetop,∅)
end if
iffopt< lbthen
{Rezolvarea lui Peste inutil˘ a}
return (/latticetop,∅)
end if
ifisSimple (P)then
{Problema poate fi rezolvat˘ a simplu, f˘ ar˘ a a o descompune }
return resolveSimple (P)
end if
branch (P)→B ={P1, …, P k}
whileB/negationslash=∅do
Pi=select (B)
B=B−Pi
(fi, opt i) =Branch−and−Bound (Pi)
iffi< f optthen
fopt=fi
opt=opti
{Incerc˘ am ˆ ımbun˘ at˘ at ¸irea optimului local }
(fopt, opt) =localSearch (P, f opt, opt)
end if
end while

36 CAPITOLUL 2. SATISFACEREA CONSTR ˆANGERILOR
•ub- marginea superioar˘ a dat˘ a de costul celei mai bune solut ¸ii g˘ asite
pˆ an˘ a ˆ ın acest moment.
In mod evident, ˆ ın cadrul algoritmului b−bnu are rost s˘ a continu˘ am explo-
rarea ˆ ın condit ¸ia ˆ ın care ub≤lb, deci este important s˘ a g˘ asim modalit˘ at ¸i de
calcul pentru lbcare s˘ a fie cˆ at mai eficiente ˆ ın sensul de a maximiza aceast˘ a
valoare, f˘ ar˘ a ˆ ıns˘ a a introduce un efort computat ¸ional prea mare. In cazul ˆ ın
care, ˆ ın urma evalu˘ arii marginilor ub¸ silb, vom avea relat ¸ia ub≤lb, atribuirea
xi=ainu va mai fi realizat˘ a, reducˆ and astfel domeniul de c˘ autare al solut ¸iei
optime. Cea mai simpl˘ a form˘ a de evaluare a marginii inferioare este dat˘ a de
penalizarea curent˘ a ( backward checking cost ):
lb=µbc
Partial Forward Checking (PFC)
Metoda PFC ofer˘ a o modalitate simpl˘ a de a evalua costul minim al unei
solut ¸ii ce poate fi g˘ asit˘ a mergˆ and pe ramura curent˘ a a arborelui prinˆ ınsumarea
penaliz˘ arilor constrˆ angerilor ce vor fi violate de asignarea a/prime=a·(xi=ai)
(forward checking cost ). Pentru aceasta va trebui s˘ a inspect˘ am doar acele
constrˆ angeri fSpentru care xi∈S¸ siA∩S=∅:
µpfc=/summationdisplay
{f(a/prime[S])|fS∈C, xi∈S∧A∩S=∅}
In aceste condit ¸ii, marginea inferioar˘ a va fi calculat˘ a astfel:
lb=µbc+µpfc
S˘ a observ˘ am c˘ aˆ ın evaluarea acestui cost nu sunt luateˆ ın calcul interact ¸iunile
dintre variabilele din F−A−xi.
Russian Doll Search (RDS)
Algoritmul RDS presupune ordonarea static˘ a a variabilelor ret ¸elei ¸ si re-
zolvarea a nprobleme succesive P1, P2, …, P n=Pobt ¸inute din problema
init ¸ial˘ a Pprin restrict ¸ionarea mult ¸imii de variabile. Astfel prima problem˘ a
va avea ca variabile doar pe xn,P2pe{xn−1, xn}, …,Piva avea n−i+ 1
variabile iar Pnva fi chiar problema init ¸ial˘ a. Rezolvarea problemei Pise va

2.4. SATISFACEREA PART ¸IAL ˘A A CONSTR ˆANGERILOR 37
face p˘ astrˆ and ordinea stabilit˘ a a variabilelor ¸ si solut ¸ia obt ¸inut˘ a va fi folosit˘ a
pentru determinarea marginilor inferioare lbˆ ın cadrul urm˘ atoarei probleme
Pi+1. Astfel, ˆ ın rezolvarea problemei curente, s˘ a not˘ am cu P/primeproblema re-
zolvat˘ a anterior. In evaluarea asign˘ arii a/prime=a·(xi=ai) ne vom folosi de
optimul obt ¸inut pentru P/primecare era definit˘ a pe variabilele A=var(a).
µrds=fopt(P/prime)
Folosind ¸ si aceast˘ a m˘ asur˘ a, marginea inferioar˘ a va fi calculat˘ a astfel:
lb=µbc+µpfc+µrds
2.4.6 Funct ¸ii de m˘ arginire superioar˘ a
Funct ¸ia de m˘ arginire superioar˘ a este optimul curent obt ¸inut. Init ¸ial, aceasta
poate fi obt ¸inut˘ a aplicˆ and o euristic˘ a cu timp de lucru polinomial, cum ar fi
un algoritm de tip greedy .
2.4.7 Tehnici locale de c˘ autare
Tehnicile de c˘ autare local˘ a sunt metode extrem de folosite ˆ ın problemele
de optimizare combinatorial˘ a. Ideea general˘ a este de a porni de la o solut ¸ie
admisibil˘ a t¸ si de a o transforma ˆ ıntr-o alt˘ a solut ¸ie t/prime”apropiat˘ a” de tconform
unei anumite metrici dar ”mai bun˘ a” din punctul de vedere al minimiz˘ arii
funct ¸iei obiectiv. Aceste transform˘ ari sunt repetate atˆ at timp cˆ at este posibil,
rezultatul final fiind un optim local .
Spre deosebire de metodele complete de c˘ autare a solut ¸iilor, tehnicile
locale nu garanteaz˘ a obt ¸inerea optimului ˆ ıns˘ a au o complexitate redus˘ a de
calcul, de cele mai multe ori polinomial˘ a ¸ si sunt foarte eficiente ˆ ın situat ¸iile
ˆ ın care nu ne intereseaz˘ a neap˘ arat obt ¸inerea minimului ci doar a unei solut ¸ii
care este ”suficient” de bun˘ a, ˆ ın sensul c˘ a penalizarea sa este sub un nivel
prestabilit.
Dintre metodele cele mai des folosite amintim:
•simulated annealing
•tabu search
•greedy random adaptive search

38 CAPITOLUL 2. SATISFACEREA CONSTR ˆANGERILOR
•algoritmi genetici
•swarm optimization
In contextul ret ¸elelor de constrˆ angeri, tehnicile locale de c˘ autare pot fi
folosite pentru a determina un optim init ¸ial sau pentru ˆ ımbun˘ at˘ at ¸i optimul
curent, reducˆ at astfel marginea superior˘ a a intervalului [ lb, ub ], lucru extrem
de important ˆ ın reducerea spat ¸iului de c˘ autare a solut ¸iilor.

Capitolul 3
Rezolvarea ret ¸elelor de
constrˆ angeri
3.1 Algoritmi sistematici de c˘ autare
Dat˘ a o ret ¸ea de constrˆ angeri oarecare, ne punem ˆ ın continuare problema
g˘ asirii uneia sau a tuturor solut ¸iilor acesteia. Intrucˆ at dorim s˘ a facem o abor-
dare cˆ at mai general˘ a a problemei, vom exclude deocamdat˘ a ideea folosirii
unor euristici sau a unor particularit˘ at ¸i ale ret ¸elei date ¸ si vom descrie algo-
ritmi care s˘ a identifice ˆ ın mod exact solut ¸iile problemei.
Un algoritm sistematic de c˘ autare poate fi reprezentat ca un automat
definit de:
•O mult ¸ime finit˘ a Sde st˘ ari, fiecare stare corespunzˆ and unei instant ¸ieri
a unei submult ¸imi de variabile a ret ¸elei. Mult ¸imea Spoart˘ a denumirea
¸ si de spat ¸iul de c˘ autare al algoritmului iar |S|va fi numit˘ a dimensiunea
spat ¸iului de c˘ autare.
•O mult ¸ime Ode operatori responsabili cu tranzit ¸ia automatului dintr-o
stare ˆ ın alta;
•O stare init ¸ial˘ a s0;
•O mult ¸ime Sf⊆Sde st˘ ari finale, reprezentˆ and solut ¸iile ret ¸elei.
Ne intereseaz˘ a ˆ ın mod deosebit algoritmii ai c˘ aror spat ¸iu de c˘ autare
poate fi reprezentat din punct de vedere grafic sub forma unui arbore, avˆ and
39

40CAPITOLUL 3. REZOLVAREA RET ¸ELELOR DE CONSTR ˆANGERI
r˘ ad˘ acina s0¸ si un num˘ ar de noduri egal cu |S|. Trecerea dintr-o stare ˆ ın
alta va reprezenta trecerea de pe un nivel al arborelui pe urm˘ atorul, ceea ce
ˆ ınseamn˘ a c˘ a o m˘ asur˘ a a eficient ¸ei algoritmului va fi ¸ si adˆ ancimea arborelui.
Exist˘ a dou˘ a clase de algoritmi sistematici:
•Generare ¸ si test – Spat ¸iul de c˘ autare este produsul cartezial al tutu-
tor domeniilor variabilelor ret ¸elei, din fiecare stare putˆ and fi executat˘ a
tranzit ¸ia ˆ ıntr-o singur˘ a alt˘ a stare, numit˘ a succesor. Execut ¸ia algorit-
mului va consta astfel ˆ ın parcurgerea secvent ¸ial˘ a a tuturor st˘ arilor ¸ si
verificarea consistent ¸ei acestora. Deoarece dimensiunea spat ¸iului de
c˘ autare este foarte mare, din punct de vedere practic aceast˘ a clas˘ a de
algoritmi nu prezint˘ a important ¸˘ a practic˘ a.
•Backtracking – In cazul algoritmilor de tip backtracking, o stare reprezint˘ a
o instant ¸iere part ¸ial˘ a consistent˘ a a unui set de variabile a ret ¸elei. Tre-
cerea dintr-o stare ˆ ın alta se face prin extinderea instant ¸ierii part ¸iale
a st˘ arii curente cu ˆ ınc˘ a o component˘ a. St˘ arile finale vor reprezenta
solut ¸iile ret ¸elei.
3.2 Backtracking
3.2.1 Structura general˘ a a algoritmului
Algoritmul 2 prezint˘ a structura general˘ a a procedurii de backtracking.
3.2.2 Testarea consistent ¸ei unei instant ¸ieri part ¸iale
Singura procedur˘ a care a r˘ amas nedezvoltat˘ a algoritmic este cea de testare
a consistent ¸ei unei instant ¸ieri part ¸iale aa unui set S⊆Xde variabile ale
ret ¸elei dateR. Teoretic, aceasta presupune parcurgerea tuturor relat ¸iilor
corespunz˘ atoare constrˆ angerilor ret ¸elei ¸ si testarea faptului dac˘ a proiect ¸ia tu-
pleiaeste cont ¸inut˘ a ˆ ın vreuna dintre ele. Dac˘ a not˘ am cu tnum˘ arul maxim
de tuple ale unei relat ¸ii ¸ si e=|C|, atunci complexitatea algoritmului ar fi
O(et), presupunˆ and c˘ a testarea apartenent ¸ei unei tuple la o relat ¸ie se face ˆ ın
timp constant.

3.2. BACKTRACKING 41
Algorithm 2 Structura general˘ a a algoritmului backtracking
Intrare:R= (X,D,C) o ret ¸ea de constrˆ angeri, avˆ and |X|=n.
Rezultat: O solut ¸ie a ret ¸elei Rsau mesajul c˘ a ret ¸eaua este inconsitent˘ a.
forDi∈Ddo
D/prime
i=Di{Facem o copie a domeniului Di}
end for
a=∅{ava cont ¸ine solut ¸ia part ¸ial˘ a a ret ¸elei }
i= 1{ireprezint˘ a indexul variabilei ce urmeaz˘ a a fi instant ¸iat˘ a }
while 1≤i≤ndo
success =instantiate (xi,a)
{Incerc˘ am s˘ a instant ¸iem variabila xiastfel ˆ ıncˆ at solut ¸ia part ¸ial˘ a aex-
tins˘ a cu valoarea lui xis˘ a r˘ amˆ an˘ a consistent˘ a }
ifsuccess then
{trecem la pasul urm˘ ator }
i=i+ 1
else
{facem pasul ˆ ınapoi }
Di=D/prime
i
i=i−1
a=a[{x1, …, x i−1}]
end if
end while
ifi= 0then
return ”inconsistent˘ a”
else
return a
end if
Procedura instantiate (xi,a)
while Di/negationslash=∅do
Alege ai∈Dio valoare oarecare din domeniul lui Di
Di=Di−ai
a/prime= (a, x i=ai)
ifisConsistent (a/prime)then
a=a/prime
return true
end if
end while
{Nu s-a putut face instant ¸ierea lui xi}
return false

42CAPITOLUL 3. REZOLVAREA RET ¸ELELOR DE CONSTR ˆANGERI
3.3 Backjumping
Unul din motivele pentru care algoritmul general de backtracking, ˆ ın care pa-
sul deˆ ıntoarcere se face la ultimul nod instant ¸iatˆ ınaintea obt ¸inerii inconsistent ¸ei,
devine de multe ori ineficient este posibilitatea de a gre¸ si din acela¸ si motiv
de mai multe ori (”thrashing”). S˘ a analiz˘ am mai concret aceast˘ a situat ¸ie.
FieR= (X,D,C) o ret ¸ea de constrˆ angeri avˆ and variabilele X={x1, …, x n}
¸ si s˘ a presupunem c˘ a instant ¸ierea part ¸ial˘ a curent˘ a a algoritmului BT este
(x1=a1, …, x k−1=ak−1) iar urm˘ atoarea variabil˘ a ce trebuie instant ¸iat˘ a este
xk. In cazul ˆ ın care /negationslash∃b∈Dkastfel ˆ ıncˆ at ( x1=a1, …, x k−1=ak−1, xk=b) s˘ a
fie consitent˘ a suntem ˆ ıntr-o situat ¸ie de e¸ sec ¸ si trebuie s˘ a facem pasul ˆ ınapoi.
Dup˘ a cum am spus, algoritmul cronologic de BT s-ar intoarce in xk−1,
ˆ ıncercˆ and s˘ a atribuie acestei variabile o nou˘ a valoare ¸ si va continua apoi din
nou cu xk, presupunˆ and c˘ a motivul e¸ secului anterior a fost valoarea atribuit˘ a
luixk−1. Acest lucru nu este ˆ ıns˘ a neap˘ arat adev˘ arat. Este posibil s˘ a existe
un index 1≤i < k−1 pentru care instant ¸ierea part ¸ial˘ a ( x1=a1, …, x i=
ai) s˘ a nu fie compatibil˘ a cu variabila xk, ceea ce ˆ ınseamn˘ a c˘ a /negationslash ∃b∈Dk
astfel ˆ ıncˆ at ( x1=a1, …, x i=ai, xk=b) s˘ a fie consistent˘ a. In aceast˘ a
situat ¸ie algoritmul de BT va ˆ ıncerca f˘ ar˘ a nici un succes s˘ a schimbe valorile
variabilelor xk−1, …, x i+1ˆ ın sperant ¸a c˘ a va putea instant ¸ia pe xk, aceasta
deoarece motivul e¸ secului din xkeste tocmai valoarea atribuit˘ a variabilei xi.
Spunem c˘ a o instant ¸iere part ¸ial˘ a ( x1=a1, …, x k−1=ak−1, xk=ak) este
tare inconsistent˘ a dac˘ a ¸ si numai dac˘ a:
•este inconsitent˘ a ¸ si
•exist˘ a un index index 1 ≤i < k−1 pentru care instant ¸ierea part ¸ial˘ a
(x1=a1, …, x i=ai) nu este compatibil˘ a cu variabila xk.
In mod evident, pentru a eficientiza algoritmul de backtracking trebuie s˘ a
minimiz˘ am num˘ arul instant ¸ierilor responsabile cu situat ¸ii de e¸ sec ¸ si, implicit,
pe cele tare-inconsistente. O strategie simpl˘ a pentru a obt ¸ine acest lucru
este ˆ ınlocuirea pasului clasic de ˆ ıntoarcere la variabila anterioar˘ a cu un salt
la variabila responsabil˘ a efectiv de aparit ¸ia e¸ secului. Aceast˘ a tehnic˘ a poart˘ a
numele de Backjumping .

3.3. BACKJUMPING 43
Algorithm 3 Structura general˘ a a procedurii Backjumping
Rezultat: Variabila c˘ atre care va fi f˘ acut pasul de ˆ ıntoarcere, sau null dac˘ a
ret ¸eaua este inconsistent˘ a
ak= (x1=a1, …, x k−1=ak−1) este solut ¸ia part ¸ial˘ a curent˘ a
xkeste urm˘ atoarea variabil˘ a ce trebuie instant ¸iat˘ a
i=kindexul variabilei curente ( xi−1este candidatul la ˆ ıntoarcere)
Deste submult ¸imea variabilelor din {x1, …, x k−1}cu care xkparticip˘ a
m˘ acar la o constrˆ angere
while truedo
Restaureaz˘ a domeniul Dila valoarea init ¸ial˘ a
i=i−1
ifi= 0then
return null{Ret ¸eaua este inconsitent˘ a }
end if
ifxi/negationslash∈Dthen
continue{Dac˘ a xi¸ sixksunt independente schimbarea valorii lui xi
nu influent ¸eaz˘ a nimic }
end if
ai= (x1=a1, …, x i=ai)
ifisCompatible (ai, xk)then
return xi
end if
end while

44CAPITOLUL 3. REZOLVAREA RET ¸ELELOR DE CONSTR ˆANGERI
3.4 Backmarking
In sect ¸iunea anterioar˘ a am abordat problema minimiz˘ arii situat ¸iilor de tare-
inconsistent ¸˘ a ¸ si am descris schema general˘ a a algoritmilor de tip backjumping ,
ˆ ın care pasul de ˆ ıntoarcere se face la variabila a c˘ arei instant ¸iere curent˘ a este
responsabil˘ a cu e¸ secul obt ¸inut. Prin acest tip de algoritm elimin˘ am una din
problemele algoritmului general de backtracking ¸ si anume cea de munc˘ a ˆ ın
gol(”thrashing”), reducˆ and astfel dinamic dimensiunea spat ¸iului de c˘ autare
a solut ¸iilor.
O alt˘ a tehnic˘ a de optimizare a algoritmilor sistematici de c˘ autare este
cea de creare a unei structuri de date de tip cache ˆ ın care s˘ a fie memorate
informat ¸ii legate de incompatibilitatea unor anumite atribuiri de valori vari-
abilelor ret ¸elei, astfel ˆ ıncˆ at algoritmul s˘ a evite munca redundant˘ a , cu alte
cuvinte s˘ a evite crearea unor instant ¸e inconsistente dintr-un motiv care a
fost identificat la un pas anterior. Aceast˘ a tehnic˘ a se nume¸ ste backmarking .
FieR= (X,D,C) o ret ¸ea de constrˆ angeri, avˆ and variabilele X={x1, …, x n}.
S˘ a ne reamintim c˘ a algoritmul general de backtracking ˆ ıncearc˘ a instant ¸ierea
succesiv˘ a a variabilelor x1, …, x n¸ si, ˆ ın situat ¸ia ˆ ın care o solut ¸ie part ¸ial˘ a
(x1=a1, …, x k=ak)k < n nu mai poate fi extins˘ a, trebuie s˘ a fac˘ a un
pas ˆ ınapoi ¸ si s˘ a atribuie alt˘ a valoare lui xk−1, continuˆ and apoi ˆ ın aceea¸ si
manier˘ a. In cazul algoritmului de backjumping , revenirea se face la variabila
care a determinat efectiv e¸ secul curent, ˆ ıns˘ a acesat˘ a tehnic˘ a vine cu un cost
¸ si anume: identificarea variabilei responsabile. Folosind backmarking , vom
ret ¸ine situat ¸ia care a provocat conflictul ˆ ın a¸ sa fel ˆ ıncˆ at la pa¸ sii urm˘ atori ai
algoritmului s˘ a prevenim crearea instant ¸ierile care nu sunt consistente.
S˘ a presupunem c˘ a am instant ¸iat variabilele {x1, …, x k−1}, solut ¸ia part ¸ial˘ a
curent˘ a este ( x1=a1, …, x k−1=ak−1) ¸ si suntem ˆ ın situat ¸ia de a atribui o
valoarea variabilei xk, fie aceasta b. Este posibil ca aceasta s˘ a nu fie prima
tentativ˘ a de a extinde o solut ¸ie part ¸ial˘ a format˘ a din variabilele {x1, …, x k−1}
¸ si, ˆ ın tentativele anterioare o serie de incompatibilit˘ at ¸i au fost memorate.
Scopul algoritmului backmarking este de a preveni instant ¸ierea xk=bˆ ın
condit ¸iile ˆ ın care din informat ¸iile culese anterior putem deduce faptul c˘ a ea
nu este consistent˘ a.
Pentru aceasta vom folosi urm˘ atoarele structuri de date:
low Pentru fiecare x∈X, vom nota low(x) cel mai mic index al unei
variabile care ¸ si-a schimbat valoarea de la ultima vizit˘ a ˆ ın variabila x.
Init ¸ial low(x) = 0 ,∀x∈X.

3.5. ALGORITMI DE FILTRARE S ¸I PROPAGARE 45
x1 -> x2 -> x3 -> x4 x5 x6
x3 <-
x2 <- x3 <-
low(x3)=low(x4)=2
mark Dac˘ a xkeste variabila curent˘ a, pentru fiecare valoare b∈Dxk, vom
nota mark (xk, a) cel mai mic index pal unei variabile pentru care
instant ¸ierea part ¸ial˘ a ( x1=a1, …, x p=ap, xk=b) nu este consis-
tent˘ a. Dac˘ a atribuirea xk=beste consistent˘ a cu solut ¸ia curent˘ a,
atunci mark (xk, a) =k.
Revenind la situat ¸ia init ¸ial˘ a ¸ si folosind structurile de date de mai sus, la
instant ¸ierea variabilei curente xkputem elimina din domeniul lui xktoate
valorile b∈Dkpentru care:
low(xk)> mark (xk, b)
Explicat ¸ia este simpl˘ a. S˘ a not˘ am p=mark (xk, b), instant ¸ierea ( x1=
a1, …, x p=ap, xk=b) (conform definit ¸iei lui mark ) nu este consistent˘ a,
deci schimbarea valorii oric˘ arei variabile din mult ¸imea {xp+1, …, x k−1}nu are
cum s˘ a afecteze consistent ¸a intant ¸ierii ( x1=a1, …, x p=ap, …, x k=b). S ¸i
cumlow(xk)> p, concluzia este evident˘ a.
x1…………..xp…………low(xk)……….xk
x1…………..low(xk)……..xp…………..xk
3.5 Algoritmi de filtrare ¸ si propagare
In aceast˘ a sect ¸iune vom analiza o tehnic˘ a de reducere a spat ¸iului de c˘ autare
a solut ¸iilor.
Definit ¸ie 4 Spunem c˘ a o ret ¸ea R/prime= (X,D/prime,C/prime) este ”mai u¸ sor de rezol-
vat” decˆ at o ret ¸ea echivalent˘ a R= (X,D,C) ¸ si not˘ amR/prime/precedesequalR dac˘ a ¸ si numai
dac˘ a:
∀xi∈X|D/prime
i|≤|Di|

46CAPITOLUL 3. REZOLVAREA RET ¸ELELOR DE CONSTR ˆANGERI
Definit ¸ie 5 Un algoritm de filtrare este un algoritm care aplicat unei
ret ¸ele de constrˆ angeri R= (X,D,C) va reduce spat ¸iul de c˘ autare al acesteia,
transformˆ and-o ˆ ıntr-o ret ¸ea echivalent˘ a dar mai u¸ sor de rezolvat.
Deoarece un algoritm de filtrare determin˘ a transformarea ret ¸elei pentru
care a fost apelat, este natural s˘ a ˆ ıncerc˘ am repetarea acestuia atˆ at timp cˆ at
sunt obt ¸inute modific˘ ari asupra domeniilor sau constrˆ angerilor acesteia. Din
acest motiv, precum ¸ si datorit˘ a faptului c˘ a aplicarea lor este realizat˘ a dup˘ a
efectuarea unei schimb˘ ari a ret ¸elei (de exemplu, asignarea unei variabile ce
reduce domeniul acesteiea la valoarea atribuit˘ a), ace¸ stia mai sunt numit ¸i
algoritmi de propagare (a schimb˘ arii efectuate). Denumirea de ”filtrare” este
sugerat˘ a de faptul c˘ a reducerea spat ¸iului de c˘ autare se face prin eliminarea
de valori din domeniile variabilelor. ”Propagare” se refer˘ a la faptul c˘ a orice
schimbare a domeniilor sau constrˆ angerilor ret ¸elei determin˘ a la rˆ andul ei, ˆ ın
lant ¸, alte schimb˘ ari ce pot fi f˘ acute ¸ si care reduc ˆ ın continuare spat ¸iul de
c˘ autare al problemei.
Definit ¸ie 6 Un algoritm de filtrare-propagare este un algoritm format
din:
(F)ocomponent˘ a de filtrare Fresponsabil˘ a cu reducerea problemei.
(test)ocomponent˘ a de evaluare a ret ¸elei care va analiza starea ret ¸elei curente
obt ¸inut˘ a ˆ ın urma unei operat ¸iuni de filtrare;
(stop)unpredicat de oprire care va specifica dac˘ a este necesar˘ a reluarea algo-
ritmului de filtrare.
Componenta de evaluare trebuie s˘ a disting˘ a urm˘ aoarele situat ¸ii:
•succes – a fost identificat˘ a o solut ¸ie a ret ¸elei, de exemplu ˆ ın situat ¸ia ˆ ın
care toate domeniile au fost reduse la un singur element.
•inconsistent – nu exist˘ a nici o solut ¸ie bazat˘ a pe instant ¸ierea part ¸ial˘ a,
acest lucru fiind uzual dedus din reducerea domeniului unei variabile
la mult ¸imea vid˘ a;
•simplu – problema a fost redus˘ a pˆ an˘ a la un punct ˆ ın care exist˘ a al-
goritmi simpli, polinomiali de rezolvare ¸ si ace¸ stia vor fi folosit ¸i pentru
rezolvare;

3.5. ALGORITMI DE FILTRARE S ¸I PROPAGARE 47
•insuficent – instant ¸ierea curent˘ a nu ofer˘ a suficiente informat ¸ii pentru
a trage concluzia dac˘ a ea poate conduce la o solut ¸ie sau nu, caz ˆ ın care
trebuie s˘ a continu˘ am algoritmul de c˘ autare a solut ¸iilor.
Aplicarea unui algoritm de propagare P= (F, test, stop ) va fi realizat˘ a
astfel:
Algorithm 4
Intrare:R= (X,D,C) o ret ¸ea de constrˆ angeri, P= (F, test, stop ) un algo-
ritm de propagare
Rezultat: O solut ¸ie a ret ¸elei sau R/prime= (X,D/prime,C/prime) o ret ¸ea echivalent˘ a cu
proprietateaR/prime/precedesequalR sau∅dac˘ aReste inconsistent˘ a
stop =false
while stop =false do
R/prime←Aplic˘ a algoritmul Fret ¸eleiR
ifR=R/primethen
{Filtrarea nu a modificat ret ¸eaua }
return R
end if
iftest(R/prime) =inconsistent then
return∅
end if
iftest(R/prime) =succes then
return solut ¸ia luiR/prime
end if
iftest(R/prime) =simplu then
return rezolvarea luiR/prime
end if
{Insuficiente informat ¸ii – continu˘ am algoritmul }
Actualizeaz˘ a valoarea lui stop
R=R/prime
end while
return R’
A¸ sadar, ˆ ın urma execut ¸iei unui algoritm de propagare asupra unei ret ¸ele
Rpoate fi obt ¸inut unul din urm˘ atoarele rezultate:
•osolut ¸ie a ret ¸elei;

48CAPITOLUL 3. REZOLVAREA RET ¸ELELOR DE CONSTR ˆANGERI
•inconsistent ¸a ret ¸elei; ˆ ın aceast˘ a situat ¸ie este util˘ a ret ¸inerea unei explicat ¸ii
care s˘ a demonstreze inconsitent ¸a instant ¸ierii curente.
•oret ¸eaR/primeexchivalent˘ a cuRdar mai u¸ sor de rezolvat – algoritmul de
c˘ autare a solut ¸iilor va continua folosind domeniile ¸ si constrˆ angerile lui
R/prime
Din punctul de vedere al momentului aplic˘ arii lor, algoritmii de propagare
sunt:
•statici – sunt aplicat ¸i problemei init ¸iale o singur˘ a dat˘ a, ˆ ınainte de re-
zolvarea propriu-zis˘ a
•dinamici – sunt aplicat ¸i ˆ ın timpul procesului de rezolvare asupra sub-
problemei curente obt ¸inut˘ a din problema init ¸ial˘ a ˆ ın urma instant ¸ierii
unor variabile.
Diferent ¸a ˆ ıntre cele dou˘ a tipuri se refer˘ a la momentul ˆ ın care ace¸ stia sunt
apelat ¸i. De asemenea, ˆ ın cazul algoritmilor dinamici este necesar s˘ a ret ¸inem
starea curent˘ a a ret ¸elei astfelˆ ıncˆ at la executarea pasului deˆ ıntoarcere aceasta
s˘ a poat˘ a fi ref˘ acut˘ a corespunz˘ ator.
Schematic vorbind, includerea propag˘ arii ˆ ın cadrul unui algoritm sistem-
atic de c˘ autare a solut ¸iilor este descris˘ a de algoritmul 5.
Distingem urm˘ atoarele tipuri de algoritmi de filtrare:
•algoritmi bazat ¸i pe ad˘ augarea de constrˆ angeri deduse din mult ¸imea
celor existente;
•algoritmi generali de asigurare a arc-consistent ¸ei;
•algoritmi dedicat ¸i de filtrare, specifici fiec˘ arei probleme ˆ ın parte.
3.6 Arc-consistent ¸a
FieR= (X,D,C) o ret ¸ea de constrˆ angeri oarecare, unde X={x1, …, x n},
D={D1, …, D n}.
Definit ¸ie 7 Spunem c˘ a o variabil˘ a xi∈Xeste arc-consistent˘ a referitor
la o variabil˘ a xj∈Xdac˘ a ¸ si numai dac˘ a pentru orice valoare ai∈Diexist˘ a o
valoare aj∈Djastfel ˆ ıncˆ at instant ¸ierea part ¸ial˘ a {< x i, ai>, < x j, aj>}este

3.6. ARC-CONSISTENT ¸A 49
Algorithm 5 Includerea algoritmilor de propagare
Intrare:R= (X,D,C) o ret ¸ea de constrˆ angeri, PSo mult ¸ime de algoritmi
statici de propagare, PDo mult ¸ime de algoritmi dinamici de propagare.
Rezultat: Solut ¸ia (solut ¸iile) ret ¸elei R
for all P∈P Sdo
R← Aplic˘ a algoritmul Pret ¸eleiR
end for
while Sunt c˘ autate solut ¸ii do
{Pasul de ˆ ınaintare (Forward) }
Memoreaz˘ a starea ret ¸elei
A fost realizat˘ a o instant ¸iere xi=a
Reducem domeniul lui xi:Di={a}
for all P∈P Ddo
R← Aplic˘ a algoritmul Pret ¸eleiR
end for
{Pasul de ˆ ıntoarcere (Backward) }
Restaureaz˘ a starea ret ¸elei
end while

50CAPITOLUL 3. REZOLVAREA RET ¸ELELOR DE CONSTR ˆANGERI
consistent˘ a. Dac˘ a Di=∅vom considera c˘ a xieste arc-consistent˘ a relativ la
orice alt˘ a variabil˘ a.
Cu alte cuvinte, din perspectiva execut ¸iei algoritmului de backtracking,
atribuind valoarea aivariabilei xinu vom produce o situat ¸ie de inconsistent ¸˘ a
care s˘ a necesite efectuarea pasului ˆ ınapoi.
O ret ¸ea este arc-consistent˘ a dac˘ a ¸ si numai dac˘ a ∀x, y∈X,xeste arc-
consistent˘ a relativ la y¸ siyeste arc-consistent˘ a relativ la x. In mod evident,
dac˘ a o ret ¸ea nu este arc-consistent˘ a atunci ea nu are nici o solut ¸ie.
A¸ sadar, arc-consistent ¸a este o proprietate important˘ a pe care ar trebui
s˘ a o aib˘ a o ret ¸ea de constrˆ angeri astfel ˆ ıncˆ at algoritmii de explorare de tip
backtrack s˘ a poat˘ a reduce num˘ arul de atribuiri gre¸ site.
Deoarece arc-consistent ¸a analizeaz˘ a ret ¸eaua la nivelul subret ¸elelor de cˆ ate
dou˘ a variabile, ea mai este numit˘ a ¸ si 2-consistent ¸˘ a .
3.6.1 Algoritmul de proiect ¸ie
Algorithm 6 Construie¸ ste proiect ¸ia unei relat ¸ii pe o mult ¸ime de variabile
Intrare: Ro relat ¸ie peste mult ¸imea de variabile X={x1, …, x n},S=
{xi1, …, x it}o submult ¸ime a lui X
Rezultat: Proiect ¸ia lui RpeS:πS(R)
πS(R) =∅
for all a= (a1, …a n)∈Rdo
πS(R) =πS(R)∪{(ai1, …, a ik)}
end for
return πS(R)
Complexitatea algoritmului de proiect ¸ie este O(|S|t), unde teste num˘ arul
de tuple al relat ¸iei.
3.6.2 Construct ¸ia unei subret ¸ele cu dou˘ a variabile
O ret ¸ea de constrˆ angeri avˆ and doar dou˘ a variabile poate fi identificat˘ a cu
relat ¸ia peste cele dou˘ a variabile format˘ a din reuniununea tuturor relat ¸iilor
constrˆ angerii ret ¸elei.
Folosind operatorii de la relat ¸ii, putem scrie:

3.6. ARC-CONSISTENT ¸A 51
Algorithm 7 Construie¸ ste o subret ¸ea cu dou˘ a variabile
Intrare:R= (X,D,C) o ret ¸ea de constrˆ angeri, xi, xj∈Xdou˘ a variabile
distincte
Rezultat: Relat ¸ia Rijformat˘ a din perechile de valori admise pentru vari-
abilele xi, xj.
Rij=∅
for all C=< S, R >∈Cdo
Rij=Rij∪πxixj(R)
end for
return Rij
Rij=/uniontext{πxixj(R)|R∈C}
Complexitatea algoritmului este O(et), unde e=|C|iarteste marginea
superioar˘ a a num˘ arului de tuple din fiecare constrˆ angere a ret ¸elei R.
3.6.3 Testarea arc-consistent ¸ei
Algorithm 8 AC-Test – Testeaz˘ a arc-consistent ¸a unei ret ¸ele
Intrare:R= (X,D,C) o ret ¸ea de constrˆ angeri
Rezultat: true dac˘ a ret ¸eaua este arc-consistent˘ a, altfel false
for all xi∈Xdo
for all a∈Dido
for all C=< S, R >∈C,xi∈Sdo
ifa/negationslash∈πxi(R)then
return false
end if
end for
end for
return true
end for
Propozit ¸ie 2 Complexitatea algoritmului de testare a arc-consistent ¸ei
esteO(ek2t), unde keste marginea superioar˘ a a dimensiunilor domeniilor,
e=|C|iarteste marginea superioar˘ a a num˘ arului de tuple din fiecare con-
strˆ angere.

52CAPITOLUL 3. REZOLVAREA RET ¸ELELOR DE CONSTR ˆANGERI
Demonstrat ¸ia rezult˘ a imediat din faptul c˘ a num˘ arul maxim de valori pe
care le pot lua variabilele ret ¸elei este ekiar pentru fiecare instant ¸iere < x i, a >
efectu˘ am eteste pentru a determina dac˘ a este satisf˘ acut˘ a arc-consistenta,
fiecare dintre acestea apelˆ and procedura de proiect ¸ie care se face ˆ ın O(t).
Vom descrie ˆ ın continuare o serie de algoritmi prin intermediul c˘ arora
putem obt ¸ine, plecˆ and de la o ret ¸ea oarecare, o ret ¸ea echivalent˘ a care s˘ a aib˘ a
proprietatea de arc-consistent ¸˘ a, dac˘ a acest lucru este posibil. Ideea general˘ a
a acestor algoritmi se bazeaz˘ a pe ”corectarea” domeniilor de definit ¸ie ale vari-
abilelor prin eliminarea unor valori incompatibile ale acestora, reducˆ andu-le
astfel ˆ ıncˆ at s˘ a fie atins˘ a arc-consistent ¸a.
3.6.4 Procedura de reducere a domeniilor Revise
Procedura Revise (corectare, revizuire) are ca intrare o ret ¸ea de constrˆ angeri
R= (X,D,C) ¸ si dou˘ a variabile distincte xi, xj∈X, avˆ and ca rezultat reduc-
erea domeniului Dide definit ¸ie a lui xiastfel ˆ ıncˆ at xis˘ a fie arc-consistent˘ a
relativ la xj.
Algorithm 9 Revise – Asigur˘ a arc-consistent ¸a lui xirelativ la xj
Intrare:R= (X,D,C) o ret ¸ea de constrˆ angeri, xi, xj∈X,xi/negationslash=xj
Rezultat: Reducerea domeniului Diastfel ˆ ıncˆ at xis˘ a fie arc-consistent˘ a
relativ la xj; dac˘ a domeniul a fost redus, returneaz˘ a true , altfel false .
Rij=/uniontext{πxixj(R)|R∈C}
{Rijeste relat ¸ia perechilor de valori permise pentru xi, xj}
revised =false
for all ai∈Dido
if/negationslash∃aj∈Djastfel ˆ ıncˆ at ( ai, aj)∈Rijthen
Di=Di−{ai}
revised =true
end if
end for
return revised
Folosind operatorii de la relat ¸ii, restrˆ angerea lui Dipoate fi scris˘ a sub

3.6. ARC-CONSISTENT ¸A 53
forma: Di=Di∩πxi(Rij)
Propozit ¸ie 3 Complexitatea algoritmului de corect ¸ie Revise esteO(et+
k2), unde keste marginea superioar˘ a a dimensiunilor domeniilor iar e=|C|.
Demonstrat ¸ia const˘ a ˆ ın faptul c˘ a, ˆ ın cel mai defavorabil caz, fiecare val-
oare din Dieste testat˘ a ˆ ımpreun˘ a cu fiecare valoare Dj, cee ce conduce la
cel mult|Di||Dj|≤k2operat ¸ii. La acestea se mai adaug˘ a complexitatea
operatorului de proiect ¸ie necesar calcul˘ arii relat ¸iei Rij, care este O(et), fiind
necesar˘ a parcuregerea tuturor constrˆ angerilor ret ¸elei.
In ret ¸elele binare, deoarece nu mai trebuie s˘ a execut˘ am operat ¸ia de proiect ¸ie,
complexitatea va fi O(k2).
3.6.5 Algoritmul de arc-consistent ¸˘ a AC-1
Algoritmul prezentatˆ ın continuare const˘ aˆ ın satisfacerea brut˘ a a arc-consistent ¸ei
unei ret ¸ele prin aplicarea repetat˘ a a procedurii de reducere a domeniilor pen-
tru fiecare pereche de variabile.
Algorithm 10 AC-1 – Asigur˘ a arc-consistent ¸a unei ret ¸ele
Intrare:R= (X,D,C) o ret ¸ea de constrˆ angeri
Rezultat: O ret ¸ea arc-consistent˘ a R/primeechivalent˘ a cuR
R/prime=R
repeat
for all xi, xj∈X,xi/negationslash=xjparticip˘ a la o constrˆ angere do
Revise (R/prime, xi, xj)
Revise (R/prime, xj, xi)
end for
until nici un domeniu din R/primenu mai este modificat
returnR/prime
Trebuie observat faptul c˘ a o singur˘ a aplicare a reducerilor pentru toate
perechile de variabile nu este suficient˘ a, motivat ¸ia fiind urm˘ atoarea: dup˘ a
apelurile Revise (R/prime, xi, xj) ¸ siRevise (R/prime, xj, xi) variabilele xi¸ sixjvor fi arc-
consistente una relativ la cealalt˘ a, dar la un pas ulterior una din aceste
variabile ˆ ı¸ si poate schimba domeniul ca urmare a satisfacerii arc-consistent ¸ei
cu o alt˘ a variabil˘ a, ceea ce ˆ ınseamn˘ a c˘ a arc-consistent ¸a lor nu mai este sigur˘ a.

54CAPITOLUL 3. REZOLVAREA RET ¸ELELOR DE CONSTR ˆANGERI
In cazul ˆ ın care ˆ ın urma aplic˘ arii algoritmului domeniul vreunei variabile
devine vid, atunci ret ¸eaua este inconsistent˘ a.
Propozit ¸ie 4 Dat˘ a o ret ¸eaR= (X,D,C), avˆ and|X|=n,|C|=e
¸ si dimensiunile domeniilor marginite de k, complexitatea algoritmului AC-1
aplicat ret ¸eleiResteO((et+k2)n2ek).
Justificarea complexit˘ at ¸ii este urm˘ atoarea: apelul procedurii Revise este
realizat˘ a ˆ ın O(et+k2) timp, acesta fiind executat de n(n−1)/2 ori, deci
ˆ ınO(n2) timp. Cum, ˆ ın cel mai r˘ au caz, la fiecare pas va fi eliminat˘ a cˆ ate
o singur˘ a valoare a unui domeniu, bucla repetitiv˘ a se va executa de O(ek)
ori (acesta fiind num˘ arul maxim de valori), deci complexitatea total˘ a va fi
O((et+k2)(n2)(ek)).
In ret ¸elele binare, deoarece num˘ arul perechilor de variabile este de or-
dinul num˘ arului de constrˆ angeri ¸ si operat ¸ia de reducere se face ˆ ın O(k2),
complexitatea algoritmului AC-1 va fi O(e2k3).
Algoritmul AC-1 nu este foarte eficient din cauza aplic˘ arilor repetate ale
procedurii de reducere chiar ˆ ın situat ¸ia ˆ ın care acest lucru nu este necesar.
S˘ a ne gˆ andim doar la situat ¸ia ˆ ın care doar domeniul unei variabile a fost
modificat iar algoritmul este reluat ¸ si va executa revizuirea domeniilor, din
nou, pentru toate perechile de variabile. A¸ sadar, AC-1 poate fi ˆ ımbun˘ at˘ at ¸it.
O prim˘ a variant˘ a de ˆ ımbun˘ at˘ at ¸ire este algoritmul AC-2 pe care, datorit˘ a
similitudinii cu AC-1 nu ˆ ıl vom mai prezenta.
3.6.6 Algoritmul de arc-consistent ¸˘ a AC-3
Ideea pe care se bazeaz˘ a AC-3 este memorarea perechilor de variabile pe
care este necesar s˘ a le test˘ am dup˘ a executarea unui pas complet de reduceri.
Astfel, vom folosi o structur˘ a de date de tip list˘ a ˆ ın care vom plasa init ¸ial
toate perechile de variabile ( xi, xj),(xj, xi) care urmeaz˘ a s˘ a fie procesate,
ˆ ıntocmai ca la primul pas din AC-1. Dup˘ a procesarea unei perechi ( xi, xj),
aceasta va fi eliminat˘ a din stiv˘ a, fiind reintrodus˘ a ulterior doar dac˘ a domeniul
luixja fost redus ˆ ın urma test˘ arii unei perechi de forma ( xj, xp), p/negationslash=i
Propozit ¸ie 5 Dat˘ a o ret ¸eaR= (X,D,C), avˆ and|X|=n,|C|=e
¸ si dimensiunile domeniilor marginite de k, complexitatea algoritmului AC-3

3.6. ARC-CONSISTENT ¸A 55
Algorithm 11 AC-3 – Asigur˘ a arc-consistent ¸a unei ret ¸ele
Intrare:R= (X,D,C) o ret ¸ea de constrˆ angeri
Rezultat: O ret ¸ea arc-consistent˘ a R/primeechivalent˘ a cuR
R/prime=R
queue =∅
for all xi, xj∈X,xi/negationslash=xjparticip˘ a la o constrˆ angere do
queue =queue∪{(xi, xj),(xj, xi)}
end for
while queue/negationslash=∅do
Select˘ am o pereche ( xi, xj) din lista queue
queue =queue−{(xi, xj)}
revised =Revise (R/prime, xi, xj)
ifrevised then
{Domeniu D/prime
ia fost redus}
queue =queue∪{(xi, xk)|k/negationslash=i}
end if
end while
returnR/prime
aplicat ret ¸eleiResteO(max(n2, ek)ek2).
Pentru a demonstra acest lucru s˘ a ne reamintim c˘ a apelul procedurii
Revise este realizat˘ a ˆ ın O(ek2) timp. R˘ amˆ ane s˘ a calcul˘ am num˘ arul maxim
de iterat ¸ii al buclei while . Init ¸ial avem O(n2) perechi de variabile ˆ ın lista
queue . La fiecare pas, o pereche dintre acestea este eliminat˘ a, singura situat ¸ie
ˆ ın care aceasta ar putea fi reintrodus˘ a fiind ceaˆ ın care domeniul unei variabile
este redus cu cel put ¸in o valoare. Avˆ and ˆ ın vedere faptul c˘ a sunt maxim
ekvalori ˆ ın reuniunea tuturor domeniilor, iterat ¸ia va fi f˘ acut˘ a de cel mult
O(max(n2, ek)).
In ret ¸elele binare, deoarece num˘ arul perechilor de variabile este de or-
dinul num˘ arului de constrˆ angeri ¸ si operat ¸ia de reducere se face ˆ ın O(k2),
complexitatea va fi O(ek3).
3.6.7 Algoritmul de arc-consistent ¸˘ a AC-4
Folosind eficient o serie de structuri de date pentru reprezentarea informat ¸iilor
necesare ˆ ın obt ¸inerea arc-consistent ¸ei poate fi elaborat un algoritm avˆ and

56CAPITOLUL 3. REZOLVAREA RET ¸ELELOR DE CONSTR ˆANGERI
complexitatea O(ek2).
Avˆ andˆ ın vedere c˘ a doar pentru a verifica dac˘ a o ret ¸ea este arc-consistent˘ a
sunt necesare O(ek2) operat ¸ii, algoritmul AC-4 este optimal.
Mai multe detalii legate de acest algoritm vor fi discutate ˆ ın capitolul
”Explicat ¸ii”.
3.7 Constrˆ angeri globale
Definit ¸ie 8 FieC={C1, …, C k}o mult ¸ime de constrˆ angeri. Numim con-
strˆ angere global˘ a constrˆ angerea CGdefinit˘ a sub forma unei conjunct ¸ii ˆ ıntre
constrˆ angerile mult ¸imii C:
CG=C1∧C2∧…∧Ck
Dac˘ a not˘ am cu X(C) mult ¸imea tuturor variabilelor constrˆ angerilor din C
¸ siD(C) familia tuturor domeniilor variabilelor din X(C), mult ¸imea tuplelor
luiCGeste egal˘ a cu solut ¸ia ret ¸elei ( X(C),D(C),{C1, …, C k}).
Observat ¸ie
FieR= (X,D,C) o ret ¸ea, unde X={x1, …, x n},C={C1, …, C m}¸ si fie
CG=C1∧C2∧…∧Cm. Ret ¸eleleR¸ siR/prime= (X,D,{CG}) sunt echivalente.
Avantajele folosirii constrˆ angerilor globale sunt:
•Expresivitate – este mai convenabil s˘ a definim o singur˘ a constrˆ angere
care s˘ a reprezinte un anumit lucru, decˆ at ca acesta s˘ a reias˘ a ca o con-
cluzie a mai multor constrˆ angeri. De exemplu, o constrˆ angere de tip
alldiff ce specific˘ a faptul c˘ a toate variabilele unei ret ¸ele trebuie s˘ a ia
valori diferite are o semnificat ¸ie ¸ si o implementare standard indiferent
de tipul ret ¸elei.
•Filtrare superioar˘ a – introducerea constrˆ angerilor globale poate avea
impact asupra algoritmilor de filtrare, cum ar fi cel de arc-consistent ¸˘ a,
reducˆ and spat ¸iul de c˘ autare a solut ¸iilor.
FieR= (X,D,C) o ret ¸ea, unde X={x, y, z},Dx=Dy=Dz={0,1}
iarC={x/negationslash=y, y/negationslash=z, z/negationslash=x}. Aplicˆ and algoritmul clasic de arc-
consistent ¸˘ a nu vom obt ¸ine nici un rezultat deoarece oricum am alege

3.7. CONSTR ˆANGERI GLOBALE 57
dou˘ a variabile, s˘ a spunem x¸ siy, pentru orice valoare a∈Dxexist˘ a o
valoare b= 1−a∈Dyastfel ˆ ıncˆ at instant ¸ierea part ¸ial˘ a {< x, a >, <
y, b >}este consistent˘ a (cele dou˘ a variabile sunt arc-consistente una
relativ la cealalt˘ a). Dac˘ a ad˘ aug˘ am ˆ ıns˘ a ¸ si constrˆ angerea CG=x/negationslash=
y∧y/negationslash=z∧z/negationslash=xalgoritmul de filtrare va detecta imediat inconsistent ¸a
ret ¸elei. Singura problem˘ a care apare ˆ ın aceast˘ a abordare este, ˆ ın mod
evident, complexitatea verific˘ arii constrˆ angerii globale.
•Descompunerea unei ret ¸ele – gruparea unor constrˆ angeri ˆ ıntr-o form˘ a
global˘ a presupune rezolvarea subret ¸elei create astfel ˆ ıncˆ at s˘ a putem
determina tuplele ce formeaz˘ a constrˆ angerea global˘ a. In urma acestui
proces putem determina inconsistent ¸a ret ¸elei.
Pentru a exemplifica situat ¸ia de mai sus, s˘ a consider˘ am un alt exemplu,
similare celui precedent. Fie R= (X,D,C) o ret ¸ea, unde X={x, y, z},
Dx=Dy=Dz={0,1}iarC={x/negationslash=y, y/negationslash=z, z/negationslash=x, f xy, fyz, fxz},f
fiind o funct ¸ie de tip oracol cu complexitate mare de calcul. Aplicˆ and
un algoritm sistematic de c˘ autare vom fi nevoit ¸i s˘ a calcul˘ am funct ¸ia
fcel put ¸in o dat˘ a, lucru inutil deoarece Reste evident inconsistent˘ a.
Dac˘ a rescriem ˆ ıns˘ a ret ¸eaua sub forma R= (X,D,{CG, fxy, fyz, fxz}),
unde CG=x/negationslash=y∧y/negationslash=z∧z/negationslash=x, atunci ˆ ın urma calculului tuplelor
constrˆ angerii CGvom obt ¸ine c˘ a ea este vid˘ a, ceea ce ˆ ınseamn˘ a evident
c˘ a ret ¸eaua este inconsistent˘ a.
Definit ¸ie 9 FieR= (X,D,C) o ret ¸ea de constrˆ angeri, C={C1, C2, …, C m}
¸ siCG=C1∧C2∧…∧Cmconstrˆ angerea global˘ a corespunz˘ atoare. Spunem c˘ a
un algoritm de filtrare este pertinent dac˘ a, aplicat ret ¸elei R/prime= (X,D,{CG}),
poate reduce mai mult spat ¸iul de c˘ autare al solut ¸iilor fat ¸˘ a de aplicarea lui pe
R.
3.7.1 Exemple de constrˆ angeri globale
AllDiff
Constrˆ angerile de tip alldiff impun ca valorile uni mult ¸imi de variabile
s˘ a fie distincte dou˘ a cˆ ate dou˘ a. In cazul ˆ ın care se refer˘ a la toate variabilele
ret ¸elei, o constrˆ angere alldiff mai este referit˘ a sub numele de permutation .
alldiff (X) ˆ ın orice solut ¸ie a ret ¸elei variabilele din Xtrebuie s˘ a fie diferite.

58CAPITOLUL 3. REZOLVAREA RET ¸ELELOR DE CONSTR ˆANGERI
AtLeast, AtMost
atleast (X,#time, val ) /atmost (X,#time, val ) – ˆ ın orice solut ¸ie a ret ¸elei
variabilele din Xtrebuie s˘ a aib˘ a ca valoare pe valde cel put ¸in / cel mult un
num˘ a specificat de ori.
Global Cardinality Constraints (GCC)
gcc(X, l, u ) Fiec˘ arei valori aidinD(X(C)) ˆ ıi sunt asociate valorile li¸ siui.
In orice solut ¸ie, pentru orice valoare aia unei variabile din X, num˘ arul ei de
aparit ¸ii trebuie s˘ a fie ˆ ın intervalul [ ui, li].
3.7.2 AllDiff
FieX={x1, …, x n}. Complexitatea verific˘ arii constrˆ angerii alldiff (X) este
(n−1) +…+ 1 = O(n2). Un algoritmul de filtrare trebuie s˘ a elimine valorile
din domeniile variabilelor lui Xcare sigur nu pot face parte dintr-o solut ¸ie.
Exemplu: Dx={1,2,3,4}, Dy={1,2}, Dz={1,2}. Un algoritm de filtrare
corespunz˘ ator pentru alldiff trebuie s˘ a elimine valorile 1 ,2 din domeniul lui
x.
Graful valorilor [33] asociat unei constrˆ angeri Ceste un graf bipartit
G= (X, Y, E ) definit astfel:
•X=X(C) – variabilele care participl˘ a ˆ ın constrˆ angerea C
•Y=D(X(C)) – valorile care pot fi atribuite variabilelor din X(C)
•(x, a)∈E⇔a∈D(x)
Teorema 1 [26] Fie G= (V, E)un graf bipartit, avˆ and |V|=n¸ si|E|=m.
Exist˘ a un algoritm de complexitate O(√nm)pentru determinarea unui cuplaj
maximal al grafului G.
Propozit ¸ie 6 FieCo constrˆ angere de tip alldiff ¸ siGV(C) graful valorilor
asociat. Un cuplaj care acoper˘ a mult ¸imea X(C) corespunde unei tuple din
C.
Propozit ¸ie 7 O constrˆ angere Cde tip alldiff este consistent˘ a dac˘ a ¸ si
numai dac˘ a ˆ ın graful valorilor GV(C) asociat exist˘ a un cuplaj care acoper˘ a
mult ¸imea X(C).

3.7. CONSTR ˆANGERI GLOBALE 59
Propozit ¸ie 8 O variabil˘ a x∈X(C) este consistent˘ a relativ la Cdac˘ a ¸ si
numai dac˘ a exist˘ a o muchie ( x, a) care s˘ a apart ¸in˘ a unui cuplaj care acoper˘ a
mult ¸imea X(C), din graful valorilor GV(C).
Propozit ¸ie 9 [4] O muchie apart ¸ine unor cuplaje maxime dar nu tuturor
cuplajelor maxime dac˘ a ¸ si numai dac˘ a pentru un cuplaj maxim oarecare ea
apart ¸ine unui drum alternat de lungime par˘ a care ˆ ıncepe ˆ ıntr-un nod liber
sau unui circuit alternat de lungime par˘ a.
Propozit ¸ie 10 Dat un graf bipartit G= (X, Y, E ) ¸ si un cuplaj maxim M
care acoper˘ a X. Fie A={a∈Y|a liber}¸ siA=Y−B={a∈Y|a saturat}.
Construim graful orientat O(G, M ) = (X∪Y∪{s}, E/prime) obt ¸inut din Gastfel:
•ad˘ aug˘ am un nou vˆ arf sgrafului G
•ad˘ aug˘ am muchii ˆ ıntre toate nodurile din B¸ sis
•ad˘ aug˘ am muchii ˆ ıntre s¸ si toate nodurile din A
•orient˘ am muchiile din Mde la nodul din Yc˘ atre cel din X
•orient˘ am muchiile din E−Mde la nodul din Xc˘ atre cel din Y
•orient˘ am muchiile de la Bc˘ atre s
Fie (x, a)/negationslash∈M(aeste nod liber ˆ ın Y). Atunci ( x, a) apart ¸ine unui drum
alternat de lungime par˘ a care ˆ ıncepe ˆ ıntr-un nod liber dac˘ a ¸ si numai dac˘ a a
¸ sisapart ¸in unei componente tare conexe a grafului orientat O(G, M ).
Demonstrat ¸ie
(⇒)Toate nodurile din Xfiind saturate, orice drum alternat de lungime
par˘ a careˆ ıncepeˆ ıntr-un nod liber este de tipul: D= (a, x 1, b1, x2, b2, …, x k, bk),
unde a∈A, x i∈X, b i∈B,∀i= 1, k, apartenent ¸a muchiilor la cuplajul M
fiind: ( a, x 1)/negationslash∈M, (xi, bi)∈M,∀i= 1, k, (bi, xi+1)/negationslash∈M,∀i= 1, k. Tinˆ and
cont de orientarea arcelor ˆ ın O(G, M ) se fa forma un drum de la alas.
Avˆ and ˆ ın vedere c˘ a ( s, a)∈E/prime,a¸ sisfac parte din aceea¸ si component˘ a tare
conex˘ a a grafului O(G, M ).

60CAPITOLUL 3. REZOLVAREA RET ¸ELELOR DE CONSTR ˆANGERI
(⇐) Dac˘ a exist˘ a un drum de la alas, atunci t ¸inˆ and cont de construct ¸ia
luiO(G, M ) putem trage concluzia c˘ a arcele drumului (exceptˆ and ultimul)
formeaz˘ a ˆ ın Gun drum alternat de lungime par˘ a.
FieG= (X, Y, E ) un graf bipartit ¸ si un cuplaj maxim Mcare acoper˘ a X.
T ¸ inˆ and cont de ultimele dou˘ a afirmat ¸ii ¸ si de faptul c˘ a ˆ ın Gnici un nod liber
nu poate face parte dintr-un circuit alternat obt ¸inem urm˘ atorul algoritm de
filtrare pentru o constrˆ angere Cde tip alldiff :
1.Determinarea unui cuplaj maxim Mˆ ınG. Dac˘ a|M|<|X|atunci
constrˆ angerea nu este consistent˘ a. Dac˘ a not˘ am |X|=n,|Y|=d,|E|=
m, complexitatea acestui pas este O(√nm).
2.Construct ¸ia grafului orientat O(G, M )
3.Determinarea componentelor tari conexe ale lui O(G, M ). Complexi-
tatea este O(m+n+d).
4.Pentru fiecare nod liber a, dac˘ a a¸ sisnu sunt ˆ ın aceea¸ si component˘ a
tare conex˘ a, elimin˘ a pe adin domeniile variabilelor constrˆ angerii C.
Complexitatea acestui pas este de asemenea O(m+n+d).
S˘ a analiz˘ am ˆ ın continuare eficient ¸a algoritmului de filtrare pentru alldiff ,
cu alte cuvinte care este impactul aplic˘ arii sale asupra domeniilor variabilelor
constrˆ angerii. Fie X={x1, …, x 2k}o mult ¸ime de n= 2kvariabile avˆ and
urm˘ atoarele domenii:
•pentru 1 <=i <=k:D(xi) ={2[(i−1)/2] + 1 ,2[(i−1)/2] + 2}
•pentru k < i < =n:D(xi) ={1, …, n}
De exemplu, pentru n= 8 vom avea D(x1) =D(x2) ={1,2},D(x3) =
D(x4) ={5,6},D(x5) =D(x6) =D(x7) =D(x8) ={1, …,8}.
Aplicˆ and algoritmul de filtrare, toate valorile din domeniile variabilelor
de la x1laxkvor fi eliminate din domeniile variabilelor {xk+1, …, x n}, ceea
ce ˆ ınseamn˘ a O(k2) =O(n2) reduceri.

3.7. CONSTR ˆANGERI GLOBALE 61
3.7.3 Global Cardinality Constraint (GCC)
O constrˆ angere de tip gccimpune restrict ¸ii asupra num˘ arului de asign˘ ari ale
unei valori pentru variabile dintr-o anumit˘ a mult ¸ime ˆ ın cadrul unei solut ¸ii.
S˘ a exprim˘ am formal acest lucru. Fie X={x1, …, x n}o mult ¸ime de variabile
¸ sil={l1, …, l m}, u={u1, …, u m}o mult ¸ime de valori asociate fiec˘ arui ele-
ment din reuniunea D(X) ={a1, …, a m}a domeniilor variabilelor din X. O
constrˆ angere C=gcc(X, l, u ) impune ca ˆ ın orice solut ¸ie a ret ¸elei din care C
face parte, pentru orice valoare ai∈D(X), num˘ arul ei de aparit ¸ii ca valoare
a unei variabile din Xtrebuie s˘ a fie ˆ ın intervalul [ ui, li]. Dac˘ a not˘ am cu
T(X) =×{Dx|x∈X}mult ¸imea tuplelor care pot fi asignate variabilelor
dinX, ¸ si #( a, t) num˘ arul de aparit ¸ii a unei valori aˆ ıntr-o tupl˘ a t∈T(X),
putem scrie:
C={t∈T(X)|∀a∈D(X) :li≤#(ai, t)≤ui}.
Dup˘ a cum este u¸ sor de observat, constrˆ angerea alldiff este o particu-
larizare a gccˆ ın care limitele superioare ¸ si inferioare sunt egale cu 1.
S˘ a analiz˘ am cum putem aborda problema test˘ arii consistent ¸ei unei con-
strˆ angeri gcc¸ si a implement˘ atii unui algoritm de filtrare.
FieG= (V, E) un digraf. Asociem fiec˘ arui arc ijal digrafului dou˘ a valori
lij, respectiv uij, avˆ and semnificat ¸ia de capacitate minim˘ a, respectiv maxim˘ a
a arcului: l, u:E→R+, lij≤uij,∀ij∈E.
Definit ¸ie 10 ([9]) Se nume¸ ste circulat ¸ie ˆ ınGorice funct ¸ie f:E→R
astfel ˆ ıncˆ at:
∀i∈V/summationtext
j:ji∈Ecji−/summationtext
j:ij∈Ecij= 0
O circulat ¸ie cse nume¸ ste admisibil˘ a dac˘ a∀ij∈E lij≤xij≤uij.
F˘ ar˘ a a restrˆ ange generalitatea, vom presupune ˆ ın continuare c˘ a ˆ ıntre ori-
care dou˘ a vˆ arfuri ale digrafului exist˘ a cel mult un arc.
Teorema 2 (Hoffman-Gale) Fie G= (V, E)un digraf ¸ si l, u:E→R+, lij≤
uij,∀ij∈E. Exist˘ a o circulat ¸ie admisibil˘ a ˆ ın Gdac˘ a ¸ si numai dac˘ a ∀(S, T)
partit ¸ie a lui Vavem:
/summationtext
i∈S,j∈Tlij≤/summationtext
i∈T,j∈Suij

62CAPITOLUL 3. REZOLVAREA RET ¸ELELOR DE CONSTR ˆANGERI
(ˆ ın expresia de mai sus se subˆ ınt ¸elege ij∈E)
Definit ¸ie 11 FieC=gcc(X, l, u ) o constrˆ angere de tip gcc. Definim
ret ¸eaua valorilor luiCca fiind digraful N(C) obt ¸inut din graful valorilor
GV(C) astfel ([44]):
•orient˘ am muchiile lui GV(C) de la valori c˘ atre variabile; pentru fiecare
astfel de arc axset˘ am lax= 0 ¸ si uax= 1.
•ad˘ aug˘ am un nod s¸ si arce de la sc˘ atre fiecare nod valoare; pentru
fiecare astfel de arc lsai=li¸ siusai=ui.
•ad˘ aug˘ am un nod t¸ si arce de la fiecare nod variabil˘ a c˘ atre t; pentru
fiecare astfel de arc lxt=uxt= 1.
•ad˘ aug˘ am un arc ( t, s) avˆ and lts=uts=|X|.
Propozit ¸ie 11 FieC=gcc(X, l, u ) ¸ siN(C) ret ¸eaua valorilor asociat˘ a.
Urm˘ atoarele dou˘ a propriet˘ at ¸i sunt echivalente:
1.Constrˆ angerea Ceste consistent˘ a.
2.Exist˘ a un o circulat ¸ie admisibil˘ a ˆ ın N(C).
Demonstrat ¸ie
(1⇒2) In cazul ˆ ın care constrˆ angerea Ceste consistent˘ a, atunci exist˘ a
o tupl˘ a q= (< x 1=a1>, …, < x n=an>)∈T(X) cu proprietatea c˘ a
∀a∈D(X) :li≤#(ai, q)≤ui.
Definim urm˘ atoarea circulat ¸ie f:E(N(C))→R+:
•f(aixi) = 1,∀i=1, n
•f(sai) = #( ai, q),∀i=1, n
•f(xit) = 1,∀i=1, n
•f(ts) =n

3.7. CONSTR ˆANGERI GLOBALE 63
Dup˘ a cum se poate u¸ sor observa, circulat ¸ia feste admisibil˘ a.
(2⇒1) In cazul ˆ ın care exist˘ a o circulat ¸ie fadmisibil˘ a ˆ ın N(C) atunci
tupla q= (< x 1=a1>, …, < x n=an>), unde aisunt valorile pentru care
f(aixi) = 1, satisface constrˆ angerea C, deci Ceste consistent˘ a.
In cazul general, folosind teorema lui Hoffman-Gale ¸ si algoritmul lui
Edmonds-Karp de determinare a unui flux maxim ˆ ıntr-o ret ¸ea, problema
test˘ arii existent ¸ei unei circulat ¸ii admisibile pentru un digraf poate fi rezol-
vat˘ a ˆ ın O(m3n) [9]. Pentru structura special˘ a a digrafului N(C) poate fi ˆ ıns˘ a
conceput un algoritm care s˘ a determine ˆ ın O(nm) existent ¸a unei circulat ¸ii
admisibile.
Definit ¸ie 12 Graful rezidual al unei circulat ¸ii f, notat cu R(f), este un
digraf cu aceea¸ si mult ¸ime de noduri ca ¸ si G=N(C)iar mult ¸imea arcelor este
definit˘ a orientˆ and muchiile grafului suport Gal lui Gastfel :∀ij∈E(G)
•dac˘ a fij< u ijatunci ij∈E(R(f)), avˆ and capacitatea rezidual˘ a rij=
uij−fij
•dac˘ a fij> l ijatunci ji∈E(R(f)), avˆ and capacitatea rezidual˘ a rji=
fij−lij
Propozit ¸ie 12 FieCo constrˆ angere de tip gccconsitent˘ a ¸ si fo circulat ¸ie
admisibil˘ a ˆ ın N(C). O valoare adin domeniul unei variabile xnu este con-
sitent˘ a relativ la Cdac˘ a ¸ si numai dac˘ a fax= 0 ¸ si a¸ sixnu fac parte din
aceea¸ si component˘ a tare conex˘ a ˆ ın R(f).
Demonstrat ¸ie [44]
Este binecunoscut ˆ ın teoria fluxurilor c˘ a valoarea fluxului pentru un arc
axeste constant˘ a dac˘ a nu exist˘ a nici un drum de la alaxˆ ınR(f)−ax¸ si nu
exist˘ a nici un drum de la xlaaˆ ınR(f)−xa. Mai mult uax= 1, deci ax¸ sixa
nu pot apart ¸ine simultan grafului rezidual R(f) ceea ce ˆ ınseamn˘ a c˘ a valoarea
f(ax) este constant˘ a dac˘ a ¸ si numai nu exist˘ a un circuit cont ¸inˆ and ax¸ sixa
ˆ ınR(f), cu alte cuvinte x¸ siasunt ˆ ın componente tare conexe diferite.

64CAPITOLUL 3. REZOLVAREA RET ¸ELELOR DE CONSTR ˆANGERI
Corolar
FieC= (X, u, l ) o constrˆ angere de tip gcc,n=|X|,d=|D(X)|¸ si
m=|E(N(C)|.
•Testarea consitent ¸ei lui Cpoate fi f˘ acut˘ a ˆ ın O(nm).
•Arc-consistent ¸a relativ la Cpoate fi obt ¸inut˘ a ˆ ın O(m+n+d).

Capitolul 4
Crearea unui solver CSP
4.1 Introducere
In acest capitol vom analiza aspectele cele mai importante care trebuie luate
ˆ ın considerare ˆ ın implementarea unui sistem de rezolvare automat˘ a a prob-
lemelor modelate cu ajutorul constrˆ angerilor. La ora actual˘ a exist˘ a o ofert˘ a
consistent˘ a de astfel de aplicat ¸ii, variat˘ a atˆ at din punctul de vedere al plat-
formei de programare folosite cˆ at ¸ si din modul de specificare a problemelor
ce trebuie rezolvate, unele dintre ele fiind create ˆ ın scop academic, altele fiind
comerciale. Dintre cele mai cunoscute (ˆ ın ordine alfabetic˘ a) putem aminti:
•Choco (Java, free software)
•Disolver (C++, proprietary)
•Gecode (C++, free software)
•ILOG Solver (C++, proprietary)
•Koalog Constraint Solver (Java, proprietary)
•Minion (C++, GPL)
•Mozart (Oz, free software)
•SICStus (Prolog, proprietary)
65

66 CAPITOLUL 4. CREAREA UNUI SOLVER CSP
Din perspectiva acestei lucr˘ ari, existent ¸a aplicat ¸iilor ment ¸ionate ante-
rior nu ˆ ınseamn˘ a c˘ a abordarea domeniului CSP trebuie s˘ a se rezume strict
la aspecte legate de modelarea problemelor iar rezolvarea acestora s˘ a fie
ˆ ıncredint ¸at˘ a unui solver performant ci, dimpotriv˘ a, este necesar˘ a ˆ ınt ¸elegerea
ˆ ın detaliu a comportamentului unui astfel de solver ˆ ın vederea identific˘ arii
tuturor punctelor cheie care pot influent ¸a procesul de g˘ asire a solut ¸iei sau de
optimizare a acesteia. Rezolvarea problemelor dificile presupune nevoia de
personalizare a modului de c˘ autare a solut ¸iilor, fiind necesar˘ a integrarea ˆ ın
cadrului algoritmului general de rezolvare a unor alt ¸i algoritmi dedicat ¸i unor
restrict ¸ii polinomiale sau a unor euristici.
A¸ sadar, obiectivele urm˘ arite ˆ ın crearea solver-ului OmniCS sunt:
•Rezolvarea ret ¸elelor de constrˆ angeri modelate ˆ ın sistemul clasic (CSP)
•Rezolvarea probleme de optimizare reprezentate sub forma unor ret ¸ele
slabe de constrˆ angeri (WCSP)
•Intreg procesul de explorare a spat ¸iului solut ¸iilor s˘ a poat˘ a fi parame-
trizat
•Ad˘ augarea, ˆ ın funct ¸ie de problem˘ a, a unor algoritmi de filtrare ¸ si propa-
gare care s˘ a reduc˘ a problema dup˘ a fiecare decizie luat˘ a de solver
•Definirea de constrˆ angeri globale c˘ arora s˘ a le poat˘ a fi ata¸ sat ¸i algoritmi
specifici de filtrare.
•Integrarea ˆ ın cadrul algoritmului general a:
–unor alt ¸i algoritmi dedicat ¸i unor restrict ¸ii polinomiale ale proble-
mei respective
–unor eurisitici de c˘ autare local˘ a a solut ¸iei
•Generarea de evenimente la momentele definitorii ale explor˘ arii, astfel
ˆ ıncˆ at s˘ a poat˘ a fi creat ¸i observatori ai procesului de rezolvare
•Generarea de explicat ¸ii – posibilitatea de a crea un rat ¸ionament deduc-
tiv care s˘ a explice de ce o problem˘ a nu are solut ¸ie.
•Interactivitate – posibilitatea de a schimba comportamentul solverului
chiar ˆ ın timpul execut ¸iei prin luarea manual˘ a (de c˘ atre utilizator) a
unor decizii sau revocarea unora luate de solver.

4.1. INTRODUCERE 67
•Dinamism – posibilitatea de a rescrie problema prin ad˘ augarea/eliminarea
de variabile sau constrˆ angeri chiar ˆ ın timpul execut ¸iei solverului, f˘ ar˘ a
a fi necesar˘ a repornirea acestuia.
•Simplitate – Modelarea problemelor s˘ a fie simpl˘ a.
•Performant ¸˘ a comparabil˘ a cu alte solvere.
Incercarea de a oferi atˆ at simplitate ˆ ın utilizare cˆ at ¸ si posibilit˘ at ¸i cˆ at mai
ample de parametrizare poate induce o penalizare la nivelul performant ¸elor
algoritmului general comparativ cu alte solvere de tip Model-and-Run care,
din punctul de vedere al utilizatorului sunt ca ni¸ ste ”cutii negre” oferind
foare put ¸ine opt ¸iuni ˆ ıns˘ a, dup˘ a cum vom vedea, aceast˘ a penalizare este de
cele mai multe ori nesemnificativ˘ a.
Un alt lucru care trebuie stabilit este modul de descriere a algoritmilor
care vor defini comportamentul aplicat ¸iei. Exist˘ a dou˘ a abord˘ ari posibile:
•Modelul bazat pe evenimente
Este bazat pe generarea de evenimente la fiecare modificare a proble-
mei. Astfel, evenimente cum ar fi schimbarea valorii unei variabile sau
eliminarea unei valori dintr-un domeniu sunt interceptate de obiecte de
tiplistener ce vor react ¸iona propagˆ and respectiva schimbare.
Un solver CSP construit pe acest model este choco ˆ ın care, spre ex-
emplu, propagarea deciziilor luate de solver trebuie implementat˘ a ˆ ın
cadrul fiec˘ arei constrˆ angeri ˆ ın parte.
•Modelul global
Execut ¸ia solver-ului presupune apelarea succesiv˘ a a unor algoritmi definit ¸i
la nivelul ˆ ıntregii probleme sau la nivelul fiec˘ arei constrˆ angeri ˆ ın parte.
Astfel, algoritmul general de arc-consistent ¸˘ a poate fi definit sub forma
sa general˘ a, ceea ce constituie un avantaj din punctul de vedere al
clarit˘ at ¸ii sale. Folosirea modelului global nu exclude posibilitatea de a
genera evenimente ¸ si de a folosi acest mecanism ˆ ıns˘ a acest lucru nu va
face parte din comportamentul critic al solverului.
Datorit˘ a simplit˘ at ¸ii sale ¸ si a modului natural ˆ ın sunt descri¸ si algoritmii, ˆ ın
implementarea pe care o vom crea va fi utilizat modelul global.
Pentru a fi u¸ sor de folosit sistemul a fost conceput pe baza ¸ sablonului de
proiectare MVC (Model-View-Controller) [22], [51], fiind structurat astfel:
•Nivelul de modelare – permite definirea problemei ce trebuie rezolvat˘ a

68 CAPITOLUL 4. CREAREA UNUI SOLVER CSP
•Nivelul de control – reprezentat de componentele responsabile cu re-
zolvarea problemei; aici sunt incluse:
–solver-ul propriu-zis
–algoritmii de filtrare globali sau cei definit ¸i de constrˆ angeri
•Nivelul de prezentare – define¸ ste interfat ¸a cu utilizatorul pentru afi¸ sarea
rezultatelor.
Toate aceste trei nivele pot fi parametrizate ¸ si extinse astfel ˆ ıncˆ at s˘ a se
adapteze oric˘ arei probleme reprezentat˘ a ca o ret ¸ea de constrˆ angeri.
4.2 Nivelul de modelare
Indiferent de tipul s˘ au, un solver CSP trebuie s˘ a pun˘ a la dispozit ¸ie o modal-
itate cˆ at mai simpl˘ a de modelare a problemei care trebuie rezolvat˘ a. Simpli-
tatea poate fi ˆ ıns˘ a ˆ ınt ¸eleas˘ a ˆ ın mai multe feluri, dintre care cele mai semni-
ficative ar fi: concizia reprezent˘ arii sau u¸ surint ¸a asimil˘ arii de c˘ atre utilizator,
prima situat ¸ie concretizˆ andu-se ˆ ın utilizarea unui limbaj dedicat pentru de-
scrierea problemei, ˆ ın timp ce a doua se bazeaz˘ a pe un limbaj consacrat de
programare cum ar fi Java, C++ sau Prolog.
Datorit˘ a flexibilit˘ at ¸ii sporite, a elegant ¸ei ¸ si a popularit˘ at ¸ii sale, pentru
implementarea lui OmniCS a fost aleas˘ a platforma de programare Java.
4.2.1 Reprezentarea problemei
Modelarea unei probleme presupune descrierea elementelor constitutive ale
ret ¸elei de constrˆ angeri asociate, acest lucru fiind f˘ acut printr-o serie de clase
¸ si interfet ¸e. O instant ¸˘ a CSP este descris˘ a de clasa Problem , aceasta trebuind
ˆ ın primul rˆ and s˘ a permit˘ a definirea variabilelor ¸ si constrˆ angerilor sale, acestea
fiind reprezentate prin mult ¸imi de tip VarSet , respectiv ConstraintSet .
public class Problem {

VarSet variables;
ConstraintSet constraints;

}

4.2. NIVELUL DE MODELARE 69
Dup˘ a cum am ment ¸ionat, unul din obiectivele propuse a fost crearea
unui sistem unitar care s˘ a poat˘ a fi utilizat atˆ at pentru rezolvarea ret ¸elelor
clasice ˆ ın care obiectivul este satisfacacerea tuturor constrˆ angerilor cˆ at ¸ si
pentru ret ¸elele slabe (soft) ˆ ın care scopul este minimizarea unei funct ¸ii de
cost calculat˘ a din penalit˘ at ¸ile implicate de nesatisfacerea unor constrˆ angeri.
Din acest punct de vedere, trebuie s˘ a concepem o modalitate de evaluare a
solut ¸iilor care s˘ a poat˘ a fi folosit˘ aˆ ın ambele modele. Acest lucru a fost realizat
prin asocierea fiec˘ arei probleme a unei structuri de evaluare, descris˘ a de un
obiect de tip ValuationStructure , aceasta fiind responsabil cu evaluarea
solut ¸iei curente.
public class Problem {

ValuationStructure valuation;

}
Rezolvarea unei probleme presupune crearea unei instant ¸e a unui algo-
ritm de rezolvare ¸ si lansarea procesului de c˘ autare a solut ¸iei. Un algoritm
generic pentru rezolvarea unei ret ¸ele de constrˆ angeri va fi modelat printr-un
obiect de tip Solver . In problemele de optimizare, c˘ autarea poate porni f˘ ar˘ a
nici o informat ¸ie aprioric˘ a sau poate utiliza un optim determinat anterior
¸ si s˘ a ˆ ıncerce ˆ ımbun˘ at˘ at ¸irea acestuia. Implicit, variabila optim asociat˘ a unei
ret ¸ele este valoarea minim˘ a definit˘ a de structura de evaluare, ˆ ıns˘ a este oferit˘ a
posibilitatea de a o schimba ˆ ın condit ¸ia ˆ ın care acest lucru este necesar.
public class Problem {

Solver solver;
int optimum;

}
Pe parcursul rezolv˘ arii, o problem˘ a se poate g˘ asi ˆ ın diferite st˘ ari care pot
influent ¸a procesul de c˘ autare al solut ¸iei. Acestea sunt:
•UNKNOWN – nu se cunoa¸ ste nimic despre problem˘ a, aceasta fiind starea
init ¸ial˘ a.

70 CAPITOLUL 4. CREAREA UNUI SOLVER CSP
•SIMPLE – algoritmul general de rezolvare a determinat c˘ a aceast˘ a prob-
lem˘ a, presupus˘ a a fi NP-dificil˘ a, este un caz particular pentru care
exist˘ a un algoritm mai simplu (polinomial) de determinare a solut ¸iei;
ˆ ın aceast˘ a situat ¸ie controlul va fi transferat c˘ atre solverul mai eficient.
•SOLVED – problema este rezolvat˘ a.
•INCONSISTENT – problema nu are nici o solut ¸ie.
Definit ¸ia complet˘ a a structurii interne a unei probleme este:
public class Problem {
private String name;
private String description;
private VarSet variables;
private ConstraintSet constraints;
private ValuationStructure valuation;
private Solver solver;
private int optimum;
public final static int UNKNOWN = 0;
public final static int SIMPLE = 1;
public final static int SOLVED = 2;
public final static int INCONSISTENT = -1;

}
Prin dimensiunea problemei vom ˆ ınt ¸elege num˘ arul variabilelor acesteia.
4.2.2 Definirea variabilelor
Variabilele reprezint˘ a modalitatea de a formaliza necunoscutele unei prob-
leme. Pentru a p˘ astra generalitatea, nu va fi f˘ acut˘ a nici o ipotez˘ a asupra
tipului acestora, ele putˆ and fi ˆ ıntregi, reale, ¸ siruri de caractere, mult ¸imi, etc.
Clasa care modeleaz˘ a not ¸iunea de variabil˘ a este Var. Aceasta va avea ca
principal˘ a proprietate domeniul s˘ au, cu alte cuvinte mult ¸imea valorilor pe
care le poate lua. Intrucˆ at pe parcursul rezolv˘ arii domeniile variabilelor sunt
modificate de solver este necesar s˘ a ret ¸inem ¸ si domeniul init ¸ial.

4.2. NIVELUL DE MODELARE 71
public class Var {

Domain domain;
Domain initialDomain;

}
Pe lˆ ang˘ a acesta, fiecare variabil˘ a poate cont ¸ine ca informat ¸ie suplimen-
tar˘ a obiectul pe care ˆ ıl modeleaz˘ a ˆ ın cadrul ret ¸elei (dac˘ a este necesar). De
exemplu, ˆ ın problema color˘ arii vˆ arfurilor unui graf, fiec˘ arui vˆ arf al grafului
ˆ ıi va corespunde o variabil˘ a ˆ ın cadrul ret ¸elei asociate. La rˆ andul lor, vari-
abilele pot p˘ astra o referint ¸˘ a la vˆ arful corespunz˘ ator prin intermediul acestei
informat ¸ii suplimentare.
public class Var {

Object data;

}
Prototipul unei metode care s˘ a modeleze problema color˘ arii vˆ arfurilor unui
graf planar cu patru culori sub forma unei ret ¸ele de constrˆ angeri ar putea
ˆ ıncepe astfel:
public void color(Graph graph) {

Problem problem = new Problem(); // reteaua
Domain domain = new Domain(1,2,3,4); // cele 4 culori
for(Node node : graph.nodes()) {
Var var = new Var();
var.setDomain(domain); // stabilim domeniul
var.setData(node); // referinta la varf
problem.addVariable(var); // adaugam la problema
}

}
Valoarea unei variabile trebuie ˆ ınt ¸eleas˘ a ˆ ın contextul rezolv˘ arii ret ¸elei de
constrˆ angeri din care aceasta face parte, cu alte cuvinte nu va fi o propri-
etate a obiectului Varci va fi extras˘ a din solut ¸ia part ¸ial˘ a curent˘ a a solveru-
lui. Din acest punct de vedere, o variabil˘ a poate fi ˆ ıntr-una din st˘ arile:

72 CAPITOLUL 4. CREAREA UNUI SOLVER CSP
instant ¸iat˘ a sau neinstant ¸iat˘ a. A¸ sadar, metodele getValue ,setValue , re-
spectiv isInstantiated sunt strˆ ans legate de solver:
public Object getValue() {
Solver solver = problem.getSolver();
return solver.solution().get(this);
}
public void setValue(Object value) {
Solver solver = problem.getSolver();
solver.solution().put(this, value);
}
public boolean isInstantiated() {
return (getValue() != null);
}
In cadrul unei probleme, variabilele acesteia sunt considerate ordonate
dup˘ a indexul lor. Indexul unei variabile reprezint˘ a o proprietate surogat,
fiind calculat automat la ad˘ augarea ei ˆ ın cadrul problemei, valoare sa fiind
de fapt pozit ¸ia din colect ¸ia ˆ ın care sunt memorate variabiele ret ¸elei. Astfel,
ˆ ın mod implicit, urm˘ atoarele modalit˘ at ¸i de iterare sunt echivalente:
// varianta 1
for(Var var : problem.getVariables()) {
int i = var.getIndex();
}
// varianta 2
for(int i=0; i<problem.size(); i++) {
Var var = problem.variable(i);
}
4.2.3 Crearea domeniilor
Un domeniu asociat unei variabile reprezint˘ a o mult ¸ime de valori din care
aceasta poate fi instant ¸iat˘ a. Ca ¸ siˆ ın cazul variabilelor, pentru a p˘ astra gener-
alitatea domeniile vor fi considerate mult ¸imi eterogene indexate. Clasa care
modeleaz˘ a not ¸iunea de domeniu este Domain . Chiar dac˘ a elementele dome-
niului nu sunt comparabile, este fort ¸at˘ a ordonarea domeniului dup˘ a modal-
itatea intern˘ a de reprezentare a acestuia astfel ˆ ıncˆ at s˘ a aib˘ a sens not ¸iunile

4.2. NIVELUL DE MODELARE 73
deminim ¸ simaxim . Deoarece multe probleme sunt modelate cu variabile
ˆ ıntregi sau logice, exist˘ a metode care s˘ a faciliteze crearea domeniilor de acest
tip. Mai jos sunt date cˆ ateva exemple de domenii simple:
Domain d1 = new Domain(); // domeniul vid
Domain d2 = new Domain("a", "b", "c"); // {"a", "b", "c"}
Domain d3 = Domain.createIntEnum(0, 9); // {0,1,…,9}
Domain d4 = Domain.createBoolean(); // {true, false}
4.2.4 Specificarea constrˆ angerilor
Crearea constrˆ angerilor unei ret ¸ele va fi analizat˘ a pe larg ˆ ıntr-o sect ¸iune
ulterioar˘ a, deocamdat˘ a fiind trecute ˆ ın revist˘ a clasele ¸ si interfet ¸ele de baz˘ a
folosite ˆ ın modelare. Astfel, abstract ¸iunea cea mai important˘ a este dat˘ a
de clasa Constraint . La modul abstract, constrˆ angerea va fi specificat˘ a
prin intermediul unei funct ¸ii de tip oracol capabil˘ a s˘ a evalueze o tupl˘ a ¸ si
s˘ a determine dac˘ a aceasta este permis˘ a sau nu, eventual s˘ a returneze costul
nerespect˘ arii ei. Acest lucru va fi realizat prin extinderea clasei Constraint .
Pe lˆ ang˘ a implement˘ arile constrˆ angerilor uzuale (operat ¸ii aritmetice, log-
ice, etc.), a fost oferit˘ a ¸ si posibilitatea de a defini o constrˆ angere explicit
prin relat ¸ia asociat˘ a, cu alte cuvinte prin enumerarea efectiv˘ a a tuplelor per-
mise, eventual cu penaliz˘ arile corespunz˘ atoare ˆ ın cazul ret ¸elelor slabe, prin
intermediul clasei ExplicitConstraint .
S˘ a consider˘ am un exemplu simplu pe care s˘ a-l model˘ amˆ ın cele dou˘ a feluri.
Ret ¸eaua pe care dorim s˘ a o model˘ am este R= (X, D, C ), unde X={x, y, z},
Dx=Dy=Dz={1,2,3}iar constrˆ angerile sunt C={x/negationslash=y, y/negationslash=z, z/negationslash=x}.
In primul rˆ and, s˘ a cre˘ am problema, variabilele ¸ si domeniile corespunz˘ atoare:
Problem pb = new Problem();
Domain d = new Domain(1, 2, 3);
Var x = new Var("x", d);
Var y = new Var("y", d);
Var z = new Var("z", d);
pb.setVariables(x, y, z);
Definirea explicit˘ a a relat ¸iilor corespunz˘ atoare constrˆ angerilor va fi f˘ acut˘ a
astfel:
Integer[][] Rxy = {{1,2}, {1,3}};

74 CAPITOLUL 4. CREAREA UNUI SOLVER CSP
Integer[][] Ryz = {{2,1}, {2,3}};
Integer[][] Rzx = {{3,1}, {3,2}};
Constraint Cxy = new ExplicitConstraint(new VarSet(x,y), Rxy);
Constraint Cyz = new ExplicitConstraint(new VarSet(y,z), Ryz);
Constraint Czx = new ExplicitConstraint(new VarSet(z,x), Rzx);
pb.setConstraints(Cxy, Cyz, Czx);
Definirea constrˆ angerilor folosind o funct ¸ie de evaluare poate fi f˘ acut˘ a prin
extinderea clasei Constraint ¸ si implementarea metodei eval care prime¸ ste
ca argument o tupl˘ a ¸ si trebuie s˘ a evalueze consistent ¸a acestei din perspectiva
constrˆ angerii modelate.
Constraint Cxy = new NotEqual(x,y);
Constraint Cyz = new NotEqual(y,z);
Constraint Czx = new NotEqual(z,x);
this.setConstraints(Cxy, Cyz, Czx);
class NotEqual extends Constraint {
private Var x, y;
public NotEqual(Var x, Var y) {
super(x, y);
this.x = x;
this.y = y;
}
public int eval(Tuple tuple) {
Object a = tuple.get(x);
Object b = tuple.get(y);
if (a == null || b == null) return ALLOWED;
if (a.equals(b)) return FORBIDDEN;
return ALLOWED;
}
}
Presupunˆ and c˘ a exist˘ a implementat˘ a constrˆ angerea AllDiff care impune ca
valorile unui num˘ ar oarecare de variabile s˘ a fie diferite, restrict ¸iile problemei
de mai sus ar putea fi exprimate extrem de concis astfel:
pb.addConstraint(new AllDiff(x,y,z));

4.3. NIVELUL DE CONTROL 75
Sigur c˘ a existent ¸a unui set predefinit de constrˆ angeri implicite va simpli-
fica extrem de mult modelarea problemelor. Astfel, sunt puse la dispozit ¸ie
clase care modeleaz˘ a constrˆ angeri de urm˘ atoarele tipuri:
•aritmetice :x/negationslash=y,x=y+c,x≤y,x=|y|, etc
•logice :x=y∧z,x=¬y, etc.
•globale :x∈{y1, …, y n},/logicalandtext
i/negationslash=jxi/negationslash=xj, etc.
Mai multe detalii legate de definirea de noi constrˆ angeri vor fi discutate
ˆ ıntr-o alt˘ a sect ¸iune dedicat˘ a acestora.
4.2.5 Reprezentarea tuplelor
Clasa responsabil˘ a cu modelarea not ¸iunii de tupl˘ a este Tuple , aceasta reprezentˆ and
de fapt insant ¸ierea unor variabile ale problemei.
•(x=a):new Tuple(x,a)
•(x1=a1, …, x k=ak):
new Tuple(new VarSet( x1, …, x k), new Object[]( a1, …, a k))
Sigur c˘ a exist˘ a posibilitatea de a modifica cont ¸inutul unei tuple prin metode
care s˘ a permit˘ a ad˘ augarea unei noi perechi x=a(tuple.put(x,a) ) sau care
s˘ a elimine un anumit element ( tuple.remove(x) ). De asemenea, au fost
implementate metode pentru operat ¸iile uzuale cu tuple: proiect ¸ie, reuniune,
legare (join).
4.3 Nivelul de control
Dup˘ a cum am precizat, nivelul de control este format din toate componentele
care contribuie la rezolvarea problemei. Aici includem:
•Nivelul solverului – responsabil cu parcurgerea sistematic˘ a a spat ¸iului
solut ¸iilor. Acesta poate fi personalizat prin specificarea strategiilor de
explorare.
•Nivelul algoritmic – format din algoritmii de filtrare:

76 CAPITOLUL 4. CREAREA UNUI SOLVER CSP
–globali , definit ¸i la nivelul ˆ ıntregii probleme, cum ar fi algoritmul
general de arc-consistent ¸˘ a
–locali , specifici fiec˘ arei constrˆ angeri ˆ ın parte.
S ¸i comportamentul acestui nivel poate fi modificat prin ad˘ augarea de
noi algoritmi de filtrare ¸ si propagare, independent ¸i sau asociat ¸i unor
constrˆ angeri.
In dezvoltarea nivelului de control am t ¸inut cont de posibilitatea extinderii
acestuia dar ˆ ıntr-o manier˘ a controlat˘ a, aderˆ and la principiul ”Open-Closed”
[38], [37] care afirm˘ a c˘ a o clas˘ a trebuie s˘ a poat˘ a fi extins˘ a dar f˘ ar˘ a ca acest
lucru s˘ a-i afecteze comportamentul propus.
4.3.1 Conceptul general de solver
Abstract ¸iunea de la care se pleac˘ a ˆ ın definirea acestui nivel este interfat ¸a
Solver care modeleaz˘ a not ¸iunea general˘ a de sistem responsabil cu rezolvarea
unei ret ¸ele de constrˆ angeri. Nu exist˘ a nici o presupunere asupra modalit˘ at ¸ii
de c˘ autare a solut ¸iei, aceasta putˆ and fi un algoritm sistematic sau o euristic˘ a.
Vom considera c˘ a fiec˘ arui solver ˆ ıi poate fi ata¸ sat un analizor de problem˘ a
capabil s˘ a identifice situat ¸ii particulare ¸ si s˘ a ofere solut ¸ii specifice de rezolvare
a acestora. Un astfel de obiect trebuie s˘ a implementeze interfat ¸a Analyzer
ce define¸ ste urm˘ atoarele metode:
public interface Analyzer {
Problem getProblem();
void setProblem(Problem problem);
boolean isSolved();
boolean isInconsistent();
boolean isSimple();
Solver getSolver();
}
A¸ sadar, un analizor de problem˘ a trebuie s˘ a poat˘ a determina dac˘ a problema
curent˘ a este ˆ ıntr-una din st˘ arile: SOLVED ,INCOSNSISTENT sauSIMPLE , iar
ˆ ın ultima situat ¸ie trebuie s˘ a ofere prin metoda getSolver o solut ¸ie mai efe-
icient˘ a de rezolvare. In mod firsc, analizorul implicit pus la dispozit ¸ie nu

4.3. NIVELUL DE CONTROL 77
poate identifica starea SIMPLE , aceasta fiind specific˘ a fiec˘ arei probleme ˆ ın
parte. In privint ¸a celorlalte dou˘ a st˘ ari, problema este considerat˘ a inconsis-
tent˘ a dac˘ a exist˘ a cel put ¸in o variabil˘ a al c˘ arei domeniu este mult ¸imea vid˘ a ¸ si
este considerat˘ a rezolvat˘ a atunci cˆ and domeniile tuturor variabilelor au un
singur element. Decuplarea modului de analiz˘ a de algoritmul de c˘ autare a
solut ¸iei ofer˘ a flexibilitate sporit˘ a sistemului.
Pe parcursul rezolv˘ arii, trebuie s˘ a avem acces la solut ¸ia curent˘ a ¸ si la
optimul curent (ˆ ın cazul ret ¸elelor slabe de constrˆ angeri).
In concluzie, la nivelul cel mai general, un solver trebuie s˘ a ofere metode
pentru:
•Stabilirea problemei care trebuie rezolvat˘ a
•Setarea unui analizor de problem˘ a
•Configurarea parametrilor generali ai procesului de c˘ autare a solut ¸iei
(solut ¸iilor), cum ar fi timpul maxim de rulare permis, num˘ arul dorit de
solut ¸ii, etc.
•Rezolvarea propriu-zis˘ a
Aceste lucruri sunt surprinse ˆ ın definit ¸ia interfet ¸ei Solver :
public interface Solver {
Problem getProblem();
void setProblem(Problem problem);
Analyzer getAnalyzer();
void setAnalyzer(Analyzer analyzer);
int eval(Tuple tuple);
Tuple solve();
TupleSet solve(int solutionsLimit);
TupleSet solveAll();
Tuple solution();
TupleSet solutions();
int optimum();

}

78 CAPITOLUL 4. CREAREA UNUI SOLVER CSP
4.3.2 Rezolvarea sistematic˘ a (complet˘ a)
Ne vom focaliza ˆ ın continuare asupra tipului de sistem pe care dorim s˘ a-l
implement˘ am efectiv ¸ si anume de algoritm de rezolvare a ret ¸elelor de con-
strˆ angeri capabil s˘ a exploreze ˆ ın mod sistematic ¸ sicomplet ˆ ıntreg spat ¸iul
de c˘ autare al solut ¸iilor problemei. Clasa care modeleaz˘ a aceast˘ a not ¸iune
este SystematicSolver ¸ si ea ofer˘ a toate mecanismele necesare procesului
de explorare a arborelui. Intrucˆ at implementarea ei este strˆ ans legat˘ a de
algoritmul clasic de backtracking , a fost creat˘ a ¸ si clasa Backtracking care
poate fi folosit˘ a cu aceea¸ si semnificat ¸ie. In principiu, tipul solverului utilizat
implicit la rezolvarea unei ret ¸ele este ascuns de metoda createSolver din
clasa Problem , responsabil˘ a cu crearea unui obiect de tip Solver ¸ si legarea
acestuia de problem˘ a.
// Modelarea problemei
Problem problem = new Problem();

// Crearea unui solver
Solver solver = problem.createSolver();
// Rezolvarea problemei
Tuple solution = solver.solve();
Un algoritm sistematic de c˘ autare a solut ¸iilor trebuie s˘ a ofere urm˘ atoarele
posibilit˘ at ¸i:
•Obt ¸inerea informat ¸iilor asupra situat ¸iei curente a explor˘ arii:
–mult ¸imea variabilelor care nu au fost instant ¸iateˆ ınc˘ a ( candidates );
–variabila curent˘ a c˘ areia trebuie s˘ a i se asigneze o valoare ( current );
–stiva ce cont ¸ine variabilele care au fost deja instant ¸iate precum ¸ si
variabila curent˘ a ( path );
–cel mai recent nodˆ ın care algoritmul a efectuat oˆ ıntoarcere ( failed ).
•Parametrizarea modului de explorare a spat ¸iului solut ¸iilor prin definirea
de strategii (euristici) privitoare la:
–Inaintare : define¸ ste ordinea de instant ¸iere a variabilelor;
–Intoarcere : ˆ ın cazul e¸ secului, define¸ ste care nod va deveni curent;

4.3. NIVELUL DE CONTROL 79
–Instant ¸iere : define¸ ste ordinea ˆ ın care vor fi asignate valori vari-
abilei curente.
•Obt ¸inerea de informat ¸ii statistice, cum ar fi:
–num˘ arul de noduri explorate,
–num˘ arul de e¸ securi,
–lungimea celui mai lung backtrack.
Principiul de funct ¸ionare al unui solver sistematic este de tip: decizie-
propagare-ˆ ıntoarcere . La un moment dat, algoritmul trebuie s˘ a ia o de-
cizie, cum ar fi instant ¸ierea unei variabile, s˘ a propage aceast˘ a decizie re-
ducˆ and problema la una echivalent˘ a dar mai u¸ sor de rezolvat, dup˘ a care
trebuie s˘ a determine dac˘ a problema este rezolvat˘ a/inconsistent˘ a ¸ si, dup˘ a
caz, s˘ a ia o nou˘ a decizie sau s˘ a se ˆ ıntoarc˘ a la o stare anterioar˘ a. Schematic,
algoritmul general de rezolvare este schit ¸at mai jos:

80 CAPITOLUL 4. CREAREA UNUI SOLVER CSP
Algorithm 12 Algoritmul general de rezolvare
Intrare:R= (X, D, C ) o ret ¸ea de constrˆ angeri
Rezultat: Rezolvarea luiR
Pas0 Filtreaz˘ a problema init ¸ial˘ a
ifret ¸eaua este rezolvat˘ a then
Proceseaz˘ a solut ¸ia
return
end if
ifret ¸eaua este inconsistent˘ a then
return
end if
Pas1 Memoreaz˘ a starea problemei
Pas2 Decizie
Pas3 Propagare
ifret ¸eaua este rezolvat˘ a then
Proceseaz˘ a solut ¸ia
return
end if
ifret ¸eaua este inconsistent˘ a then
Restaureaz˘ a problema de dinaintea deciziei
goto Pas2
end if
goto Pas1

4.3. NIVELUL DE CONTROL 81
4.3.3 Exemplu de implementare
S˘ a consider˘ am un prim exemplu care s˘ a pun˘ a ˆ ın evident ¸˘ a lucrurile prezentate
pˆ an˘ a acum ¸ si anume o problem˘ a de cripto-aritmetic˘ a: SEND +MORE =
MONEY . Scopul acestui tip de probleme const˘ a ˆ ın atribuirea fiec˘ areia din
literele{S, E, N, D, M, O, R, Y }a unei cifre de la 0 la 9 astfel ˆ ıncˆ at:
•SEND ,MORE ¸ siMONEY reprezint˘ a numere ¸ si nu trebuie s˘ aˆ ınceap˘ a
cu 0
•suma numerelor SEND ¸ siMORE esteMONEY
•S, E, N, D, M, O, R, Y sunt toate diferite
Este u¸ sor de observat c˘ a aceasta problem˘ a poate fi modelat˘ a sub forma unei
ret ¸ele de constrˆ angeri ˆ ın care variabilele sunt cele 8 litere, domeniile acestora
fiind formate din cele 10 cifre de la 0 la 9 iar constrˆ angerile sunt cele descrise
informalˆ ın enumerarea de mai sus. De¸ si formularea problemei este simpl˘ a, ea
nu este neap˘ arat trivial˘ a deoarece dimensiunea spat ¸iului ˆ ın care sunt c˘ autate
solut ¸iile este de 108elemente. In mod cert, simpla enumerare a tuturor
posibilit˘ at ¸ilor ¸ si testarea corectitudinii acestora nu este o solut ¸ie viabil˘ a.
S˘ a vedem cum poate fi modelat˘ a ¸ si rezolvat˘ a aceast˘ a problem˘ a cu ajutorul
solverului.
In primul rˆ and trebuie s˘ a cre˘ am problema, cele 8 variabile ¸ si domeniile
corespunz˘ atoare fiec˘ areia.
Problem pb = new Problem();
IntVar s = new IntVar("S", 1, 9);
IntVar e = new IntVar("E", 0, 9);
IntVar n = new IntVar("N", 0, 9);
IntVar d = new IntVar("D", 0, 9);
IntVar m = new IntVar("M", 1, 9);
IntVar o = new IntVar("O", 0, 9);
IntVar r = new IntVar("R", 0, 9);
IntVar y = new IntVar("Y", 0, 9);
IntVar[] vars = {s,e,n,d,m,o,r,y};
pb.setVariables(vars);

82 CAPITOLUL 4. CREAREA UNUI SOLVER CSP
Urm˘ atoarea etap˘ a const˘ a ˆ ın definirea constrˆ angerilor. Faptul c˘ a s/negationslash= 0 ¸ si
m/negationslash= 0 a fost specificat direct ˆ ın definit ¸ia domeniilor. Constrˆ angerea c˘ a toate
literele trebuie s˘ a aib˘ a valori diferite poate fi descris˘ a fie prin intermediul lui
NotEqual :
for(int i=0; i<8; i++) {
for(int j=i+1; j<8; j++) {
pb.addConstraint(new NotEqual(vars[i], vars[j]));
}
}
fie folosind constrˆ angerea global˘ a AllDiff :
pb.addConstraint(new AllDiff(vars));
Cea de a doua constrˆ angere va impune egalitatea SEND +MORE =MONEY .
Explicitat˘ a, aceasta poate fi scris˘ a astfel:
1000∗s+ 100∗e+ 10∗n+d+ 1000∗m+ 100∗o+ 10∗r+e=
10000∗m+ 1000∗o+ 100∗n+ 10∗e+y
echivalent cu:
1000∗s+ 91∗e−90∗n+d−9000∗m−900∗o+ 10∗r−y= 0
Ultima constrˆ angere va fi exprimat˘ a ca un produs scalar ˆ ıntre variabilele
problemei ¸ si coefient ¸ii calculat ¸i mai sus:
int coeffs[] = {1000, 91, -90, 1, -9000, -900, 10, -1};
pb.addConstraint(new ScalarProduct(vars, coeffs, 0));
In final, trebuie s˘ a instant ¸iem solverul ¸ si s˘ a apel˘ am metoda care determin˘ a
toate solut ¸iile:
SystematicSolver solver = pb.createSolver();
solver.solveAll();
solver.printResult(System.out);
Presupunˆ and c˘ a au fost folosite constrˆ angeri de tip NotEqual , rezultatul va
cont ¸ine solut ¸iile problemei precum ¸ si informat ¸ii statistice :

4.3. NIVELUL DE CONTROL 83
Variables : 8
Constraints : 29
Solutions : 1 (all)
{S=9, E=5, N=6, D=7, M=1, O=0, R=8, Y=2}
Time : 60 ms
– Nodes : 4
– Backtracks : 1
Dup˘ a cum vom vedea, unui solver ˆ ıi poat fi asociat ¸i diver¸ si observatori
care s˘ a monitorizeze activitatea acestuia. Pentru a arunca o prim˘ a privire
asupra comportamentului acestuia s˘ a-i ata¸ s˘ am un observator simplu de tipul
SolverObserver . Rezultatul va fi (ˆ ıntre paranteze rotunde sunt comentarii):
Solver started.
Problem status:
S: [1, 2, 3, 4, 5, 6, 7, 8, 9]
E: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
N: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
D: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
M: [1, 2, 3, 4, 5, 6, 7, 8, 9]
O: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
R: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Y: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Filter and propagate removed 48 values.
Problem status:
S: [9]
E: [4, 5, 6]
N: [5, 6, 7]
D: [2, 3, 4, 5, 6, 7, 8]
M: [1]
O: [0]
R: [2, 3, 4, 5, 6, 7, 8]
Y: [2, 3, 4, 5, 6, 7, 8]
Decision: E=4
Solution extended: {S=9, E=4, M=1, O=0}
Filter and propagate removed 69 values.
Problem status:

84 CAPITOLUL 4. CREAREA UNUI SOLVER CSP
S: [9]
E: [4]
N: [5]
D: [8]
M: [1]
O: [0]
R: []
Y: [2]
Nogood : {S=9, E=4, M=1, O=0}
Solution restored: {S=9, M=1, O=0}
Decision: E=5
Solution extended: {S=9, E=5, M=1, O=0}
Filter and propagate removed 89 values.
Problem status:
S: [9]
E: [5]
N: [6]
D: [7]
M: [1]
O: [0]
R: [8]
Y: [2]
Solution found: {S=9, E=5, N=6, D=7, M=1, O=0, R=8, Y=2}
Solution restored: {S=9, M=1, O=0}
Decision: E=6
Solution extended: {S=9, E=6, M=1, O=0}
Filter and propagate removed 110 values.
Problem status:
S: [9]
E: [6]
N: [7]
D: [8]
M: [1]
O: [0]
R: []
Y: [4]

4.3. NIVELUL DE CONTROL 85
Nogood : {S=9, E=6, M=1, O=0}
Solution restored: {S=9, M=1, O=0}
Solver finished.
4.3.4 Definirea strategiilor de explorare
Algoritmul sistematic de c˘ autare a solut ¸iilor trebuie s˘ a ia o serie de decizii
ˆ ın vederea parcurgerii spat ¸iului solut ¸iilor. Astfel, la un moment dat trebuie
s˘ a aleag˘ a din mult ¸imea variabilelor care nu au fost instant ¸iate un candidat
c˘ aruia s˘ a-i asigneze o valoare. Dup˘ a selectarea variabilei, instant ¸ierea aces-
teiea presupune atribuirea unei valori din domeniul s˘ au. In final, atunci cˆ and
se afl˘ a ˆ ın situat ¸ia de e¸ sec trebuie s˘ a decid˘ a care este variabila de la care va
relua c˘ autarea solut ¸iei.
Strategia de ˆ ınaintare este responsabil˘ a cu identificarea variabilei can-
didat care urmeaz˘ a s˘ a fie instant ¸iat˘ a, definind de fapt o relat ¸ie de ordine to-
tal˘ a asupra variabilelor ret ¸elei. Aceast˘ a ordine nu este ˆ ıns˘ a static˘ a (stabilit˘ a
ˆ ınainte de pornirea solverului) ci poate fi determinat˘ a dinamic, la execut ¸ie,
ˆ ın funct ¸ie de starea curent˘ a a sistemului. Interfat ¸a care descrie o strategie de
ˆ ınaintare este ForwardStrategy :
public interface ForwardStrategy {
Var next();
}
Evident, la modul general, nu exist˘ a o strategie care s˘ a fie mai bun˘ a decˆ at
alta, din acest motiv este important ca fiecare problem˘ a s˘ a-¸ si defineasc˘ a
propria ordonare a variabilelor. Exist˘ a ˆ ıns˘ a o serie de euristici care sunt
fire¸ sti sau pentru care s-a observat, experimental, c˘ a funct ¸ioneaz˘ a bine pe
multe categorii de probleme. Acestea sunt:
•SimpleForward – selecteaz˘ a variabileleˆ ın ordineaˆ ın care au fost definite
ˆ ın cadrul problemei; aceasta este strategia implicit˘ a.
public class SimpleForward
extends AbstractStrategy
implements ForwardStrategy {

86 CAPITOLUL 4. CREAREA UNUI SOLVER CSP
public Var next() {
List<Var> candidates = solver.candidates();
if (candidates.isEmpty()) {
return null;
}
Var var = candidates.get(0);
return var;
}
}
•MinDomainForward – alege variabila cu dimensiunea domeniului cˆ at
mai mic˘ a, reducˆ and astfel l˘ at ¸imea arborelui de c˘ autare; corespunde
principiului first-fail .
•MostConstrainedForward – alege variabila implicat˘ a ˆ ın cele mai multe
constrˆ angeri.
Strategia de instant ¸iere este responsabil˘ a cu definirea unei relat ¸ii de
ordine asupra valorilor din domeniul unei variabile. Ca ¸ si ˆ ın cazul strate-
giei de ˆ ınaintare, relat ¸ia nu este static˘ a ea putˆ and fi reordonat˘ a dinamic
pe parcursul execut ¸iei. Interfat ¸a care descrie o strategie de instant ¸iere este
AssignmentStrategy :
public interface AssignmentStrategy {
Object assign(Var var);
}
Ca implement˘ ari au fost definite:
•SimpleAssignment – selecteaz˘ a valorile conform cu ordinea natural˘ a a
domeniului, aceasta fiind ¸ si strategia implicit˘ a.
public class SimpleAssignment extends AbstractStrategy
implements AssignmentStrategy {
public Object assign(Var var) {
Domain domain = var.getDomain();
Tuple solution = solver.solution();

4.3. NIVELUL DE CONTROL 87
while (!domain.isEmpty()) {
Object a = domain.first();
domain.remove(a);
solution.put(var, a);
if (solution.isConsistent(var)) {
return a;
}
}
solution.remove(var);
return null;
}
}
•MaxReductionAssignment – execut˘ a o operat ¸ie de forward-checking ,
calculˆ and pentru ficare atribuire num˘ arul de elimin˘ ari provocat prin
propagarea ei de c˘ atre algoritmii de filtrare, dup˘ a care alege valoarea
care a determinat cea mai semnificativ˘ a reducere.
Strategia de ˆ ıntoarcere define¸ ste modul ˆ ın care va fi selectat˘ a variabila
de unde va fi reluat procesul de c˘ autare a solut ¸iei ˆ ın caz de e¸ sec. Interfat ¸a
care descrie o strategie de ˆ ıntoarcere este BackwardStrategy :
public interface BackwardStrategy {
Var back();
}
Implicit, algoritmul clasic de backtracking efectueaz˘ a ˆ ıntoarcerea cronologic˘ a
c˘ atre ultima variabil˘ a instant ¸iat˘ a ˆ ınainte de obt ¸inerea inconsistent ¸ei, acesta
fiind de fapt ¸ si comportamentul implicit al solverului, implementat de clasa
SimpleBackward . Aceasta utilizeaz˘ a stiva ˆ ın care sunt memorate variabilele
procesate de solver, extr˘ agˆ and de acolo pe ultima c˘ areia i-a fost atribuit˘ a o
valoare:
public class SimpleBackward extends AbstractStrategy
implements BackwardStrategy {
public Var back() {
Stack<Var> path = solver.path();
if (path.isEmpty()) return null;

88 CAPITOLUL 4. CREAREA UNUI SOLVER CSP
Var current = path.pop();
Var var = null;
if (!path.isEmpty()) {
var = path.peek();
}
return var;
}
}
Ins˘ a acest tip deˆ ıntoarcere cronologic˘ a poate provoca fenomenul de ”thrash-
ing”, cu alte cuvinte apare posibilitatea de a gre¸ si din acela¸ si motiv de mai
multe ori. Din acest motiv pot fi implementat ¸i algoritmi de ˆ ıntoarcere mai
complec¸ si, cum ar fi cel de tip backjumping , care s˘ a determine variabila re-
sponsabil˘ a efectiv cu aparit ¸ia situat ¸iei curente de e¸ sec ¸ si s˘ a reia procesul de
explorare direct de acolo.
O alt˘ a tehnic˘ a de optimizare a algoritmilor sistematici de c˘ autare este
cea de creare a unei structuri de date de tip cache ˆ ın care s˘ a fie memorate
informat ¸ii legate de incompatibilitatea unor anumite atribuiri de valori vari-
abilelor ret ¸elei, astfel ˆ ıncˆ at algoritmul s˘ a evite munca redundant˘ a, cu alte
cuvinte s˘ a evite crearea unor instant ¸e inconsistente dintr-un motiv care a
fost identificat la un pas anterior. Aceast˘ a tehnic˘ a se nume¸ ste backmarking ¸ si
poate fi de asemenea implementat˘ a prin redefinirea strategiilor de ˆ ıntoarcere
dar ¸ si de instant ¸iere ˆ ın acela¸ si timp, ˆ ıntrucˆ at folosesc date comune.
public class BackMarking extends AbstractStrategy
implements AssignmentStrategy, BackwardStrategy {
public Var back() { … }
public Object assign(Var var) { … }
}
4.4 Monitorizarea procesului de rezolvare
Monitorizarea procesului de rezolvare a unei probleme a fost realizat˘ a prin
implementarea ¸ sablonului de proiectare Observer [22], [51]. Acesta define¸ ste
o relat ¸ie de tip one-to-many ˆ ıntre un subiect, ˆ ın cazul nostru solverul, ¸ si
un num˘ ar oarecare de observatori astfel ˆ ıncˆ at atunci cˆ and starea subiectului

4.4. MONITORIZAREA PROCESULUI DE REZOLVARE 89
se modific˘ a tot ¸i observatoii sunt notificat ¸i asupra schimb˘ arii astfel ˆ ıncˆ at s˘ a
poat˘ a react ¸iona corespunz˘ ator. In acest fel, pot fi create obiecte de tip solver,
respectiv observator, independent unul de cel˘ alalt, aceast˘ a decuplare sporind
cu mult flexibilitatea ˆ ıntregului sistem.
Implementarea a fost realizat˘ a pe baz˘ a de evenimente corespunz˘ atoare
momentelor definitorii ale solverului, cu posibilitatea de a ad˘ auga noi tipuri
de evenimente f˘ ar˘ a a afecta corectitudinea obiectelor observator create deja.
Exist˘ a dou˘ a posibilit˘ at ¸i de comunicare ˆ ıntre subiect ¸ si observatori:
•Push model : subiectul transmite informat ¸ii detaliate legate de schim-
bare
•Poll model : subiectul transmite informat ¸ii minimale legate de schim-
bare, urmˆ and ca observatorul s˘ a execute interog˘ ari suplimentare pentru
a afla toate datele necesare.
Deoarece este de dorit impunerea unei ˆ ınc˘ arc˘ ari minime asupra sistemului ˆ ın
situat ¸ia cˆ and acesta este monitorizat, vom alege cel de-al doilea model. In
aceste condit ¸ii evenimente pot fi grupate astfel:
•SolverEvent – eveniment general ce notific˘ a faptul c˘ a solverul ¸ si-a schi-
mat starea, f˘ ar˘ a a cont ¸ine informat ¸ii suplimentare legate de schimbare.
•FilterEvent – eveniment derivat din SolverEvent ce va fi creat pentru
a semnala faptul c˘ a un algoritm de filtrare a redus problema init ¸ial˘ a sau
a detectat o inconsistent ¸˘ a; acesta va cont ¸ine ca informat ¸ie suplimentar˘ a
o referint ¸˘ a la obiectul de tip Filter responsabil cu aceast˘ a schimbare.
•EliminationEvent – eveniment derivat din FilterEvent va fi creat
pentru a semnala eliminarea unei valori din domeniul unei variabile
ˆ ın timpul execut ¸iei unui algoritm de filtrare ¸ si propagare; acesta va
cont ¸ine ca informat ¸ie suplimentar˘ a variabila, valoarea eliminat˘ a ¸ si de-
clan¸ satorul acesteia (dac˘ a este cazul).
Fiec˘ arui tip de eveniment ˆ ıi poate fi asociat un tip de observator prin
intermediul unei interfet ¸e dedicate ˆ ıns˘ a, pentru simplitate, a fost definit˘ a o
singur˘ a interfat ¸˘ a ¸ si anume SolverListener care s˘ a modeleze not ¸iunea ˆ ın
sens general. Pentru a p˘ astra similaritatea cu platforma Java pe care acest
solver este construit, a fost preferat termenul de listener celui de observer .
Metodele interfet ¸ei sunt intuitive a¸ sa ˆ ıncˆ at nu le vom mai detalia.

90 CAPITOLUL 4. CREAREA UNUI SOLVER CSP
public interface SolverListener {
/**
* Called when the solver starts to solve the problem.
*/
void solverStarted(SolverEvent event);
/**
* Called when the solver is finished.
*/
void solverFinished(SolverEvent event);
/**
* Called when the solver extends the solution.
*/
void solutionExtended(SolverEvent event);
/**
* Called when the solver restores the solution.
*/
void solutionRestored(SolverEvent event);
/**
* Called when the solver finds a solution.
*/
void solutionFound(SolverEvent event);
/**
* Called after the problem has been filtered.
*/
void problemFiltered(FilterEvent event);
/**
* Called when a value is removed by a filter.
*/
void valueRemoved(EliminationEvent event);
/**
* Called when a nogood is found.
*/
void nogoodFound(FilterEvent event);
}

4.4. MONITORIZAREA PROCESULUI DE REZOLVARE 91
La nivel de implementare a solverului, trebuie creat mecanismul deˆ ınregistrare
a observatorilor precum ¸ si de notificare a acestora. Astfel, ˆ ınregistrarea
observatorilor va fi f˘ acut˘ a ˆ ıntr-o list˘ a simplu ˆ ınl˘ ant ¸uit˘ a cu metode de tip
addListener , respectiv removeListener iar notificarea acestora va fi real-
izat˘ a printr-un obiect de tip EventHandler care va cont ¸ine metode speci-
fice apelate de solver la momentele definitorii, fiind responsabil cu crearea
evenimentelor ¸ si transmiterea acestora c˘ atre observatori. De exemplu, la
identificarea unei solut ¸ii act ¸iunea executat˘ a de solver va fi:
if (firingEvents) {
eventHandler.fireSolutionFound();
}
iar ˆ ın clasa EventHandler va exista metoda fireSolutionFound :
public void fireSolutionFound() {
SolverEvent event = new SolverEvent(solver);
for(SolverListener listener : solver.getListeners()) {
listener.solutionFound(event);
}
}
Pentru a defini un observator, tot ceea ce trebuie s˘ a facem este s˘ a oferim o
implementare interfet ¸ei SolverListener sau, mai simplu, s˘ a extindem adap-
torul SolverAdapter ¸ si s˘ a supradefinim metodele la care dorim s˘ a interact ¸ion˘ am.
S˘ a consider˘ am ca exemplu un observator responsabil cu afi¸ sarea pe ecran
a solut ¸iilor chiar ˆ ın timpul execut ¸iei algoritmului, pe m˘ asur˘ a ce acestea sunt
g˘ asite.
public class SolutionObserver extends SolverAdapter {
public void solutionFound(SolverEvent event) {
Tuple solution = event.getSolver().solution();
System.out.println("Solution found: " + solution);
}
}
Tot ceea ce mai trebuie s˘ a facem este s˘ a ˆ ınregistrˆ am observatorul, ca ˆ ın
exemplul de mai jos.

92 CAPITOLUL 4. CREAREA UNUI SOLVER CSP
Problem problem = new QueenProblem(8);
SystematicSolver solver = problem.createSolver();
solver.addListener(new SolutionObserver());
solver.solveAll();
4.5 Crearea constrˆ angerilor
Constrˆ angerile reprezint˘ a un aspect fundamental al oric˘ arui solver, imple-
mentarea acestora fiind critic˘ a pentru performant ¸ele sistemului. Pe lˆ ang˘ a
acest fapt, este necesar ca procesul cre˘ arii de noi constrˆ angeri s˘ a fie cˆ at mai
simplu, f˘ ar˘ a a presupune cuno¸ stint ¸e despre funct ¸ionarea intern˘ a a algorit-
mului de rezolvare. Dup˘ a cum am precizat deja ˆ ıntr-o sect ¸iune anterioar˘ a,
abstract ¸iunea de baz˘ a este reprezentat˘ a de clasa Constraint care define¸ ste:
•Modul de evaluare a unei tuple
•Care sunt tuplele admisibile
•Filtrul asociat constrˆ angerii.
4.5.1 Constrˆ angeri explicite
Constrˆ angerile explicite sunt reprezentate de clasa ExplicitConstraint ce
define¸ ste o constrˆ angere specificˆ and efectiv relat ¸ia asociat˘ a, cu alte cuvinte
prin enumerarea tuplelor permise, eventual cu penaliz˘ arile corespunz˘ atoare
ˆ ın cazul ret ¸elelor slabe.
In modelul clasic aceasta va cont ¸ine o structur˘ a de tip TupleSet , reprezentˆ and
tuplele permise:
public class ExplicitConstraint extends Constraint {
private TupleSet tuples;
public boolean contains(Tuple tuple) {
return tuples.contains(tuple);
}
public int eval(Tuple tuple) {
return (contains(tuple) ? ALLOWED : FORBIDDEN);
} …
}

4.5. CREAREA CONSTR ˆANGERILOR 93
In modelul aditiv, este necesar˘ a o structur˘ a de tip HashMap care s˘ a specifice
atˆ at tuplele admisibile cˆ at ¸ si penaliz˘ arile asociate acestora. O tupl˘ a este
admisibil˘ a dac˘ a evaluarea acesteia este mai mic˘ a decˆ at maximul structurii
de evaluare.
public class ExplicitConstraint extends Constraint {
private Map<Tuple, Integer> valuationMap;
public boolean contains(Tuple tuple) {
return (eval(tuple) < FORBIDDEN);
}
public int eval(Tuple tuple) {
return valuationMap.get(tuple);
}

}
Constrˆ angerile implicite – pot fi specificate prin intermediul unei funct ¸ii
de tip oracol capabil˘ a s˘ a evalueze o tupl˘ a ¸ si s˘ a determine dac˘ a aceasta este
permis˘ a sau nu, eventual s˘ a returneze costul nerespect˘ arii ei. Dup˘ a cum este
u¸ sor de observat, constrˆ angerile explicite pot fi privite ca un caz particular al
acestora, ˆ ıns˘ a implement˘ arile lor au fost create independent. Atˆ at ˆ ın modelul
clasic, cˆ at ¸ si ˆ ın cel aditiv, constrˆ angerile implicite sunt reprezentate de clasa
abstract˘ a Constraint , metoda care necesit˘ a a fi implementat˘ a fiind eval .
Aceasta va returna:
•ValuationStructure.MIN ,ValuationStructure.ALLOWED sau 0 dac˘ a
tupla este permis˘ a (nu are nici o penalizare)
•ValuationStructure.MAX sauValuationStructure.FORBIDDEN dac˘ a
tupla nu este admisibil˘ a
•un ˆ ıntreg ˆ ın intervalul deschis ( MIN, MAX ) pentru a specifica faptul
c˘ a tupla este admisibil˘ a dar atrage dup˘ a sine o anumit˘ a penalizare.

94 CAPITOLUL 4. CREAREA UNUI SOLVER CSP
4.5.2 Constrˆ angeri binare
Pentru comoditate ¸ si, t ¸inˆ and cont c˘ a ˆ ın modelarea multor probleme inter-
vin un num˘ ar mare de constrˆ angeri binare, a fost creat˘ a o clas˘ a special˘ a
pentru acestea ¸ si anume BinaryConstraint . Extinderea acesteia presupune
supradefinierea metodei eval care, spre deosebire de cazul general ˆ ın care ar-
gumentul este o tupl˘ a, prime¸ ste ca parametri cele dou˘ a valori ale variabilelor
constrˆ angerii. Astfel, implementarea unei constrˆ angeri simple de tipul x/negationslash=y
va fi realizat˘ a astfel:
public class NotEqual extends BinaryConstraint {
public NotEqual(Var x, Var y) {
super(x, y);
setName(x + " != " + y);
}
public int eval(Object a, Object b) {
return (a.equals(b) ? FORBIDDEN : ALLOWED);
}
}
Pentru constrˆ angerile binare nu este necesar˘ a ata¸ sarea vreunui algoritm de
filtrare ¸ si propagare, acest lucru fiind responsabilitatea algoritmului general
de arc-consistent ¸˘ a.
4.5.3 Constrˆ angeri oarecare
Crearea unor constrˆ angeri oarecare este put ¸in mai complex˘ a,ˆ ıntrucˆ at num˘ arul
variabilelor nu este neap˘ arat acela¸ si (de exemplu ˆ ın cazul lui alldiff ) iar,
ˆ ın evaluarea tuplei primite ca argument trebuie s˘ a se t ¸in˘ a cont ¸ si de faptul c˘ a
unele variabile pot s˘ a nu fie instant ¸iate. De asemenea, trebuie avut ˆ ın vedere
faptul c˘ a unei constrˆ angeri ˆ ıi poate fi asociat un algoritm propriu de filtrare
care s˘ a rezolve situat ¸ii de inconsistent ¸˘ a nedetectate de algoritmii generali.
S˘ a consider˘ am un prim exemplu ˆ ın care dorim s˘ a implement˘ am o con-
strˆ angere de tipul:/summationtext
i=1,kxi=c, unde ceste o constant˘ a ˆ ıntreag˘ a. O abor-
dare simplist˘ a ar fi cea ˆ ın care verific˘ am pur ¸ si simplu dac˘ a toate variablele
din tupla primit˘ a ca argument sunt instant ¸iate iar suma lor este cea dorit˘ a:

4.5. CREAREA CONSTR ˆANGERILOR 95
public class ConstantSum extends Constraint {
private int sum;
public ConstantSum(Var[] variables, int sum) {
super(variables);
this.sum = sum;
}
public int eval(Tuple tuple) {
int total = 0;
boolean complete = true;
for(Var var : variables) {
Object val = tuple.get(var);
if (val == null) {
complete = false;
} else {
total += (Integer)val;
}
}
if (complete) {
return (total == sum ? ALLOWED : FORBIDDEN);
}
return ALLOWED;
}
}
Fie ret ¸eauR= (X, D, C ), unde X={x, y, z},Dx=Dy=Dz={1,2,3}
iarCcont ¸ine o singur˘ a constrˆ angere: x+y+z= 9. Rezolvˆ and aceast˘ a
problem˘ a cu ajutorul implement˘ arii de mai sus, vom observa c˘ a algoritmul
de arc-consistent ¸˘ a nu poate face nici o filtrare, ceea ce ˆ ınseamn˘ a c˘ a ˆ ıntreg
spat ¸iul solut ¸iilor va fi explorat iar solverul va lua un num˘ ar inacceptabil (10)
de decizii gre¸ site ˆ ın urma c˘ arora trebuie s˘ a fac˘ a pasul ˆ ınapoi.
Se observ˘ a ˆ ıns˘ a c˘ a o decizie x=anu este valid˘ a ˆ ın situat ¸iile: a+
min(Dy) +min(Dz)>9 sau a+max(Dy) +max(Dz)<9. Generalizˆ and
aceast˘ a idee, o implementare mai eficient˘ a a metodei de evaluare pentru con-
strˆ angerea ConstantSum ar fi:
public int eval(Tuple tuple) {
int total = 0, min = 0, max=0;

96 CAPITOLUL 4. CREAREA UNUI SOLVER CSP
boolean complete = true;
for(Var var : variables) {
Object val = tuple.get(var);
if (val == null) {
complete = false;
Domain domain = (Domain) var.getDomain();
min += (Integer)domain.minimum();
max += (Integer)domain.maximum();
} else {
total += (Integer)val;
}
}
if (complete) {
return (total == sum? ALLOWED : FORBIDDEN);
}
if (total + min > sum) return FORBIDDEN;
if (total + max < sum) return FORBIDDEN;
return ALLOWED;
}
Rezolvˆ and din nou problema vom constata c˘ a solverul va efectua 6 elimin˘ ari
de valori, g˘ asind solut ¸ia corect˘ a f˘ ar˘ a a lua nici o decizie ¸ si evident, f˘ ar˘ a a
efectua nici o ˆ ıntoarcere:
Solver started.
Elimination: x != 1
Elimination: x != 2
Elimination: y != 1
Elimination: y != 2
Elimination: z != 1
Elimination: z != 2
Solution found: {x=3, y=3, z=3}
Solver finished.
A¸ sadar, implementarea corect˘ a a constrˆ angerilor are un impact foarte mare
asupra comportamentului solverului, permit ¸ˆ and algoritmilor de filtrare gen-
erali asociat ¸i s˘ a reduc˘ a ˆ ın mod eficient problema chiar de la ˆ ınceput ca ˆ ın
cazul exemplului anterior sau dup˘ a efectuarea unei decizii.

4.5. CREAREA CONSTR ˆANGERILOR 97
4.5.4 Constrˆ angeri globale
FieC={C1, …, C k}o mult ¸ime de constrˆ angeri. Numim constrˆ angere global˘ a
constrˆ angerea CGdefinit˘ a sub forma unei conjunct ¸ii ˆ ıntre constrˆ angerile
mult ¸imiiC:
CG=C1∧C2∧…∧Ck
Din punctul de vedere al implement˘ arii lor, constrˆ angerile globale difer˘ a
doar ˆ ın mod teoretic fat ¸˘ a de cazul general, ˆ ın sensul c˘ a sunt constrˆ angeri cu
un num˘ ar oarecare de parametri c˘ arora trebuie s˘ a le implement˘ am metoda
de evaluare a tuplelor. Diferent ¸a notabil˘ a fat ¸˘ a de cele obi¸ snuite este c˘ a,
pe lˆ ang˘ a evaluarea unei tuple, constrˆ angerile globale pot avea algoritmi de
filtrare proprii, pertinent ¸i care s˘ a ˆ ımbun˘ at˘ at ¸easc˘ a comportamentul general
al solverului detectˆ and situat ¸ii de inconsistent ¸˘ a sau efectuˆ and operat ¸ii de
filtrare la nivelul ˆ ıntregii probleme.
S˘ a consider˘ am ca exemplu constrˆ angerea alldiff (x1, …, x k) =/logicalandtext
i/negationslash=jxi/negationslash=xj
¸ si s˘ a vedem care ar fi avantajul utiliz˘ arii acestei constrˆ angeri globale fat ¸˘ a de
folosirea individual˘ a a celorlalte kconstrˆ angeri binare din care este format˘ a.
FieR= (X, D, C ), unde X={x, y, z}o ret ¸ea pe care este definit˘ a con-
strˆ angerea alldiff (x, y, z ).
•Cazul 1 :Dx={1,2}, Dy={1,2}, Dz={1,2}
Luate ˆ ın particular constrˆ angerile x/negationslash=y,y/negationslash=z,z/negationslash=xnu pot de-
termina algorimtul general de arc-consistent ¸˘ a s˘ a elimine vreo valoare
sau s˘ a detecteze inconsistent ¸a. Cu toate acestea, ret ¸eaua este evident,
inconsistent˘ a.
•Cazul 2 :Dx={1,2,3,4}, Dy={1,2}, Dz={1,2}
Valorile 1 ,2 trebuie eliminate din Dxdar, dou˘ a cˆ ate dou˘ a, variabilele
ret ¸elei sunt arc-consistente una relativ la cealalt˘ a, ceea ce ˆ ınseamn˘ a c˘ a
nici o filtrare nu va fi efectuat˘ a de algoritmul general.
Implementarea eficient˘ a a unei constrˆ angeri globale trebuie a¸ sadar s˘ a ofere
un algoritm propriu de filtrare care s˘ a permit˘ a detectarea situat ¸iilor de
inconsistent ¸˘ a ce nu pot fi determinate de algoritmul general, oferind astfel
putere de filtrare sporit˘ a ˆ ıntregului sistem.
Clasa AllDiff este definit˘ a cu o implementare normal˘ a a metodei de eval-
uare, ˆ ın care sunt comparate dou˘ a cˆ ate dou˘ a valorile variabilelor instant ¸iate
ale tuplei primite ca argument. Pe lˆ ang˘ a acesta este specificat ˆ ıns˘ a un algo-
rimt dedicat de filtrare AllDiffFilter .

98 CAPITOLUL 4. CREAREA UNUI SOLVER CSP
public class AllDiff extends Constraint {
public AllDiff(Var … variables) {
super(variables);
setFilter(new AllDiffFilter());
}
public int eval(Tuple tuple) {
// Compara doua cate doua valorile

}
}
Clasa AllDiffFilter trebuie s˘ a implementeze interfat ¸a Filter (sau s˘ a ex-
tind˘ a AbstractFilter ), oferind algoritmul propriu-zis. Mai jos este dat˘ a
o variant˘ a simpl˘ a capabil˘ a s˘ a rezolve situat ¸ii de inconsistent ¸˘ a folosind gra-
ful valorilor. Reamintim c˘ a graful valorilor GV = (X, Y, E ) asociat unei
constrˆ angeri Ceste definit astfel:
•X=X(C) – variabilele care participl˘ a ˆ ın constrˆ angerea C
•Y=D(X(C)) – valorile care pot fi atribuite variabilelor din X(C)
•(x, a)∈E⇔a∈D(x)
Consistent ¸a lui alldiff este obt ¸inut˘ a dac˘ a ¸ si numai dac˘ a ˆ ın acest graf exist˘ a
un cuplaj de cardinal maxim care acoper˘ a mult ¸imea X, satisf˘ acˆ and astfel
toate variabilele.
private class AllDiffFilter extends AbstractFilter {

public boolean filter() {
Graph graph = new Graph();
// Cream graful valorilor

BipartiteMaximumMatching alg =
new BipartiteMaximumMatching(graph);
Map<Node, Node> matching = alg.maximumMatching();
int n = variables.length;
boolean consistent = (matching.size() == n);
return consistent;
}

4.6. RET ¸ELE SLABE DE CONSTR ˆANGERI 99
4.6 Ret ¸ele slabe de constrˆ angeri
Majoritatea sistemele existente de satisfacere a constrˆ angerilor ofer˘ a posibil-
itatea de a rezolva ¸ si probleme de optimizare. Acestea sunt definite ˆ ın mod
uzual sub forma unei ret ¸ele clasice de constrˆ angeri pentru care este specifi-
cat˘ a ¸ si o anumit˘ a funct ¸ie ce trebuie optimizat˘ a (minimizat˘ a sau maximizat˘ a)
eventual sub forma unei meta-variabile. Procesul de rezolvare ˆ ın acest caz
presupune, pe lˆ ang˘ a identificarea unei solut ¸ii admisibile (care s˘ a satisfac˘ a
toate constrˆ angerile) ¸ si demonstrarea optimalit˘ at ¸ii acesteia. Spre exemplu,
choco [31] define¸ ste metodele minimize ¸ simaximize asociate unei probleme
ce au ca argument variabila obiectiv.
Un dezavantaj al acestei abord˘ ari ˆ ıl reprezint˘ a faptul c˘ a permite doar o
abordare uni-criterial˘ a a cazului general ¸ si nu poate fi u¸ sor folosit˘ a ˆ ın situat ¸ia
cˆ and suntem interesat ¸i de optimizare multi-criterial˘ a ˆ ın care este c˘ autat˘ a o
solut ¸ie ”satisf˘ ac˘ atoare” din mai multe puncte de vedere.
Ceea ce ne propunem este s˘ a implement˘ am exact modelul ret ¸elelor slabe
de constrˆ angeri, ˆ ın care fiec˘ arei constrˆ angeri ˆ ıi este asociat˘ a o valoare ce
semnific˘ a nivelul s˘ au de preferint ¸˘ a, cu alte cuvinte cˆ at de important˘ a este
respectarea ei. Dup˘ a cum am v˘ azut ˆ ın capitolul dedicat modelelor CSP, unei
ret ¸ele slabe de constrˆ angeri ˆ ıi poate fi asociat˘ a o structur˘ a de evaluare ce
define¸ ste mult ¸imea elementelor care vor fi folosite pentru evalu˘ ari precum ¸ si
operatorul folosit pentru a specifica modul de combinare a acestora. Deoarece
ne-am propus s˘ a putem folosi ˆ ın mod unitar atˆ at modelul clasic cˆ at ¸ si cel
aditiv, s˘ a vedem cum putem realiza acest lucru.
4.6.1 Structuri de evaluare
Dup˘ a cum am precizat, fiec˘ arei probleme trebuie s˘ a ˆ ıi asociem o structur˘ a
de evaluare. Aceasta este descris˘ a de interfat ¸a ValuationStructure ce are
urm˘ atoarea definit ¸ie:
public interface ValuationStructure {
// Extremitatile domeniului
int MIN=0;
int MAX=Integer.MAX_VALUE;
int ALLOWED=MIN;
int FORBIDDEN=MAX;

100 CAPITOLUL 4. CREAREA UNUI SOLVER CSP
//Operatorul de combinare a preferintelor
int plus(int a, int b);
// Operatorul ce defineste ordinea totala
int compareTo(int a, int b);
}
Modelul clasic specific˘ a un domeniu format doar din dou˘ a valori reprezentˆ and
satisfacerea/nesatisfacerea, acestea fiind de fapt elementul neutru ( ALLOWED =
0) respectiv de scufundare // ( FORBIDDEN =∞) al structurii de evalu-
are.
public class ClassicalValuation implements ValuationStructure{
// SI logic
public int plus(int a, int b) {
return (a == FORBIDDEN ||
b == FORBIDDEN ? FORBIDDEN : ALLOWED);
}
// relatia de ordine: ALLOWED < FORBIDDEN
public int compareTo(int a, int b) {
return a – b;
}
}
Modelul aditiv are ca domeniu mult ¸imea numerelor naturale, ALLOWED =
0 semnificˆ and satisfacerea deplin˘ a a unei constrˆ angeri, FORBIDDEN =∞
inadmisibilitatea iar valorile intermediare fiind nivele de preferint ¸˘ a.
public class AdditiveValuation implements ValuationStructure {
// adunarea intregilor
public int plus(int a, int b) {
return a + b;
}
// ordinea numerelor naturale
public int compareTo(int a, int b) {
return a – b;

4.6. RET ¸ELE SLABE DE CONSTR ˆANGERI 101
}
}
Folosind aceast˘ a abordare, putem concepe o metod˘ a de evaluare a unei
tuple care s˘ a fie independent˘ a de modelul CSP pe care se lucreaz˘ a, gener-
alizˆ and astfel mecanismul de rezolvare:
public int eval(Tuple tuple) {
int cost = 0;
VarSet vars = tuple.variables();
ConstraintSet cs = problem.getConstraints(vars);
ValuationStructure valuation = problem.getValuationStructure();
for(Constraint c : cs) {
int eval = c.eval(tuple);
if (eval == ValuationStructure.FORBIDDEN) {
return eval;
}
cost = valuation.plus(cost, c.eval(tuple));
}
return cost;
}
4.6.2 Modelarea unei probleme de optimizare
S˘ a consider˘ am un exemplu clasic de optimizare ¸ si anume ”problema rucsac-
ului”: date un num˘ ar nde articole, fiecare avˆ and o greutate ¸ si un profit , ¸ si
un rucsac de capacitate ctrebuie s˘ a select˘ am un num˘ ar de articole care s˘ a
ˆ ıncap˘ a ˆ ın rucsac ¸ si care s˘ a maximizeze profitul. Pentru fiecare articol i= 1, n
s˘ a not˘ am wigreutatea, piprofitul adus de acesta ¸ si xivariabila asociat˘ a, care
poate avea valorile 0 sau 1. Constrˆ angerea care trebuie respectat˘ a este:
/summationdisplay
i=1,nwixi≤c
Funct ¸ia care trebuie maximizat˘ a este:
f(x1, …, x n) =/summationdisplay
i=1,npixi
Pentru modelarea acestei problem vom calcula o limit˘ a maxim˘ a M=/summationtext
i=1,npi
a funct ¸iei obiectiv ¸ si vom introduce o constrˆ angere slab˘ a de tipul f(x1, …, x n) =

102 CAPITOLUL 4. CREAREA UNUI SOLVER CSP
M. Nivelul de preferint ¸˘ a al unei tuple a= (x1=a1, …, x k=ak) va fi
|M−f(a)|, acesta avˆ and semnificat ¸ia c˘ a dorim s˘ a ne ˆ ındep˘ art˘ am cˆ at mai
put ¸in de la maximul posibil Mcare poate fi obt ¸inut doar ˆ ın condit ¸ia ˆ ın care
toate articolele ˆ ıncap ˆ ın rucsac.
public class KnapsackProblem extends Problem {
public KnapsackProblem() {
setValuationStructure(new AdditiveValuation());
int n = 6;
int w[] = {100, 50, 45, 20, 10, 5};
int p[] = { 40, 35, 18, 4, 10, 2};
int c = 100;
int m = 0;
for(int i=0; i<n; i++) {
m += p[i];
}
Domain domain = Domain.createIntEnum(0,1);
Var[] x = createVariables(n, domain);
addConstraint(new ScalarProductLeq (x, w, c));
addConstraint(new SoftScalarProduct(x, p, m));
}
}
Rezolvˆ and problema vom obt ¸ine solut ¸ia: x[0] = 0 , x[1] = 1 , x[2] = 1 , x[3] =
0, x[4] = 0 , x[5] = 1, optimul fiind 35 + 18 + 2 = 55.
4.6.3 Optimizare multi-criterial˘ a
In situat ¸ia ˆ ın care o problem˘ a clasic˘ a de satisfacere a constrˆ angerilor nu are
solut ¸ie putem spune c˘ a este supra-constrˆ ans˘ a . Spre deosebire de exemplul
anterior ˆ ın care am modelat o problem˘ a clasic˘ a de optimizare ce definea o
funct ¸ie obiectiv, suntm acum ˆ ın situat ¸ia s˘ a relax˘ am o serie de constrˆ angeri,
eventual toate, ceea ce ne conduce la o situat ¸ie de optimizare multi-criterial˘ a.
S˘ a consider˘ am un exemplu de echilibrare a raportului calitate/pret ¸. Sunt
datenmateriale pe care dorim s˘ a le achizit ¸ion˘ am pentru execut ¸ia unei lucr˘ ari.

4.6. RET ¸ELE SLABE DE CONSTR ˆANGERI 103
Fiecare material poate fi procurat de la mai multe firme produc˘ atoare, fiec˘ areia
dintre acestea corespunzˆ andu-i o anumit˘ a calitate ¸ si un anumit pret ¸. Scopul
este s˘ a achizit ¸ion˘ am aceste materiale astfel ˆ ıncˆ at:
•s˘ a minimiz˘ am pret ¸ul ¸ si
•s˘ a maximiz˘ am calitatea
Evident, ˆ ın acest caz optimiz˘ arile nu pot fi f˘ acute la modul absolut ci trebuie
s˘ a specific˘ am ˆ ın ce m˘ asur˘ a punem accentul pe pret ¸ ¸ si ˆ ın ce m˘ asur˘ a pe calitate.
Pentru fiecare material i= 1, n¸ si fiecare firm˘ a produc˘ atoare j= 1, ms˘ a
not˘ am qijcalitatea oferit˘ a de respectiva firm˘ a ¸ si pijpret ¸ul iar xijvariabila
asociat˘ a perechii (material, firm˘ a), care poate avea valorile 0 sau 1. S˘ a
presupunem c˘ a pret ¸urile sunt luate dintr-un domeniu [0 , δ] iar calitatea va
fi specificat˘ a procentual, valoarea de 100 reprezentˆ and o calitate excelent˘ a.
Constrˆ angerile slabe ale ret ¸elei vor fi:
/summationdisplay
i=1,n;j=1,mpijxij= 0
¸ si/summationdisplay
i=1,n;j=1,mcijxij= 100
Pe lˆ ang˘ a acestea va trebui s˘ a specific˘ am faptul c˘ a vom cump˘ ara un material
de la o singur˘ a firm˘ a:
∀i= 1, n/summationdisplay
j=1,mxij= 1
In cazul ˆ ın care dorim s˘ a echilibr˘ am ponderea pe care au calitatea ¸ si
pret ¸ul ˆ ın evaluarea final˘ a ar trebui ca domeniile din care sunt ale¸ si scalarii
pij¸ sicijs˘ a fie acelea¸ si: [0 ,100]. Pentru aceasta poate fi determinat pret ¸ul
cel mai mic al fiec˘ arui material ¸ si exprimarea pret ¸ului s˘ a o facem procentual
ˆ ın funct ¸ie de acest minim: p/prime
ij= ((min k=1,mpik)∗100)/pij. Bineˆ ınt ¸eles, dac˘ a
dorim s˘ a punem accentul pe calitate sau pe pret ¸, putem amplifica valorile
pij, respectiv cijcorespunz˘ ator.
Modelarea problemei va fi:
addConstraint(new SoftScalarProduct(x, q, 100));
addConstraint(new SoftScalarProduct(x, p, 0));

104 CAPITOLUL 4. CREAREA UNUI SOLVER CSP
Optimizarea multi-criterial˘ a ar putea fi rezolvat˘ a ¸ si printr-o modelare
corespunz˘ atoare cu ajutorul unei singure funct ¸ii obiectiv, ˆ ıns˘ a ˆ ın cazul prob-
lemelor complexe, cu multe tipuri de constrˆ angeri slabe, aceast˘ a abordare ar
fi ineficient˘ a atˆ at din punctul de vedere al formaliz˘ arii cˆ at ¸ si al rezolv˘ arii.

Capitolul 5
Explicat ¸ii
5.1 Introducere
Sistemele actuale de rezolvare automat˘ a a problemelor modelate cu ajutorul
constrˆ angerilor sunt capabile ca, plecˆ and de la o ret ¸ea specificat˘ a de con-
strˆ angeri, s˘ a ofere una sau toate solut ¸iile problemei ˆ ın cazul ˆ ın care aceasta
este consistent˘ a sau s˘ a detecteze faptul c˘ a nu exist˘ a nici o solut ¸ie, caz ˆ ın care
cele mai multe dintre ele nu vor face altceva decˆ at s˘ a afi¸ seze un mesaj infor-
mativ de tipul ”Problema nu are solut ¸ie …”. In situat ¸ia din urm˘ a r˘ amˆ ane
la latitudinea utilizatorului s˘ a-¸ si dea seama care este motivul pentru care
sistemul nu a g˘ asit nici o solut ¸ie: a fost o eroare de funct ¸ionare, modelarea
problemei a fost gre¸ sit˘ a sau ˆ ıntr-adev˘ ar problema este inconsistent˘ a ? Ex-
ist˘ a a¸ sadar o serie de informat ¸ii suplimentare care ar trebui oferite de c˘ atre
solverele CSP, cum ar fi:
•De ce problema nu are nici solut ¸ie ?
•De ce o variabil˘ a xnu poate lua valoarea a?
Cu alte cuvinte, este necesar un mecanism care s˘ a explice procesul de deter-
minare a solut ¸iei sau de stabilire a inconsistent ¸ei.
Unele solvere, cum ar fi choco [31] cu extensia PaLM (Propagation and
Learning with Move) [6], ofer˘ a instrumente pentru generarea de explicat ¸ii
ˆ ıns˘ a acestea se refer˘ a ˆ ın special la informat ¸ii care s˘ a explice starea curent˘ a
a sistemului. Ceea ce ne propunem ˆ ın continuare este s˘ a cre˘ am o modali-
tate simpl˘ a de generare a unei structuri de date din care s˘ a putem extrage un
rat ¸ionament complet ¸ si clar care s˘ a demonstreze inconsistent ¸a unei probleme.
105

106 CAPITOLUL 5. EXPLICAT ¸II
Procesul de generare se va desf˘ a¸ sura pe m˘ asura execut ¸iei aloritmului de re-
zolvare, acesta fiind de fapt un observator asociat solverului ¸ si prin urmare
poate fi utilizat ¸ si ca modalitate de inspectare a st˘ arii curente a problemei.
5.2 Ce ˆ ınseamn˘ a o explicat ¸ie ?
FieR= (X, D, C ) o ret ¸ea de constrˆ angeri. O situat ¸ie de e¸ sec a unui algoritm
sistematic de c˘ autare este identificat˘ a de un nod al arborelui de c˘ autare de
unde explorarea nu mai poate continua ¸ si poate fi descris˘ a prin instant ¸ierea
part ¸ial˘ a curent˘ a: a= (x1=a1, …, x k=ak). O astfel de tupl˘ a va fi numit˘ a
gre¸ sit˘ a (nogood) [42] ¸ si vom scrie:
C/turnstileleft¬(x1=a1, …, x k=ak)
Evident, nici o solut ¸ie nu poate include o tupl˘ a gre¸ sit˘ a. Expresia de mai sus
poate fi scris˘ a folosind operatori logici ¸ si astfel:
¬(x1=a1∧…∧xk=ak)
De asemenea, pentru oricare din variabilele xj, j∈[1..k] putem scrie:
/logicalanddisplay
i∈[1..k]\j(xi=ai)⇒xj/negationslash=aj
In acest context, problema pe care o vom aborda va fi determinarea mo-
tivului pentru care o tupl˘ a este gre¸ sit˘ a. Vom numi explicat ¸ia e¸ secului unei
tuple a¸ si vom nota expl(¬a) un rat ¸ionament deductiv ale c˘ arui premize sunt
ret ¸eaua dat˘ a ¸ si tupla a= (x1=a1, …, x k=ak) iar concluzia trebuie s˘ a fie
c˘ a ret ¸eaua R/primeobt ¸inut˘ a din Rdup˘ a reducerea domeniilor D1={a1}, …, D k=
{ak}este inconsistent˘ a. In cazul ˆ ın care tupla este de forma x=avom nota
expl(¬(a)) =expl(x/negationslash=a).
Determinarea unei modalit˘ at ¸i de a construi explicat ¸ia unui e¸ sec ne va
oferi r˘ aspunsuri la ambele ˆ ıntreb˘ ari puse la ˆ ınceput:
•expl(x/negationslash=a): de ce o variabil˘ a nu poate lua o anumit˘ a valoare,
•/uniontext
a∈Dxexpl(x/negationslash=a): de ce problema nu are nici o solut ¸ie.

5.2. CE ˆINSEAMN ˘A O EXPLICAT ¸IE ? 107
Unitatea atomic˘ a a unui rat ¸ionament (ˆ ın sensul c˘ a nu mai necesit˘ a explicat ¸ii
suplimentare) va fi ˆ ın general constrˆ angerea responabil˘ a cu violarea unei tu-
ple. De exemplu, fie ret ¸eaua R= (X,D,C),X={x, y},Dx=Dy={0,1}¸ si
avˆ and definit˘ a o singur˘ a constrˆ angere x/negationslash=y.
Atunci expl(¬(x= 0, y= 0)) ={x/negationslash=y}¸ si acest lucru nu mai necesit˘ a
explicat ¸ii suplimentare.
Trebuie s˘ a avem ˆ ın vedere ¸ si situat ¸ia ˆ ın care algoritmii asociat ¸i unei
constrˆ angeri, de filtrare sau chiar de evaluare a unei tuple, se bazeaz˘ a pe
rat ¸ionamente nebanale. Fie ret ¸eau R= (X, D, C ), unde X={x, y, z},
Dx=Dy=Dz={1,2,3}iarCcont ¸ine o singur˘ a constrˆ angere: x+y+z= 9.
O explicat ¸ie de tipul expl(¬(x= 1)) ={x+y+z= 9}nu satisface criteriul
de claritate pe care dorim s˘ a-l oferim, ˆ ıntrucˆ at motivul pentru care respectiva
constrˆ angere nu poate fi satisf˘ acut˘ a ascunde o serie de rat ¸ionamente efectu-
ate de algoritmii specifici ai constrˆ angerii. Rezultatul pe care am dori s˘ a-l
vedem este:
x= 1∧max(Dy) = 3∧max(Dz) = 3⇒x+y+z≤7
Acesta este ˆ ıns˘ a un rat ¸ionament specific constrˆ angerii impuse, deci trebuie
s˘ a avem ˆ ın vedere integrarea explicat ¸iilor oferite de algoritmul sistematic
de rezolvare a problemei, de algoritmii generali de filtrare precum ¸ si de cei
specifici constrˆ angerilor.
In continuare, vom presupune dat˘ a tupla care trebuie explicat˘ a ¸ si vom
notaR= (X, D, C ) ret ¸eaua de constrˆ angeri obt ¸inut˘ a din cea init ¸ial˘ a dup˘ a
reducerea domeniilor. In acest fel, problema general˘ a devine demonstrarea
inconsistent ¸ei ret ¸elei R.
5.2.1 Cum poate fi explicat˘ a inconsistent ¸a ?
Obt ¸inerea unei solut ¸ii a ret ¸elei Rprin intermediul unui algoritm sistematic
poate fi v˘ azut˘ a ca o succesiune finit˘ a de transform˘ ari R=R0→R1→…→
Rf, unde Ri¸ siRjsunt echivalente iar Ri+1≺Ri(ˆ ın sensul c˘ a spat ¸iul de
c˘ autare al lui Ri+1este mai mic decˆ at al lui Ri) iar Rfare toate domeniile
formate dintr-un singur element. Etapa de transformare Ri→Ri+1este
realizat˘ a prin:
1.Luarea unei decizii de instant ¸iere a unei variabile: x=a, act ¸iune ce
are ca efect reducerea domeniului lui xlaDx={a}.

108 CAPITOLUL 5. EXPLICAT ¸II
2.Propagarea deciziei luate la pasul 1, folosind algoritmi de filtrare care
s˘ a reduc˘ a ˆ ın continuare domeniile variabilelor problemei.
Ridecizie−−−−−−−−−−−→
propagare/filtrareRi+1
Dup˘ a cum am v˘ azut, algoritmii de filtrare pot fi globali (cum ar fi algorit-
mul general de arc-consistent ¸˘ a) sau locali (cum ar fi cei asociat ¸i unor con-
strˆ angeri). Indiferent de tipul acestora, ˆ ın construirea unei explicat ¸ii trebuie
s˘ a ret ¸inem motivul pentru care o anumit˘ a tupl˘ a este gre¸ sit˘ a, respectiv de ce
o anumit˘ a valoare este eliminat˘ a din domeniul unei variabile.
Fiea= (x1=a1, …, x k=ak) o instant ¸iere part ¸ial˘ a. Demonstrarea
faptului c˘ a aceasta este gre¸ sit˘ a poate fi obt ¸inut˘ a ˆ ın urm˘ atoarele modalit˘ at ¸i:
(E1) Exist˘ a o constrˆ angere ccare nu este satisf˘ acut˘ a de a.
(E2) Exist˘ a o variabil˘ a xpentru care:∀a∈Dxa/prime= (a, x=a) este gre¸ sit˘ a.
(E3) In urma aplic˘ arii algoritmilor de filtrare ¸ si propagare a deciziilor xi=ai,
domeniul unei variabile a devenit vid sau a fost detectat˘ a ˆ ın alt mod
inconsistent ¸a.
S˘ a consider˘ am ca prim exemplu problema reginelor pe o tabl˘ a de dimen-
siuni 3×3 ¸ si s˘ a explic˘ am inconsistent ¸a acesteia. In absent ¸a oric˘ arui algoritm
de filtrare ¸ si propagare, demonstrat ¸ia ar fi format˘ a doar din reguli de tip
(E1), respectiv (E2):
Explain problem is inconsistent
Explain {x[0]=0} is inconsistent
{x[0]=0} => x[1] != 0
{x[0]=0} => x[1] != 1
Explain {x[0]=0, x[1]=2} is inconsistent
{x[0]=0, x[1]=2} => x[2] != 0
{x[0]=0, x[1]=2} => x[2] != 1
{x[0]=0, x[1]=2} => x[2] != 2
Explain {x[0]=1} is inconsistent
{x[0]=1} => x[1] != 0
{x[0]=1} => x[1] != 1

5.2. CE ˆINSEAMN ˘A O EXPLICAT ¸IE ? 109
{x[0]=1} => x[1] != 2
Explain {x[0]=2} is inconsistent
{x[0]=2} => x[1] != 1
{x[0]=2} => x[1] != 2
Explain {x[0]=2, x[1]=0} is inconsistent
{x[0]=2, x[1]=0} => x[2] != 0
{x[0]=2, x[1]=0} => x[2] != 1
{x[0]=2, x[1]=0} => x[2] != 2
Dup˘ a cum se observ˘ a, mecansimul de explicare afi¸ seaz˘ a ˆ ın acest caz ˆ ıntreg
spat ¸iul de c˘ autare al problemei.
5.2.2 Mult ¸imi suport
Vom numi mult ¸ime suport ¸ si not˘ am support (x=a, y) ”sust ¸inerea” pe care o
ofer˘ a variabila yatribuirii x=a, cu alte cuvinte:
support (x=a, y) ={b∈Dy|(x=a, y=b)consistenta}
Pentru x¸ siadate, dac˘ a exist˘ a o variabil˘ a yastfel ˆ ıncˆ at support (x=a, y) =∅
atunci valoarea apoate fi eliminat˘ a din domeniul lui x.
In cazul problemei anterioare mult ¸imile suport sunt:
support x[0] x[1] x[2]
x[0] = 0 -{2}{1}
x[0] = 1 -∅{0,2}
x[0] = 2 -{0}{1}
x[1] = 0{2} -{2}
x[1] = 1∅ -∅
x[1] = 2{0} -{0}
x[2] = 0{1}{2} –
x[2] = 1{0,2}∅ –
x[2] = 2{1}{0} –
Din tabelul de mai sus este simplu de observat c˘ a x[0] = 1, x[1] = 1 ¸ si
x[2] = 1 nu sunt instant ¸ieri valide deoarece pentru fiecare dintre ele exist˘ a
cel put ¸in o mult ¸ime suport vid˘ a.
Folosind not ¸iunea de mult ¸ime suport, algoritmul general de arc-consistent ¸˘ a
poate fi scris astfel (algoritmul 13):

110 CAPITOLUL 5. EXPLICAT ¸II
Algorithm 13 Stabile¸ ste arc-consistent ¸a unei ret ¸ele (AC-4)
Intrare:R0= (X, D, C ) o ret ¸ea de constrˆ angeri
R=R0
Construie¸ steSmult ¸imea tuturor mult ¸imilor support
queue =∅
{queue este lista tuturor mult ¸imilor suport vide }
for all E=support (x=a, y)∈Sdo
ifE=∅then
queue =queue∪{(x, y, a )}
end if
end for
while queue/negationslash=∅do
Select˘ am un triplet ( x, y, a ) din lista queue
queue =queue−{(x, y, a )}
Dx=Dx−{a}
ifDx=∅then
{Ret ¸eaua este inconsistent˘ a }
return null
end if
for all A=support (z=c, x)∈Sdo
A=A−{a}
ifA=∅then
queue =queue∪{(z, x, c )}
end if
end for
end while
returnR

5.3. CONSTRUIREA UNEI EXPLICAT ¸II 111
Din perspectiva acestui algoritm, motivul pentru care o valoare aeste
eliminat˘ a din domeniul unei variabile xeste pierdereaˆ ınˆ ıntregime a sust ¸inerii
din partea unei anumite variabile y:∃y∈X support (x=a, y) =∅. Dac˘ a
init ¸ial support (x=a, y) ={b1, …, b t}atunci:
expl(x/negationslash=a) =expl(y/negationslash=b1)∪expl(y/negationslash=b2)∪…∪expl(y/negationslash=bt)
Revenind la exemplul anterior, putem explica inconsistent ¸a problemei
astfel:
Explain problem is inconsistent
Explain x[2] != 0
– support(x[2]=0, x[0])=[1]
Explain x[0] != 1
– support(x[0]=1, x[1])=[]
Explain x[2] != 1
– support(x[2]=1, x[1])=[]
Explain x[2] != 2
– support(x[2]=2, x[0])=[1]
Explain x[0] != 1
– support(x[0]=1, x[1])=[]
5.3 Construirea unei explicat ¸ii
5.3.1 Graful elimin˘ arilor
Fiea= (x1=a1, …, x k=ak) solut ¸ia part ¸ial˘ a curent˘ a ¸ si x=xk+1urm˘ atoarea
variabil˘ a ce trebuie instant ¸iat˘ a.
Numim eliminare explicit˘ a a valorii adinDxexistent ¸a unei constrˆ angeri
ccu proprietatea c˘ a ( x1=a1, …, x k=ak, x=a) nu satisface c.
Numim eliminarea dedus˘ a a valorii adinDxexistent ¸a unui algoritm de
filtrare/propagare care, aplicat ret ¸elei curente rezultate ˆ ın urma deciziilor
xi=ai, a determinat o situat ¸ie de tipul support (x=a, y) =∅¸ siy/negationslash∈
{x1, …, x k}. Variabila yva fi numit˘ a declan¸ sator (trigger) al elimin˘ arii.
Mult ¸imea elimin˘ arilor explicite ¸ si care pot fi deduse prin propagare din
instant ¸ierea curent˘ a formeaz˘ a graful elimin˘ arilor aferent tuplei a. Acesta va
fi construit astfel:

112 CAPITOLUL 5. EXPLICAT ¸II
•Vˆ arfurile grafului corespund elimin˘ arilor efectuate. Pentru un vˆ arf u=
elim(x, a) vom nota:
–var(u) =x
–val(u) =a
–context (u) = (x1=a1, …, x k=ak)
•Dac˘ a ˆ ınainte de aplicarea algoritmilor de filtrare support (x=a, y) =
{b1, …, b t}¸ si ˆ ın urma propag˘ arilor support (x=a, y) =∅atunci vˆ arful
corespunz˘ ator elimin˘ arii lui adinDxva avea ca vecini cele tvˆ arfuri
corespunz˘ atoare elimin˘ arilor lui bidinDy.
Un graf de elimin˘ ari se nume¸ ste explicativ dac˘ a are proprietatea c˘ a exist˘ a o
variabil˘ a x¸ si o mult ¸ime de vˆ arfuri u1, …, u kastfelˆ ıncˆ at:∀i= 1, k var (ui) =x
¸ si/uniontext
i=1,kval(ui) =Dx. Intr-un graf explicativ, un vˆ arf u=elim(x, a) cu
proprietatea c˘ a, ˆ ın urma acestei elimin˘ ari, Dx=∅se nume¸ ste final ¸ si, prin
extensie, vom numi variabila sa final˘ a ˆ ın conextul dat. Evident, construct ¸ia
grafului se va opri atunci cˆ and a fost ad˘ augat un nod final, ˆ ıntrucˆ at acesta
marcheaz˘ a determinarea inconsistent ¸ei instant ¸ierii curente.
Un graf explicativ normalizat este un graf explicativ din care au fost
eliminate toate componentele conexe care nu cont ¸in o eliminare a unei valori
din domeniul variabilei finale. Cu alte cuvinte, acesta este subgraful indus
de vˆ arfurile ce cont ¸in variabila final˘ a.
Pentru simplitate, graful elimin˘ arilor va mai fi numit reducere .
S˘ a analiz˘ am un alt exemplu ˆ ın care se dore¸ ste explicarea faptului c˘ a nu
exist˘ a nici o solut ¸ie ˆ ın problema reginelor pe o tabl˘ a 4 ×4 ˆ ın care o regin˘ a s˘ a
fie plasat˘ a chiar ˆ ıntr-unul din cele patru colt ¸uri: explain (x[0]/negationslash= 0).
Graful elimin˘ arilor pentru tupla ( x[0] = 0) este:

5.3. CONSTRUIREA UNEI EXPLICAT ¸II 113
In situat ¸ia de mai sus putem deduce c˘ a tupla ( x[0] = 0) este gre¸ sit˘ a
ˆ ıntrucˆ at domeniul variabilei x[3] a devenit vid ˆ ın urma reducerilor efectuate.
De asemenea, se observ˘ a c˘ a eliminarea elim(x[2],2) nu influent ¸eaz˘ a ˆ ın nici
un fel demonstrat ¸ia inconsistent ¸ei, deci vˆ arful respectiv poate fi eliminat din
graf. Explicat ¸ia ce va fi construit˘ a din acest graf este:
Explain {x[0]=0} is inconsistent
<<< x[3] fails… >>> x[3] este finala
– {x[0]=0} => x[3] != 0 explicita
Explain x[3] != 1 dedusa
– support(x[3]=1, x[2])=[3] (trigger x[2])
Explain x[2] != 3 dedusa
– support(x[2]=3, x[1])=[0, 1] (trigger x[1])
– {x[0]=0} => x[1] != 0 explicita
– {x[0]=0} => x[1] != 1 explicita
Explain x[3] != 2 dedusa
– support(x[3]=2, x[2])=[0] (trigger x[2])
– {x[0]=0} => x[2] != 0 explicita
– {x[0]=0} => x[3] != 3 explicita
In cazul ˆ ın care graful elimin˘ arilor construit unei tuple este explicativ,
putem construi un rat ¸ionament al faptului c˘ a tupla respectiv˘ a este gre¸ sit˘ a cu
ajutorul algoritmului 14.

114 CAPITOLUL 5. EXPLICAT ¸II
Algorithm 14 explainSimple (¬a): Explic˘ a inconsistent ¸a unei tuple
Intrare: Graful explicativ al elimin˘ arilor pentru tupla a={x1=a1, …, x k=
ak}.
Rezultat: Explicat ¸ia faptului c˘ a aeste inconsistent˘ a
expl =∅{expl este explicatia ce va fi construit˘ a }
if∃c∈C:anu satisface cthen
return ”c⇒¬a”
end if
Dxdomeniul init ¸ial al variabilei x
for all a∈Dxdo
expl =expl∪explainDel (x, a){Explic˘ am eliminarea lui adinDx}
end for
Algoritmul 15 explic˘ a eliminarea unei valori din domeniul unei variabile:
5.3.2 Arborele reducerilor
Arborele reducerilor asociat unei tuple este un arbore cu urm˘ atoarele pro-
priet˘ at ¸i:
•Fiecare nod eva corespunde unei instant ¸ieri part ¸iale a= (x1=a1, …, x k=
ak), Vom nota tuple (e) =a.
•Fiecare nod va cont ¸ine graful normalizat al elimin˘ arilor care au fost
deduse direct sau prin propagare din deciziile xi=ai, i= 1, k.
•Pentru orice nod intern eexist˘ a o variabil˘ a xeastfel ˆ ıncˆ at orice fiu al
s˘ aue/primeare proprietatea var(tuple (e/prime)) =var(tuple (e))∪{x}. Vom nota
nextV ar (e) =x.
Numim explicat ¸ie un arbore de reduceri ˆ ın care toate frunzele sunt ex-
plicative. Evident, ˆ ın aceast˘ a situat ¸ie toate nodurile interne vor desemna
subarbori care sunt de asemenea explicat ¸ii, semnificat ¸ia fiec˘ aruia fiind de
demonstrare a inconsistent ¸ei tuplelor corespunz˘ atoare. Analizˆ and acest ar-
bore trebuie s˘ a putem extrage o succesiune logic˘ a de rat ¸ionamente care s˘ a
ne conduc˘ a la inconsistent ¸a tuplei din r˘ ad˘ acina acestuia, respectiv a ˆ ıntregii
ret ¸ele.

5.3. CONSTRUIREA UNEI EXPLICAT ¸II 115
Algorithm 15 explainDel (x, a) : Explic˘ a eliminarea lui adinDx
Intrare: Ggraful explicativ al elimin˘ arilor pentru tupla a={x1=
a1, …, x k=ak},x/negationslash∈{x1, …, x k}o variabil˘ a ¸ si a∈Dx.
Rezultat: Explicat ¸ia faptului c˘ a x=aeste incompatibil˘ a cu tupla a.
expl =∅{expl este explicatia ce va fi construit˘ a }
explained =∅{explained este mult ¸imea elimin˘ arilor (x, a)deja explicate}
Caut˘ am vˆ arful u=elim(x, a) ˆ ınG
ifu=nullthen
return null
end if
{Verific˘ am dac˘ a este o eliminare explicit˘ a }
iftrigger (u)∈context (u)then
return ”context⇒x/negationslash=a”
end if
{Verific˘ am dac˘ a nu a fost deja explicat˘ a }
if(x, a)∈explained then
return ”(∗)⇒x/negationslash=a”
end if
y=trigger (u)
S=support (x=a, y)
for all b∈Sdo
expl =expl∪explain (y, b)
end for
explained =explained∪(x, a)
return expl

116 CAPITOLUL 5. EXPLICAT ¸II
Mergˆ and pe linia exemplelor anterioare, s˘ a explic˘ am faptul c˘ a nu exist˘ a
nici o solut ¸ie ˆ ın problema reginelor pe o tabl˘ a 8 ×8 ˆ ın care: ( x[0] = 0 , x[1] =
2). In aceast˘ a situat ¸ie reducerea corespunz˘ atoare tuplei ( x[0] = 0 , x[1] =
2) nu este explicativ˘ a, ceea ce ˆ ınseamn˘ a c˘ a va trebui s˘ a continu˘ am crearea
arborelui de reduceri, pˆ an˘ a la obt ¸inerea explicat ¸iei.
Explain {x[0]=0, x[1]=2} is inconsistent
{x[0]=0, x[1]=2} => x[2] != 0
{x[0]=0, x[1]=2} => x[2] != 1
{x[0]=0, x[1]=2} => x[2] != 2
{x[0]=0, x[1]=2} => x[2] != 3
Explain {x[0]=0, x[1]=2, x[2]=4} is inconsistent
<<< x[6] fails… >>>

Explain {x[0]=0, x[1]=2, x[2]=5} is inconsistent
<<< x[3] fails… >>>

Explain {x[0]=0, x[1]=2, x[2]=6} is inconsistent
<<< x[6] fails… >>>
Explain {x[0]=0, x[1]=2, x[2]=7} is inconsistent
<<< x[4] fails… >>>

Algoritmul 16 demonstreaz˘ a inconsistent ¸a unei tuple, respectiv a a unei
probleme.
Algoritmul 17 descrie crearea succesiunii de rat ¸ionamente corespunz˘ atoare
unui nod explicat ¸ie.

5.3. CONSTRUIREA UNEI EXPLICAT ¸II 117
Algorithm 16 explain (a): Explic˘ a inconsistent ¸a unei tuple (a unei prob-
leme)
Intrare:R0= (X0, D 0, C0) o ret ¸ea de constrˆ angeri, aeste tupla care trebuie
explicat˘ a (poate fi ∅).
Rezultat: Explicat ¸ia faptului c˘ a tupla (problema) este inconsistent˘ a
ifa/negationslash=∅then
if∃c∈C:anu satisface cthen
return ”c⇒¬a”
end if
Rret ¸eau obt ¸inut˘ a din R0dup˘ a reducerea corespunz˘ atoare tuplei a
else
R=R0
end if
Construim arborele explicat ¸iilor pentru ret ¸eaua R
Fieer˘ ad˘ acina acestui arbore
{Construim recursiv succesiunea rat ¸ionamentelor }
return create (e)

118 CAPITOLUL 5. EXPLICAT ¸II
Algorithm 17 create (e): Crearea succesiunii de rat ¸ionamente pentru
explicat ¸ia e
Intrare: eun nod de tip explicat ¸ie.
Rezultat: O succesiune de rat ¸ionamente ce demonstreaz˘ a e.
expl =∅{expl este explicatia ce va fi construit˘ a }
t=tuple (e)
x=nextV ar (e)
Dx= domeniul init ¸ial al lui x
ifx/negationslash=nullthen
{enu este nod frunz˘ a }
for all a∈Dxdo
if∃c∈C: (t, x=a) nu satisface cthen
{Eliminare explicit˘ a }
expl =expl∪”t⇒¬x/negationslash=a”
else
r=explainDel (x, a)
ifr/negationslash=nullthen
{Eliminare dedusa pentru x/negationslash=a}
expl =expl∪r
end if
end if
end for
end if
Enodurile fiu ale explicat ¸iei e
ifE=∅then
{eeste o reducere explicativ˘ a pentru t}
expl =expl∪explainSimple (t)
else
{Ramura recursiva }
for all e/prime∈Edo
expl =expl∪create (e/prime)
end for
end if
return expl

5.4. IMPLEMENTAREA ALGORITMULUI 119
5.4 Implementarea algoritmului
Arborele de explicat ¸ii va fi construit pe m˘ asura execut ¸iei algoritmului sistem-
atic de c˘ autare. Acesta va p˘ astra o referint ¸˘ a c˘ atre nodul curent al acestui
arbore astfel ˆ ıncˆ at s˘ a ˆ ıl poat˘ a extinde sau s˘ a poat˘ a naviga prin acesta.
•Init ¸ializare – la init ¸ializarea solverului este creat nodul r˘ ad˘ acin˘ a al
arborelui corespunz˘ ator problemei a c˘ arei inconsistent ¸˘ a dorim s˘ a o
demonstr˘ am.
// solution este instantierea partiala curenta
// explanation este nodul curent
// al arborelui reducerilor ce va fi construit
explanation = new Explanation(solution);
•Inaintare – la pasul de alegere a unei noi variabileˆ ın vederea instant ¸iereii
(conform strategiei de ˆ ınaintare) aceasta va fi ret ¸inut˘ a ˆ ın nodul curent.
Var var = forwardStrategy.next();
explanation.setNextVar(var);
•Instant ¸iere – la pasul de instant ¸iere a variabilei curente, ˆ ın cazul ˆ ın
care acest lucru este posibil, va fi creat un nou nod al arborelui, core-
spunz˘ ator noii solut ¸ii part ¸iale. P˘ arintele acestui nod este explicat ¸ia
corespunz˘ atoare insant ¸ierii precedente.
Object val = assignmentStrategy.assign(var);
if (val != null) {
solution.put(var, val);

// Start an explanation
if (explaining) {
Explanation expl = new Explanation(solution);
expl.setParent(getExplanation());
setExplanation(expl);
}
}

120 CAPITOLUL 5. EXPLICAT ¸II
•Intoarcere – cˆ and algoritmul efectueaz˘ a pasul ˆ ınapoi ˆ ınseamn˘ a c˘ a a
fost identificat˘ a o situat ¸ie de e¸ sec ¸ si c˘ autarea va fi reluat˘ a conform
strategiei de ˆ ıntoarcere. Nodul curent al arborelui de explicat ¸ii va fi cel
corespunz˘ ator instant ¸ierii part ¸iale curente, fiind ˆ ın mod evident unul
din str˘ amo¸ sii vechiului nod.
Explanation expl = getExplanation();
while (!expl.getTuple().equals(solution)) {
expl = expl.getParent();
}
setExplanation(expl);
•Filtrare – ˆ ın urma aplic˘ arii unui algoritm de filtrare ¸ si propagare vor
fi efectuate o serie de elimin˘ ari, acestea putˆ and conduce ˆ ın final la
stabilirea inconsistent ¸ei. Aceste elimin˘ ari trebuie memorate ˆ ın cadrul
explicat ¸iei curente:
// La eliminarea lui a din D(x) datorita pierderii
// sustinerii din partea lui y
// (support(x=a,y) este vida)
explanation = solver.getExplanation();
Elimination elim = new Elimination(x, a, y, solution);
explanation.addElimination(elim);

Capitolul 6
Problema satisfiabilit˘ at ¸ii
6.1 Introducere
In acest capitol ne propunem s˘ a introducem un nou model pentru reprezentarea
problemei satisfiabilit˘ at ¸ii unei formule propozit ¸ionale ˆ ın forma normal˘ a con-
junctiv˘ a 3-CNF sub forma unei probleme de satisfacere a constrˆ angerilor [11].
Pe baza acestui model vom defini un graf care s˘ a ne permit˘ a crearea unei
leg˘ aturi ˆ ıntre aspecte structurale ale formulei propozit ¸ionale ¸ si propriet˘ at ¸i
corespunz˘ atoare ale grafului.
Fie dat˘ a o mult ¸ime de variabile logice X={x1, x2, …, x n}. Un literal l
reprezint˘ a fie o variabil˘ a x∈X, fie negat ¸ia sa x. Oclauz˘ a ceste o expresie
format˘ a din operat ¸ii de tip saulogic ˆ ıntre mai mult ¸i literali, cum ar fi x1∨
x2∨x3. O formul˘ a propozit ¸ional˘ a ˆ ın forma normal˘ a conjunctiv˘ a (CNF)
este o expresie format˘ a din operat ¸ii de tip ¸ silogic ˆ ıntre mai multe clauze:
c1∧c2∧…∧cp.
Problema satisfiabilit˘ at ¸ii (SAT) este formulat˘ a astfel:
Dat˘ a o formul˘ a Fˆ ın forma normal˘ a conjunctiv˘ a, exist˘ a o atribuire a vari-
abilelor sale cu valori de adev˘ ar 0 sau 1 astfel ˆ ıncˆ at Fs˘ a fie adev˘ arat˘ a ? Acest
lucru presupune ca toate clauzele s˘ a fie adev˘ arate, ceea ce conduce la nece-
sitatea ca ˆ ın fiecare clauz˘ a cel put ¸in un literal s˘ a aib˘ a valoarea 1. In cazul ˆ ın
care r˘ aspunsul este afirmativ, spunem c˘ a Festesatisfiabil˘ a , iar ˆ ın caz contrar
nesatisfiabil˘ a . Cˆ and fiecare clauz˘ a din Fare exact kliterali problema este
notat˘ a k−SAT .
Este binecunoscut faptul c˘ a SAT a fost prima problem˘ a demonstrat˘ a a fi
NP-complet˘ a ˆ ın faimoasa teorem˘ a a lui Stephen Cook, publicata ˆ ın 1971 ˆ ın
121

122 CAPITOLUL 6. PROBLEMA SATISFIABILIT ˘AT ¸II
lucrarea ”The Complexity of Theorem Proving Procedures” [48]. Mai mult
decˆ at atˆ at, problema r˘ amˆ ane dificil˘ a chiar dac˘ a este restrˆ ans˘ a la cazul special
cˆ and fiecare clauz˘ a cont ¸ine exact 3 literali (3-SAT). Trebuie de asemenea s˘ a
ment ¸ion˘ am c˘ a, spre deosebire de cazul general, 2-SAT este NL-complet˘ a [43]
¸ si deci poate fi rezolvat˘ a ˆ ın timp polinomial.
Considerˆ and dificultatea problemei satisfiabilit˘ at ¸ii nu ne putem a¸ stepta s˘ a
concepem algoritmi eficient ¸i pentru cazul general. Cu toate acestea, deoarece
o mult ¸ime de probleme modelate dup˘ a situat ¸ii reale se pot reprezenta sub
form˘ a de instant ¸e SAT s-a deovedit c˘ a este necesar˘ a dezvoltarea de algoritmi
care s˘ a abordeze rezolvarea satisfiabilit˘ at ¸ii ˆ ıntr-un mod cˆ at mai performant.
Ace¸ sti algoritmi pot fi complet ¸i , ceea ce ˆ ınseamn˘ a c˘ a vor explora sistematic
toate posibilit˘ at ¸ile ˆ ıncercˆ and s˘ a g˘ aseasc˘ a una sau toate solut ¸iile, sau aproxi-
mativi bazat ¸i pe euristici care nu garanteaz˘ a ˆ ıns˘ a g˘ asirea solut ¸iei exacte, cum
ar fi de exemplu algoritmii genetici. Bineˆ ınt ¸eles, ˆ ın continuarea capitolului
vom analiza problema din prima perspectiv˘ a, utilizˆ and tehnici de programare
cu constrˆ angeri pentru rezolvarea 3-SAT.
SAT poate fi exprimat˘ a u¸ sor ca o problem˘ a de satisfacere a constrˆ angerilor,
ˆ ın care variabilele sunt cele pe care este construit˘ a formula Fce trebuie re-
zolvat˘ a, domeniile lor sunt {0,1}iar constrˆ angerile sunt derivate din clauzele
c1, …c pale lui F.
In pofida simplit˘ at ¸ii acestui model, la ora actual˘ a el este utilizat de ma-
joritatea algoritmilor sistematici de rezolvare dedicat ¸i problemei SAT, cum
ar fi: Satz, C-SAT, Tableau, POSIT. Ace¸ stia sunt bazat ¸i pe procedura Davis-
Putnam, ˆ ın varianta Loveland, a¸ sa numita procedur˘ a DPL . Schematic, ea este
prezentat˘ a ˆ ın figura 18.
Pe baza acestei idei au fost creat ¸i algoritmi care integreaz˘ a diverse tehnici
CSP cum ar fi forward-checking (propagarea unit˘ at ¸ilor), look-back (backjump-
ing) sau diverse euristici de alegere a ordinii ˆ ın care sunt instant ¸iate variabile,
scopul fiind minimizarea spat ¸iului de c˘ autare a solut ¸iilor astfel ˆ ıncˆ at s˘ a poat˘ a
fi abordare probleme cu un num˘ ar cˆ at mai mare de variabile. La ora actual˘ a
ace¸ sti algoritmi sunt capabili s˘ a rezolve ˆ ın timp rezonabil probleme avˆ and
chiar ¸ si 1000 de variabile.
6.2 Un nod model CSP pentru SAT
In primul rˆ and trebuie ment ¸ionat faptul c˘ a nu suntem interesat ¸i ˆ ın primul
rˆ and de crearea unui algoritm care s˘ a dep˘ a¸ seasc˘ a ˆ ın performant ¸e pe cele deja

6.2. UN NOD MODEL CSP PENTRU SAT 123
Algorithm 18 Structura general˘ a a procedurii DPL
Intrare: Fo formul˘ a proprozit ¸ional˘ a CNF
Rezultat: 1 dac˘ a Feste satisfiabil˘ a, 0 ˆ ın caz contrar
ifF=∅then
return 1
end if
{Propagarea clauzelor unitare }
while Fcont ¸ine o clauz˘ a cde lungime 1: c=xorc=xdo
Atribuie valoarea corespunz˘ atoare variabilei lui c
Simplific˘ a F
end while
{Determinarea situat ¸iei de e¸ sec }
ifFcont ¸ine o clauz˘ a vid˘ a then
return 0
end if
{Recursia}
Selecteaz˘ a xo variabil˘ a din Fconform unei euristici H
ifDPL (F∪{x}) = 1 then
return 1
else
return DPL (F∪{x})
end if

124 CAPITOLUL 6. PROBLEMA SATISFIABILIT ˘AT ¸II
existente. In schimb, dorim conceperea unui nou model pentru reprezentarea
problemei SAT sub forma unei instant ¸e CSP care s˘ a ne permit˘ a rezolvarea
acesteia cu orice solver CSP general ¸ si care s˘ a fie cˆ at mai potrivit pentru
analiza teoretic˘ a. Dup˘ a cum am ment ¸ionat deja, majoritatea solverelor ex-
istente sunt bazate pe procedura DPL, diferent ¸ele majore ˆ ıntre acestea fiind
euristicile utilizate ¸ si calitatea implement˘ arii. In aceast˘ a abordare orientat˘ a
pe euristic˘ a este evident c˘ a unele dintre ele se vor comporta mai bine pe un
anumit tip de date de intrare ˆ ın timp ce altele vor fi mai eficiente pe alt tip
de date. De asemenea, unele implement˘ ari sunt optimizate pentru probleme
structurate, adic˘ a probleme ce prezint˘ a un anumit grad de simetrie ¸ si sunt
rezultate ˆ ın general din situat ¸ii reale, ˆ ın timp ce altele sunt concepute s˘ a fie
eficiente pe instant ¸e generate uniform aleator. Un alt criteriu care trebuie
luatˆ ın considerare este cˆ at de bine se comport˘ a un solver atunci cˆ and formula
este satisfiabil˘ a ¸ si cˆ at de bine atunci cˆ and este nesatisfiabil˘ a.
Avˆ and ˆ ın vedere toate aceste aspecte, am considerat c˘ a este interesant
s˘ a g˘ asim o modalitate de a transforma problema 3-SAT ˆ ıntr-o problem˘ a de
grafuri care s˘ a ne ofere de asemenea ¸ si un model CSP. In felul acesta, diferite
propriet˘ at ¸i structurale ale grafului construit pot fi utilizate ˆ ın implementarea
eficient˘ a a strategiilor ce controleaz˘ a procesul general de rezolvare a unei
instant ¸e CSP.
Ne propunem s˘ a rezolv˘ am problema satisfiabilit˘ at ¸ii unei formule propozit ¸ionale
3-CNF F=c1∧c2∧…∧cp, definit˘ a pe mult ¸imea de variabile X={x1, …, x n}.
F˘ ar˘ a a restrˆ ange generalitatea, presupunem c˘ a variabilele fiec˘ arei clauze sunt
diferite.
Definit ¸ie 13 Numim triplet o tupl˘ a ( x=r, y=s, z=t) unde x, y, z
sunt variabilele unei clauze iar r, s, t sunt 0 sau 1. Cˆ and variabilele sunt
subˆ ınt ¸elese, vom scrie doar ( r, s, t ).
Dac˘ a u= (x=r, y=s, z=t) este un triplet ¸ si A⊆{x, y, z}, not˘ am
πA(u)proiect ¸ia luiupe mult ¸imea A, constˆ and din restrict ¸ia tuplei upe
variabilele din A:πx,y(x= 0, y= 1, z= 0) = ( x= 0, y= 1).
Definit ¸ie 14 Spunem c˘ a dou˘ a triplete u¸ sivsunt compatibile dac˘ a ¸ si
numai dac˘ a variabilele lor comune au aceea¸ si valoare: πA(u) =πA(v)

6.3. GRAFUL ASOCIAT MODELULUI CSP 125
Vom construi o ret ¸ea de constrˆ angeri R= (S, D, C ) care s˘ a modeleze
satisfiabilitatea problemei Fastfel:
•Fiec˘ arei clauze ciˆ ıi vom asocia o variabil˘ a si:S={s1, …, s p}.
•Domeniul Dial unei variabile siva fi format din valorile
{(0,0,0),(0,0,1),(0,1,0),(0,1,1),(1,0,0),(1,0,1),(1,1,0),(1,1,1)},
reprezentˆ and cele 8 instant ¸ieri posibile ale variabilelor din clauza core-
spunz˘ atoare ci, din care o elimin˘ am pe cea care nu satisface clauza.
A¸ sadar|Di|= 7,∀i= 1, p.
•Constrˆ angerile vor impune ca instant ¸ierile variabilelor ret ¸elei s˘ a fie com-
patibile (variabile comune din cele dou˘ a triplete au acelea¸ si valori). Pen-
tru fiecare pereche de clauze care au cel put ¸i o variabil˘ a comun˘ a vom
ad˘ auga o constrˆ angere de acest tip.
Propozit ¸ie 13 FieF=c1∧c2∧…∧cpo formul˘ a propozit ¸ional˘ a ¸ si R=
(S, D, C ) ret ¸eaua de constrˆ angeri corespunz˘ atoare. Problema satisfiabilit˘ at ¸ii
luiFeste echivalent˘ a cu g˘ asirea unei solut ¸ii pentru R.
Demonstrat ¸ie
(⇒) S˘ a presupunem mai ˆ ıntˆ ai c˘ a a= (x1=a1, …, x k=ak) este o solut ¸ie
pentru F. Fie cio clauz˘ a definit˘ a pe variabilele {xi1, xi2, xi3}¸ sisivariabila din
Rcorespunz˘ atoare lui ci. Instant ¸ierea si= (ai1, ai2, ai3)∀i= 1, preprezint˘ a
o solut ¸ie a ret ¸elei.
(⇐) S˘ a presupunem acum c˘ a avem o solut ¸ie a lui Ru={u1, …, u p}.
Fiecare triplet uireprezint˘ a o instant ¸iere a variabilelor corespunz˘ atoare clauzei
¸ si, cum toate tripletele sunt compatibile, ele vor induce o instant ¸iere a tuturor
variabilelor formulei ce satisface ˆ ın mod evident toate clauzele.
6.3 Graful asociat modelului CSP
FieFo formul˘ a propozit ¸ional˘ a ¸ si Rret ¸eaua de constrˆ angeri definit˘ a ˆ ın
sect ¸iunea anterioar˘ a. Corespunz˘ ator lui Rputem construi un graf G= (V, E)
astfel:

126 CAPITOLUL 6. PROBLEMA SATISFIABILIT ˘AT ¸II
•Nodurile grafului Vvor fi valorile din toate domeniile D.
Astfel, pentru fiecare clauz˘ a c=x∨y∨zvor fi create nodurile:
{(0,0,0),(0,0,1),(0,1,0),(0,1,1),(1,0,0),(1,0,1),(1,1,0),(1,1,1)},
reprezentˆ and cele 8 instant ¸ieri posibile ale variabilelor din c. Evident,
una dintre acestea nu va satisface clauza ¸ si nodul corespunz˘ ator nu va
fi ad˘ augat la graf. Fiec˘ arei clauze ˆ ıi vor corespunde a¸ sadar 7 noduri,
num˘ arul lor total fiind de 7 p. Ca o convent ¸ie, pentru un nod v∈V
vom scrie v∈cpentru a denota faptul c˘ a respectivul nod corespunde
clauzei c.
•Dou˘ a vˆ arfuri vor fi adiacente dac˘ a ¸ si numai dac˘ a tripletele corespunz˘ atoare
sunt compatibile.
Din perspectiva problemei satisfiabilit˘ at ¸ii, muchiile grafului sunt create
conform urm˘ atoarelor dou˘ a reguli:
•Intre dou˘ a vˆ arfuri ale aceleia¸ si clauze nu exist˘ a muchie:
∀c∈F∀u, v∈c⇒uv/negationslash∈E
•Dou˘ a vˆ arfuri corespunzˆ and unor clauze diferite vor fi adiacente dac˘ a
¸ si numai dac˘ a tripletele corespunz˘ atoare sunt compatibile: Fie ci¸ sicj
dou˘ a clauze din F¸ si fie Amult ¸imea variabilelor comune ale lui ci¸ sicj:
∀u∈ci,∀v∈cj:uv∈E⇔πA(u) =πA(v)
Este u¸ sor de observat c˘ a graful construit este multipartit, fiecare clas˘ a
a partit ¸ie corespunzˆ and unei clauze din formul˘ a ¸ si avˆ and exact 7 vˆ arfuri.
Muchiile grafului pun ˆ ın evident ¸˘ a instant ¸ierile compatibile ale variabilelor
clauzelor.
Propozit ¸ie 14 FieF=c1∧c2∧…∧cpo formul˘ a propozit ¸ional˘ a. Problema
satisfiabilit˘ at ¸ii lui Feste echivalent˘ a cu g˘ asirea unei clici maximale ˆ ın Gde
dimensiune p.
Demonstrat ¸ie
(⇒) S˘ a presupunem c˘ a putem determina o solut ¸ie a= (x1=a1, …, x k=
ak) pentru F. Deoarece aceste valori satisfac toate clauzele din F, exist˘ a cˆ ate

6.4. ARC CONSISTENT ¸A 127
un triplet uidin fiecare clas˘ a a partit ¸iei grafului astfel ˆ ıncˆ at πvar(ui)(a) =ui,
∀i= 1, p. Fie ui, ujdou˘ a vˆ arfuri ¸ si Amult ¸imea variabilelor comune. Faptul
c˘ aπA(ui) =πA(uj) =πA(a) implic˘ a uiuj∈E. A¸ sadar, vˆ arfurile {u1, …, u p}
induc ˆ ın Go clic˘ a de dimensiune p¸ si cum Gestep-multipartit, clica este
maximal˘ a.
(⇐) S˘ a presupunem acum c˘ a avem o clic˘ a Q={u1, …, u p}ˆ ınG. Fiecare
triplet uireprezint˘ a o instant ¸iere a variabilelor corespunz˘ atoare clauzei ¸ si,
cum toate tripletele sunt compatibile, ele vor induce o instant ¸iere a tuturor
variabilelor formulei ce satisface toate clauzele.
Este cunoscut faptul c˘ a determinarea existent ¸ei unei clici de o anumit˘ a
dimensiune ˆ ıntr-un graf oarecare este NP-complet˘ a, aceasta fiind una din cele
21 de probleme NP-complete demonstrate de Richard Karp ˆ ın lucrarea sa
din 1972 ”Reducibility Among Combinatorial Problems” [29]. Propozit ¸ia 14
demonstreaz˘ a c˘ a problema clicii r˘ amˆ ane NP-complet˘ a chiar ¸ si pentru grafuri
arc-consistente.
6.4 Arc consistent ¸a
FieFo formul˘ a propozit ¸ional˘ a, Rret ¸eaua de constrˆ angeri ¸ si Ggraful core-
spunz˘ ator luiR. In aceast˘ a sect ¸iune vom examina cum arc-consisent ¸a lui R
poate fi interpretat˘ a ˆ ın graful G.
Definit ¸ie 15 Fiecio clauz˘ a a lui F. Un nod u∈cial grafului ˆ ıl vom
numi r˘ audac˘ a ¸ si numai dac˘ a ∃cj∈Fastfel ˆ ıncˆ at∀v∈cj:uv/negationslash∈E.
Conform propozit ¸iei 14, este u¸ sor de observat c˘ a un nod r˘ au nu poate
face parte dintr-o solut ¸ie.
Definit ¸ie 16 Spunem c˘ a graful Geste arc-consistent dac˘ a ¸ si numai dac˘ a
nu cont ¸ine nici un nod r˘ au.
Propozit ¸ie 15 FieFo formul˘ a propozit ¸ional˘ a, Rret ¸eaua de constrˆ angeri
¸ siGgraful corespunz˘ ator lui R.Reste arc-consistent˘ a dac˘ a ¸ si numai dac˘ a
Geste arc-consistent.

128 CAPITOLUL 6. PROBLEMA SATISFIABILIT ˘AT ¸II
Demonstrat ¸ia este evident˘ a ¸ si va fi omis˘ a.
6.5 Propriet˘ at ¸i ale grafului
In sect ¸iunile urm˘ atoare vom presupune c˘ a graful Geste arc-consistent. Fie
S1, …, S pclasele partit ¸iei grafului, p >2. Este u¸ sor de observat c˘ a, ˆ ıntr-un
graf arc-consistent, orice varf v∈V(G) are cel put ¸in cˆ ate un vecin ˆ ın fiecare
din celelalte p−1 clase ale partit ¸iei grafului. Vom mai presupune, f˘ ar˘ a a
restrˆ ange generalitatea, c˘ a nici una din clasele partit ¸iei nu este singleton,
deoarece ˆ ın aceast˘ a situat ¸ie am putea reduce problema la una mai simpl˘ a.
In concluzie, graful Gare urm˘ atoarele propriet˘ at ¸i:
(P1) 2≤|Si|≤7∀i= 1, p
(P2) dG(v)≥p−1,∀v∈V(G)
(P3) dG(v)≥2,∀v∈V(G)
O alt˘ a observat ¸ie pe care trebuie s˘ a o facem este legat˘ a de num˘ arul cro-
matic al lui G. Dac˘ a ω(G) =p⇒χ(G)≥ω(G)≥p. Dar, graful fiind
p-multipartit χ(G)≤p, ceea ce ˆ ınseamn˘ a c˘ a χ(G) =piar cele pmult ¸imi
stabile sunt chiar clasele de colorare ale lui G.
Algoritmul 19 ˆ ıncearc˘ a s˘ a determine o clic˘ a maximal˘ a de cardinal pˆ ıntr-
un graf arc-consistent. Dac˘ a nu poate fi g˘ asit˘ a o clic˘ a p-maximal˘ a, algoritmul
va returna∅, dar asta nu ˆ ınseamn˘ a c˘ a o astfel de clic˘ a nu exist˘ a.
Intrebarea pe care ne-o putem pune este: exist˘ a posibilitatea ca algoritmul
de mai sus s˘ a nu identifice o clic˘ a p-maximal˘ a ? R˘ aspunsul este ”da” ¸ si figura
6.1 descrie o situat ¸ie care poate conduce la aceast˘ a situat ¸ie: 3 partit ¸ii avˆ and
fiecare cˆ ate dou˘ a vˆ arfuri, ce formeaz˘ a un C6:
Propozit ¸ie 16 FieFo formul˘ a propozit ¸ional˘ a ¸ si Ggraful p-multipartit
corespunz˘ ator lui F, satisf˘ acˆ and P1-P3. Dac˘ a GesteP4−free atunci G
cont ¸ine o clic˘ a maximal˘ a de cardinal p.

6.5. PROPRIET ˘AT ¸I ALE GRAFULUI 129
Algorithm 19 Un algoritm careˆ ıncearc˘ a determinarea unei clici p-maximale
Intrare: Gun graf arc-consistent, p-multipartit.
Rezultat: Qo clic˘ a maximal˘ a de cardinal psau∅
FieS1, …, S pclasele partit ¸iei lui G
Q=∅
for all i= 1, pdo
ifSi=∅then
return∅
end if
Fieui∈Si
Q=Q∪ui
for all j=i+ 1, pdo
Sj=Sj−NG(ui)
end for
end for
return Q
Figure 6.1: O situat ¸ie minimal˘ a de e¸ sec
Demonstrat ¸ie
Inductiv, s˘ a presupunem c˘ aam construit o clic˘ a Qavˆ and cˆ ate un element
din primele tclase ale partit ¸iei ¸ si fie Suna din clasele r˘ amase ale partit ¸iei.
Presupunem prin reducere la absurd c˘ a ∀x∈S Q∪{x}nu este clic˘ a ¸ si fie x1
un element oarecare din S, ceea ce implic˘ a∃q1∈Q:x1q1/negationslash∈E(G). Deoarece
ˆ ınGorice vˆ arf are cel put ¸in un vecin ˆ ın orice clas˘ a a partit ¸iei (mai put ¸in
cea din care face parte) rezult˘ a c˘ a ∃x2∈S:q1x2∈E(G). Conform ipotezei
Q∪{x2}nu este clic˘ a deci ∃q2∈Q:x2q2/negationslash∈E(G). Deoarece graful este

130 CAPITOLUL 6. PROBLEMA SATISFIABILIT ˘AT ¸II
P4−free deducem c˘ a x1q2/negationslash∈E(G) altfel x1q2q1x2ar forma un P4.
S˘ a presupunem c˘ a am identificat v˘ arfurile Qk={q1, …, q k}⊆Q¸ siSk=
{x1, …, x k}⊆Scu propriet˘ at ¸ile:
(1)xiqj/negationslash∈E(G)∀j≥i¸ si
(2)xiqj∈E(G)∀j < i .
Rat ¸ionˆ and ca mai sus, obt ¸inem c˘ a exist˘ a vˆ arfurile qk+1¸ sixk+1iar mult ¸imile
Qk+1=Qk∪{qk+1},Sk+1=Sk∪{xk+1}respect˘ a de asemenea propriet˘ at ¸ile
(1),(2). Cum acest algoritm nu este finit, am obt ¸inut o contradict ¸ie cu pre-
supunerea c˘ a init ¸ial˘ a ∀x∈S Q∪{x}nu este clic˘ a. A¸ sadar, putem extinde
clica Qceea ce ˆ ınseamn˘ a c˘ a ˆ ın final vom obt ¸ine o clic˘ a de cardinal maxim.
O analiz˘ a mai atent˘ a a demonstrat ¸iei ne arat˘ a c˘ a P4−free poate fi
ˆ ınlocuit cu H−free, unde Heste un P4ce are ambele extremit˘ at ¸i ˆ ın aceea¸ si
clas˘ a a partit ¸iei.
Propozit ¸ie 17 Dac˘ a Gcont ¸ine un P4indus atunci Gcont ¸ine un P4ce
are cel put ¸in o pereche de vˆ arfuri ˆ ın acee¸ si clas˘ a a partit ¸ie.
Demonstrat ¸ie
Fiea1b1c1d1unP4avˆ and vˆ arfurile ˆ ın partit ¸iile distincte A, B, C, D .
a1are cel put ¸in un vecin ˆ ın C⇒∃c2∈C:a1c2∈E(G)
c1are cel put ¸in un vecin ˆ ın A⇒∃a2∈A:a2c1∈E(G)
Dac˘ a a2c2∈E(G)⇒a1c2a2c1 formeaz˘ a un P4cu proprietatea dorit˘ a. Deci
putem presupune c˘ a a2c2/negationslash∈E(G).
b1are cel put ¸in un vecin ˆ ın D⇒∃d2∈D:b1d2∈E(G)
c1are cel put ¸in un vecin ˆ ın A⇒∃b2∈B:b2d1∈E(G)
Dac˘ a b2d2∈E(G)⇒b1d2b2d1 formeaz˘ a un P4cu proprietatea dorit˘ a. Deci
putem presupune c˘ a b2d2/negationslash∈E(G).
a1b1c1a2/negationslash=P4⇒b1a2∈E(G),
c2a1b1c1/negationslash=P4⇒b1c2∈E(G),
b1c1d1b2/negationslash=P4⇒c1b2∈E(G),
d2b1c1d1/negationslash=P4⇒c1d2∈E(G),
a1b1c1b2/negationslash=P4⇒a1b2∈E(G),
d1c1b1c2/negationslash=P4⇒d1c2∈E(G),
a1b2c1d2/negationslash=P4⇒a1d2∈E(G),

6.6. IMPLEMENTARE S ¸I EXPERIMENTE 131
d1c2b1a2/negationslash=P4⇒a2d1∈E(G),
In final, am obt ¸inut faptul c˘ a a1d2a2d1este un P4indus avˆ and 2 vˆ arfuri ˆ ın A
¸ si dou˘ a vˆ arfuri ˆ ın D.
6.6 Implementare ¸ si experimente
S˘ a ne reamintim arhitectura general˘ a a unui solver CSP:
Algorithm 20 Algoritmul general de rezolvare
Intrare:R= (X, D, C ) o ret ¸ea de constrˆ angeri
Rezultat: Rezolvarea luiR
Pas0 Filtreaz˘ a problema init ¸ial˘ a
ifret ¸eaua este rezolvat˘ a then
Proceseaz˘ a solut ¸ia
return
end if
ifret ¸eaua este inconsistent˘ a then
return
end if
Pas1 Memoreaz˘ a starea problemei
Pas2 Decizie
Pas3 Propagare
ifret ¸eaua este rezolvat˘ a then
Proceseaz˘ a solut ¸ia
return
end if
ifret ¸eaua este inconsistent˘ a then
Restaureaz˘ a problema de dinaintea deciziei
goto Pas2
end if
goto Pas1
Solverul OmniCS, pe care l-am utilizat ˆ ın implementare ¸ si experimente,
are capacitatea de a controla pasul decizional al algoritmului general prin
specificarea urm˘ atoarelor strategii:

132 CAPITOLUL 6. PROBLEMA SATISFIABILIT ˘AT ¸II
•Strategia de ˆ ınaintare este euristica pentru selectarea variabilelor.
Pentru aceast˘ a problem˘ a am utilizat o euristic˘ a simpl˘ a care selecteaz˘ a
variabila implicat˘ a ˆ ın cˆ at mai multe clauze din cele care nu au fost
satisf˘ acute ˆ ınc˘ a.
•Strategia de instant ¸iere este euristica pentru alegerea valorilor.
Strategia utilizat˘ a pentru aceast˘ a problem˘ a a fost de a selecta valoarea
(tripletul) care maximizeaz˘ a num˘ arul de clauze care devin satisf˘ acute
dup˘ a asignarea specificat˘ a de triplet. Pentru a beneficia de rezultatul
propozit ¸iei 16 a fost inclus un mecanism de forward-checking care aplic˘ a
algoritmii de filtrare ¸ si propagare pentru fiecare valoare posibil˘ a ˆ ın
ˆ ıncercarea de a determina dac˘ a graful corespunz˘ ator problemei reduse
devine P4-free. Aceast˘ a operat ¸ie nu ar trebui s˘ a aib˘ a un impact negativ
simt ¸itor asupra performant ¸ei ˆ ıntrucˆ at recunoa¸ sterea cografurilor poate
fi f˘ acut˘ a ˆ ın timp liniar [39].
In experimente, num˘ arul de clauze utilizat a fost p= 4.25∗n, unde n
este numarul de variabile. Empiric [34], s-a observat c˘ a problemele generate
aleator de acest tip sunt cel mai greu de rezolvat.
Pentru fiecare nde la 50 la 300 au fost rezolvate 10 instant ¸e 3-SAT gen-
erate uniform aleator. Rezultatele aproximative sunt date ˆ ın tabelul de mai
jos:
Variabile Clauze Backtrack Timp
50 213 <2 <100ms
100 425 <20 <2sec
150 628 <500 <1min
200 850 <800 <2min
250 1063 <3000 <10min
300 1275 <30000 <3h
Trebuie remarcat faptul c˘ a ret ¸eaua de constrˆ angeri corespunz˘ atoare are un
num˘ ar de variabile egal cu num˘ arul clauzelor piar num˘ arul de constrˆ angeri
este egal cu num˘ arul perechilor de clauze care au cel put ¸in o variabil˘ a co-
mun˘ a. De exemplu, dac˘ a n= 50, num˘ arul variabilelor este 213 iar num˘ arul
constrˆ angerilor ar putea fi aproximativ 3500.

6.7. CONCLUZII 133
6.7 Concluzii
Chiar dac˘ a performant ¸ele obt ¸inute de implementarea noastr˘ a nu sunt ˆ ınc˘ a
comparabile cu cele ale celor mai bune solvere dedicate problemei 3-SAT,
scopul nostru principal a fost de a dezvolta un model teoretic care s˘ a ne
permit˘ a studierea satisfiabilit˘ at ¸ii unei formule propozit ¸ionale ˆ ın termeni de
propriet˘ at ¸i ale grafului corespunz˘ ator ¸ si, pe baza acestor propriet˘ at ¸i, s˘ a dez-
volt˘ am strategii eficiente de explorare sistematic˘ a a spat ¸iului de c˘ autare a
solut ¸iilor pe care s˘ a le integr˘ am ˆ ıntr-un solver CSP general, cum ar fi Om-
niCS. Direct ¸ia ulterioar˘ a de cercetare va fi o mai profund˘ a analiz˘ a a grafului
asociat formulei propozit ¸ionale pentru a vedea cum putem exploata structura
sa specific˘ a. In afar˘ a de acest lucru, intent ¸ion˘ am s˘ a integr˘ am ˆ ın acest model
diverse euristici care ¸ si-au dovedit eficient ¸a ˆ ın abord˘ arile clasice, cum ar fi
Mom ([34], [28], [8]) (Maximum Ocurrences in Clauses of Minimum Size),
ˆ ımbun˘ at˘ at ¸ind astfel comportamentul general al procesului de rezolvare.

134 CAPITOLUL 6. PROBLEMA SATISFIABILIT ˘AT ¸II

Capitolul 7
Problema orarului
7.1 Introducere
Capitolul de fat ¸˘ a ˆ ı¸ si propune analiza problemei orarului folosind tehnici de
satisfacere a constrˆ angerilor, ˆ ıntr-un mod cˆ at mai general care s˘ a includ˘ a
diverse situat ¸ii cu aplicabilitate practic˘ a. Informal, definim problema oraru-
lui astfel: ”Dat˘ a o mult ¸ime de activit˘ at ¸i supuse unor constrˆ angeri naturale
sau impuse, se cere plasarea optim˘ a a acestora ˆ ıntr-un spat ¸iu temporal”. In
mod firesc, vom detalia fiecare element al acestei definit ¸ii pentru a ajunge
la o definit ¸ie formal˘ a a problemei pe care dorim s˘ a o rezolv˘ am. In final,
rezultatele obt ¸inute trebuie s˘ a poat˘ a modela cel put ¸in urm˘ atoarele situat ¸ii:
•Crearea orarului unei institut ¸ii de ˆ ınv˘ at ¸˘ amˆ ant superior (universitate)
•Crearea orarului unei ¸ scoli cu program normal
•Planificarea orelor ˆ ın cadrul programelor de ˆ ınv˘ at ¸˘ amˆ ant la distant ¸˘ a
•Planificarea sesiunilor de examene
•Planificarea unor cursuri de preg˘ atire intensive
Problemele de planificare, cum este ¸ si cea a orarului, sunt bine-cunoscute
probleme de optimizare a c˘ aror rezolvare a fost ˆ ın atent ¸ia cercet˘ atorilor de
mult timp, contribut ¸ii la acest domeniu venind din mai multe direct ¸ii cum
ar fi:
•Teoria grafurilor – probleme de colorare
135

136 CAPITOLUL 7. PROBLEMA ORARULUI
•Inteligent ¸˘ a artificial˘ a
–algoritmi genetici
–simulated annealing
–tabu search
•Probleme de satisfacere a constrˆ angerilor
In multe cazuri ˆ ıns˘ a, abord˘ arile erau mai mult teoretice ¸ si implementarea
lor ˆ ın situat ¸ii reale era dificil sau chiar imposibil de realizat.
7.1.1 Activit˘ at ¸i (Evenimente)
Prin activit˘ at ¸i sauevenimente vom numi elementele atomice care vor fi plan-
ificate. Proprietatea de atomicitate specific˘ a faptul c˘ a vom lucra ˆ ın mod-
elul ˆ ın care evenimentele sunt continue (non-preemptive) , cu alte cuvinte nu
pot fi ˆ ıntrerupte, aceasta fiind situat ¸ia cea mai frecvent˘ a ˆ ın problemele de
planificare de tip orar. In cazul construiri orarului pentru conferint ¸e sau
workshop-uri pot exista situat ¸ii ˆ ın care o activitate s˘ a fie fragmentat˘ a pe
parcursul unei zile ˆ ıns˘ a, de obicei, dimensiunile segmentelor sunt cunoscute
ceea ce face posibil˘ a modelarea activit˘ at ¸ii cu ajutorul mai multor evenimente
corespunz˘ atoare ˆ ıntregului.
Evenimentele pot fi:
•Repetitive – situat ¸ia cea mai frecvent˘ a, un exemplu fiind situat ¸ia unei
sect ¸ii la zi din cadrul unei facult˘ at ¸i, ˆ ın care domeniul temporal este
uzual produsul cartezial al mult ¸imilor:
–{luni, marti, miercuri, joi, vineri }¸ si
–{8,9,10,11,12,13,14,15,16,17,18,19},
acestea reprezent˘ and orele posibile deˆ ıncepere a cursurilor sau lucr˘ arilor
practice. Evenimentele plasate ˆ ıntr-un astfel de domeniu se vor repeta
de un num˘ ar specificat de ori, formˆ and astfel orarul complet. Specifi-
carea pe calendar a datei de ˆ ınceput ¸ si a num˘ arului de repet˘ ari sunt
suficiente pentru a identifica exact, ˆ ın timp, fiecare activitate.
•Unice – domeniul este format din date calendaristice ¸ si ore specificate
explicit:{t1= (data 1:ora 1), t2= (data 2:ora 2), …, t n= (data n:

7.1. INTRODUCERE 137
ora n)}. Exemple de acest tip ar putea fi: recuper˘ ari de ore, examene,
admitere, licent ¸˘ a, etc.
F˘ acˆ and abstract ¸ie de problema planific˘ arii, caracteristicile generale ale
unei activit˘ at ¸i sunt:
•informat ¸iile legate de identificarea sa
•durata (timpul necesar desf˘ a¸ sur˘ arii sale)
•domeniul temporal asociat
•num˘ arul de repetit ¸ii (doar pentru cele repetitive)
•resursele necesare
Sigur c˘ a la acestea se vor ad˘ auga o serie de constrˆ angeri obligatorii sau nu,
despre care vom discuta ˆ ın sect ¸iunea dedicat˘ a lor.
Plasarea pe orar a activit˘ at ¸ilor presupune:
•atribuirea unei valori din domeniul temporal; de exemplu, cursul xva
fi t ¸inut la momentul t.
•alocarea unor resurse specifice; cursul xva avea loc in sala s.
•satisfacerea constrˆ angerilor tari ale problemei.
Dac˘ a not˘ am cu start (e) momentul ˆ ınceperii unui eveniment ¸ si end(e)
momentul termin˘ arii sale, concurent ¸a a dou˘ a evenimente poate fi scris˘ a sub
forma unei disjunct ¸ii C1∨C2, unde:
(C1)start (e1)< end (e2)∧start (e2)< end (e1)
reprezint˘ a condit ¸ia suprapunerii temporale ˆ ın cadrul unei s˘ apt˘ amˆ ani iar
(C2)week (e1) = 0∨week (e2) = 0∨week (e1) =week (e2)
este condit ¸ia care verific˘ a faptul c˘ a evenimentele sunt ˆ ın aceea¸ si s˘ apt˘ amˆ an˘ a,
util˘ a ˆ ın cazul ˆ ın care evenimentele nu se repet˘ a cu aceea¸ si frecvent ¸˘ a.
Din punctul de vedere al tipului lor, evenimentele pot fi:
•obligatorii

138 CAPITOLUL 7. PROBLEMA ORARULUI
•opt ¸ionale
•facultative
Aceast˘ a clasificare nu are doar rol informativ, deoarece exist˘ a situat ¸ii ˆ ın
care penalizarea asociat˘ a unui conflict poate t ¸ine cont de tipul evenimentelor
implicate.
Pentru a putea specifica comod restrict ¸ii la nivelul unei mult ¸imi de ac-
tivit˘ at ¸i acestea vor fi v˘ azute ca f˘ acˆ and parte din grupuri . Astfel, ˆ ın cazul
orarului unei facult˘ at ¸i, o anumit˘ a disciplin˘ a de studiu din planul deˆ ınv˘ at ¸˘ amˆ ant
poate fi v˘ azut˘ a ca un grup, evenimentele sale putˆ and fi cursul asociat, labora-
toarele sau seminariile aferente, etc. Aceast˘ a organizare poate fi util˘ a pentru
definirea unor propriet˘ at ¸i comune activit˘ at ¸ilor, cum ar fi pachetul din care
acestea fac parte.
7.1.2 Domeniul temporal
Prin domeniu sauspat ¸iu temporal vom ˆ ınt ¸elege o mult ¸ime de elemente T=
{t1, …, t n}reprezentˆ and momente fixate ˆ ıntr-un interval calendaristic speci-
ficat.
In cadrul unei probleme pot fi definite mai multe domenii temporale,
fiec˘ arei activit˘ at ¸i fiindu-i asignat un astfel de domeniu, din care va trebui
selectat˘ a o pozit ¸ie. Fiecare domeniu Tva avea asociat˘ a o funct ¸ie de mapare
care s˘ a transforme elementele lui tˆ ın date calendaristice reale.
Cazul cel mai uzual este cel al orarelor ale c˘ aror activit˘ at ¸i se desf˘ a¸ soar˘ a
ˆ ın aceea¸ si structur˘ a s˘ apt˘ amˆ anal, ˆ ıntre anumite ore ale zilei. Considerˆ and
nnum˘ arul de ore din zi ¸ si mnum˘ arul de zile din s˘ apt˘ amˆ an˘ a elementele
spat ¸iului temporal pot fi considerate valori ˆ ıntregi din domeniul [0 , n∗m],
corespondent ¸a cu momentele reale fiind f˘ acut˘ a ˆ ın condit ¸iile ˆ ın care sunt
specificat ¸i parametrii h0- ora de ˆ ınceput a activit˘ at ¸ilor ˆ ın zi ¸ si , d- du-
rata ˆ ın minute a unei ore. Astfel, pentru o valoare t∈[0, n∗m], ziua
va fi day = 1 + [ t/n], ora hrs=h0+ (t−[t/n]∗n)∗d/60 iar minutul
min = (t−[t/n]∗n)−(hrs−h0)∗60
7.1.3 Participant ¸i (Actori)
Desf˘ a¸ surarea unui eveniment presupune implicarea unor anumite entit˘ at ¸i,
unele dintre ele fiind prestabilite, altele alocate dinamic ˆ ın funct ¸ie de diverse
condit ¸ii. Vom numi actor orice participant la o activitate care este asignat

7.1. INTRODUCERE 139
acesteia independent de procesul de creare a orarului. Acesta poate fi o
persoan˘ a anume, cum ar fi un cadru didactic sau un student, sau un grup de
persoane cum ar fi, ˆ ın cazul unei facult˘ at ¸ii, ani, semiani sau grupe de studiu.
Dup˘ a cum vom vedea, organizarea actorilor ˆ ıntr-o structur˘ a comun˘ a de date
este foarte important˘ a pentru determinarea relat ¸iilor dintre ace¸ stia.
Din punctul de vedere al asocierii eveniment-actor , vom considera c˘ a
fiecare eveniment poate avea oricˆ at ¸i actori, dar cel put ¸in unu, aceast˘ a abor-
dare permit ¸ˆ and o flexibilitate sporit˘ a ˆ ın organizarea orarului. Pentru a ex-
emplifica, ˆ ın cazul cursurilor opt ¸ionale sau facultative, exist˘ a de multe ori
situat ¸ii ˆ ın care acestea se desf˘ a¸ soar˘ a ˆ ımpreun˘ a cu student ¸i din mai mult ¸i
ani de studiu, sau exist˘ a activit˘ at ¸i care presupun participarea mai multor
profesori, cum ar fi ¸ sedint ¸e sau seminarii ¸ stiint ¸ifice.
Arborele de incluziune
Revenind la organizarea participant ¸ilor, vom defini ˆ ın primul rˆ and un ar-
bore care s˘ a surprind˘ a relat ¸ia de incluziune a actorilor. Nodurile frunz˘ a ale
acestuia vor fi formate din actorii de baz˘ a (persoane propriu-zise sau grupe
indivizibile de cursant ¸i), nodurile interne reprezentˆ and reuniunea tuturor ac-
torilor din nodurile fiu. Mai jos, este schematizat un exemplu de astfel de
arbore:
-Facultatea de informatica
– Profesori
– Catedra de optimizare (OIA)
– Cornelius Croitoru
– Cristian Frasinaru
– …
– Colaboratori
– …
– Studenti
– Cursuri de zi (3 ani)
– Anul 1
– Semianul A
– Grupa 1
– Grupa 2
– …
– Semianul B

140 CAPITOLUL 7. PROBLEMA ORARULUI
– …
– Invatamant la distanta
– …
Evenimentelor le pot fi asignat ¸i actori de pe orice nivel din arbore.
Propozit ¸ie 18 Fiea1,a2doi actori. a1∩a2/negationslash=∅⇔ exist˘ a un drum de la
r˘ ad˘ acina arborelui de incluziune la un nod frunz˘ a ce cont ¸ine pe a1¸ sia2.
7.1.4 Resurse
Prin resurse vom ˆ ınt ¸elege elementele necesare desf˘ a¸ sur˘ arii unei act ¸iuni, cum
ar fi: videoproiectoare, laptop-uri, retroproiectoare, etc. ce vor fi alocate
dinamicˆ ın procesul de creare a orarului. Din punctul de vedere al identific˘ arii
lor, resursele pot fi:
•simple (specifice) – identificate ˆ ın mod unic, cum ar fi un profesor sau
o sal˘ a special˘ a; la un moment dat o resurs˘ a specific˘ a execut˘ a cel mult
un eveniment.
•compuse – acestea sunt mult ¸imi formate din resurse simple, cum ar fi
resursa s˘ ali de laborator , format˘ a din mult ¸imea resurselor specifice ce
reprezinta s˘ alile ˆ ın care pot fi t ¸inute laboratoare.
•cumulative – reprezint˘ a o resurs˘ a generic˘ a c˘ areia ˆ ıi este asociat˘ a o an-
umit˘ a capacitate specificat˘ a printr-un num˘ ar ˆ ıntreg, cum ar fi resursa
videoproiector , capacitatea acesteia fiind num˘ arul de videoproiectoare
disponibile. O resurs˘ a cumulativ˘ a poate sust ¸ine mai multe activit˘ at ¸i ˆ ın
paralel, cu condit ¸ia s˘ a nu fie dep˘ a¸ sit˘ a capacitatea acesteia.
Fiecare eveniment poate avea asignate anumite resurse simple ¸ si cantit˘ at ¸i
prestabilite ale unor resurse cumulative; un exemplu ar fi un curs ce nece-
sit˘ a o anumit˘ a sal˘ a (resurs˘ a simpl˘ a), un videoproiector ¸ si un laptop (resurse
cumulative).
7.2 Ret ¸eaua de constrˆ angeri
S˘ a vedem ˆ ın continuare cum putem reprezenta problema orarului sub forma
unei ret ¸ele de constrˆ angeri, acest lucru presupunˆ and identificarea variabilelor,

7.2. RET ¸EAUA DE CONSTR ˆANGERI 141
domeniilor ¸ si a constrˆ angerilor. Caˆ ın majoritatea situat ¸iilor exist˘ a mai multe
variante de modelare a problemei care, de¸ si conceptual sunt echivalente, pot
avea un impact semnificativ asupra eficient ¸ei procesului necesar obt ¸inerii
solut ¸iei. In cazul nostru, distingem cel put ¸in dou˘ a variante:
a.variabilele ret ¸elei reprezint˘ a evenimentele iar valorile vor fi alese din
domeniul temporal asociat.
b.variabiele ret ¸elei sunt reprezentate de elementele domeniilor temporale,
valorile acestora fiind alese din mult ¸imea evenimentelor.
Intrucˆ at, ˆ ın general, este de preferat ca dimensiunea maxim˘ a a domeniilor de
valori ale variabilelor s˘ a fie mai mici decˆ at num˘ arul de variabile, vom alege
pentru modelare prima variant˘ a.
7.2.1 Variabile ¸ si domenii
Pentru fiecare activitate evom considera o singur˘ a variabil˘ a pe care o vom
nota tot e.
Dup˘ a cum am v˘ azut, pentru desf˘ a¸ surarea unui eveniment sunt necesare
o serie de resurse cum ar fi o sal˘ a sau un videoproiector. Acest lucru va fi
specificat printr-un tablou de liste, fiecare intrare a tabloului fiind mult ¸imea
resurselor disponibile din care va fi selectat˘ a una anume de tipul dorit. Astfel,
o solicitare de tipul: ”cursul va fi ˆ ın una din s˘ alile C308 sau C309, am nevoie
de videoproiector ¸ si ˆ ın paralel ret ¸inet ¸i una din s˘ alile de laborator C401,C409
sau C412 pentru ultima parte a semestrului ˆ ın care se vor desf˘ a¸ sura lucr˘ ari
practice” va fi formalizat˘ a prin structura de date:
res[1] = {C308, C309}
res[2] = {video}
res[3] = {C401, C409, C412}
Din cele trei liste de resurse va fi ales ¸ si asignat evenimentului cˆ ate un singur
element.
Domeniul unei variabile trebuie s˘ a surprind˘ a atˆ at momentele din spat ¸iul
temporal la care evenimentul poate fi plasat cˆ at ¸ si variantele de resurse
disponibile. Pentru o variabil˘ a e, dac˘ a not˘ am cu T={t1, t2, …, t k}spat ¸iul
s˘ au temporal ¸ si{Ri|i= 1, p}resursele dorite, domeniul lui eva fi format din
produsul cartezia ˆ ıntre toate aceste mult ¸imi:
De=T×R1×R2×…R p

142 CAPITOLUL 7. PROBLEMA ORARULUI
Revenind la exemplul anterior, dac˘ a T={Luni (10−12), Marti (12−14)}
atunci domeniul variabilei asociate va avea 12 valori ¸ si anume:
{ (L 10-12, C308, video, C401), (L 10-12, C308, video, C409),
(L 10-12, C308, video, C412), (L 10-12, C309, video, C401),
(L 10-12, C309, video, C409), (L 10-12, C309, video, C412),
(Ma 12-14, C308, video, C401), (Ma 12-14, C308, video, C409),
(Ma 12-14, C308, video, C412), (Ma 12-14, C309, video, C401),
(Ma 12-14, C309, video, C409), (Ma 12-14, C309, video, C412) }
De cele mai multe ori, num˘ arul de mult ¸imi de resurse nu este mare (1 ,2) ceea
ce face ca domeniile variabilelor s˘ a nu devin˘ a exagerat de mari.
De asemenea, trebuie t ¸inut cont ¸ si de s˘ apt˘ amˆ ana ˆ ın care va fi plasat
evenimentul, ˆ ın cazul celor care se desf˘ a¸ soar˘ a la dou˘ a s˘ apt˘ amˆ ani, caz ˆ ın care
domeniul va fi:
De={1,2}×T×R1×R2×…R p
A¸ sadar, valorile variabilelor ce descriu evenimente vor avea urm˘ atoarele
atribute:
•start – momentul temporal la care ˆ ıncepe evenimentul,
de exemplu: luni, ora 10 ;
•end- informat ¸ie redundant˘ a ce semnific˘ a momentul de terminare a
evenimentului, de exemplu: luni, ora 12 ;
•week – s˘ apt˘ amˆ ana ˆ ın care se va desf˘ a¸ sura: 0 – toate, 1 – impare, 2 –
pare;
•resources – lista de resurse asignate, de exemplu: {C308, video, C401 }
7.2.2 Constrˆ angeri
Constrˆ angerile trebuie s˘ a reflecte atˆ at restrict ¸iile tari ale problemei, cum
ar fi imposibilitatea desf˘ a¸ sur˘ arii a dou˘ a act ¸iuni ˆ ın aceea¸ si sal˘ a, precum ¸ si
cele slabe, reprezentate de preferint ¸ele actorilor. Intrucˆ at solverul OmniCS
abordeaz˘ a ˆ ın mod unitar ambele tipuri de constrˆ angeri, ˆ ın clasificarea de
mai jos nu le vom diferent ¸ia ˆ ın mod explicit. Astfel, identific˘ am urm˘ atoarele
restrict ¸ii:
•evenimentele ce au actori comuni nu trebuie s˘ a fie concurente;

7.2. RET ¸EAUA DE CONSTR ˆANGERI 143
•un eveniment trebuie s˘ a se desf˘ a¸ soare doar ˆ ın anumite momente spec-
ificate;
•o mult ¸ime de evenimente poate fi dispus˘ a doar ˆ ın anumite zile;
•o mult ¸ime de evenimente poate fi dispus˘ a doar ˆ ıntre anumite ore;
•o mult ¸ime de evenimente trebuie s˘ a se desf˘ a¸ soare consecutiv;
•o mult ¸ime de evenimente trebuie s˘ a se desf˘ a¸ soare concurent;
•un eveniment trebuie s˘ a aib˘ a loc neap˘ arat ˆ ınainte sau dup˘ a alt eveni-
ment;
•o resurs˘ a specific˘ a nu poate fi asignat˘ a la dou˘ a evenimente concurente;
•suma cantit˘ at ¸ilor dintr-o o resurs˘ a cumulativ˘ a asignate unor eveni-
mente concurente nu poate dep˘ a¸ si capacitatea acesteia;
•o resurs˘ a este (nu este) disponibil˘ a ˆ ıntr-un anumit interval al domeni-
ului temporal;
Intrucˆ at restrict ¸iile pot fi obligatorii sau nu, trebuie s˘ a utiliz˘ am un sistem
de reprezentare a preferint ¸elor ˆ ın care acestora s˘ a le asociem un anumit nivel
care s˘ a indice m˘ asura ˆ ın care trebuie respectate.
Fiec˘ arui tip de restrict ¸ie ˆ ıi vom crea o clas˘ a ce define¸ ste constrˆ angerea
respectiv˘ a precum ¸ si o modalitate de specificare descriptiv˘ a a sa. In mod
uzual, constrˆ angerile tari sunt invariabile ¸ si trebuie ad˘ augate oricum.
Fiec˘ arui actor ˆ ıi vom pune ˆ ın corespondent ¸˘ a un fi¸ sier descriptor ˆ ın format
XML ce formalizeaz˘ a preferint ¸ele acestuia precum ¸ si necesarul de resurse
pentru evenimentele sale. S˘ a consider˘ am un exemplu foarte simplu:
<!–
Eu as dori sa mi se puna cursul de grafuri la anul 2 astfel :
Luni 8-10 si Marti de la 10-12 in sala C112 cu video si laptop.
Consultatiile pot fi puse (2 calupuri a 2 ore)
unul marti seara si altul vineri dimineata.
–>
<prefs actor="cc">
<event id="Cgraf_A, Cgraf_B">
<res id="C112"/>

144 CAPITOLUL 7. PROBLEMA ORARULUI
<res id="video"/>
<include day="1" hour="8"/>
<include day="2" hour="10"/>
</event>
<event id="S_consult1">
<res id="Cabinet"/>
<include day="2" hour="18"/>
</event>
<event id="S_consult2">
<res id="Cabinet"/>
<include day="5" hour="8"/>
</event>
</prefs>
S˘ a detaliem ˆ ın continuare tipurile de constrˆ angeri implementate.
Constrˆ angeri de compatibilitate
Spunem c˘ a dou˘ a evenimente instant ¸iate sunt compatibile dac˘ a:
•nu au actori sau resurse simple comune sau
•au actori sau resurse simple comune dar nu se suprapun temporal.
O restrict ¸ie tare a orarului este c˘ a oricare dou˘ a evenimente trebuie s˘ a fie
compatibile, acest tip de constrˆ angere trebuind s˘ a fie impus obligatoriu pen-
tru orice pereche de evenimente ce au potent ¸ial de a intra ˆ ın conflict: au
actori comuni sau mult ¸imile de resurse solicitate au intersect ¸ia nevid˘ a. Con-
strˆ angerile de compatibilitate reprezint˘ a cea mai mare parte din mult ¸imea
tuturor constrˆ angerilor. Pentru a exemplifica, ˆ ın cazul orarului Facult˘ at ¸ii de
Informatic˘ a Ia¸ si pentru semestrul 2 anul ¸ scolar 2005-2006, dintr-un total de
peste 20 .400 constrˆ angeri mai mult de 20 .000 au fost de compatibilitate.
Constrˆ angeri legate de capacitatea resurselor
Acest tip de constrˆ angere impune ca num˘ arul evenimentelor concurente care
utilizeaz˘ a o resurs˘ a cumulativ˘ a s˘ a nu fie mai mare decˆ at capacitatea resursei
respective. Fie ro resurs˘ a ¸ si c(r) capacitatea acesteia. S˘ a not˘ am cu e1, …, e k
o mult ¸ime de evenimente concurente, fiecare utilizˆ and p(ei) unit˘ at ¸i de tipul

7.2. RET ¸EAUA DE CONSTR ˆANGERI 145
resursei r. Constrˆ angerea poate fi formulat˘ a astfel:
/summationdisplay
i=1,kp(ei)≤c(r)
Constrˆ angerea este global˘ a ¸ si trebuie impus˘ a pe mult ¸imea tuturor vari-
abilelor ce definesc evenimente care solicit˘ a resursa respectiv˘ a.
Restrict ¸ii asupra disponibilit˘ at ¸ii resurselor
Un alt tip de constrˆ angere tare ce poate ap˘ area se refer˘ a la faptul c˘ a anumite
resurse nu sunt disponibile pe tot domeniul temporal asociat evenimentelor.
Astfel, o situat ¸ie frecvent˘ a este cea ˆ ın care unele s˘ ali sunt partajate ˆ ıntre
mai multe facult˘ at ¸i, fiec˘ areia revenindu-i anumite zile ¸ si intervale orare ˆ ın
care poate desf˘ a¸ sura activit˘ at ¸i ˆ ın sala respectiv˘ a. Sigur c˘ a aceast˘ a restrict ¸ie
poate fi relaxat˘ a ˆ ın condit ¸iile ˆ ın care se prefer˘ a ca o anumit˘ a resurs˘ a s˘ a nu fie
utilizat˘ a din diferite motive, cum ar fi starea sa precar˘ a sau distant ¸a mare
fat ¸˘ a de locul uzual de desf˘ a¸ surare a evenimentelor dar ˆ ın lipsa altor solut ¸ii
folosirea ei s˘ a poat˘ a fi f˘ acut˘ a.
Constrˆ angerea este global˘ a ¸ si trebuie impus˘ a pe mult ¸imea tuturor vari-
abilelor ce definesc evenimente care solicit˘ a resursa respectiv˘ a, avˆ and ca ar-
gument subspat ¸iul temporal ce specific˘ a disponibilitatea resursei respective.
Acesta va fi reprezentat sub forma unui tablou aavˆ and hdelemente, unde
heste num˘ arul orelor din zi iar dnum˘ arul orelor din s˘ apt˘ amˆ an˘ a, elementele
sale avˆ and urm˘ atoarele valori:
•0 – pozit ¸ia respectiv˘ a este permis˘ a
•+∞- pozit ¸ia respectiv˘ a nu este permis˘ a
•0< c <∞- pozit ¸ia este permis˘ a cu un anumit nivel de preferint ¸˘ a,
utilizarea ei fiind penalizat˘ a cu valoarea c.
Restrict ¸ii asupra disponibilit˘ at ¸ii actorilor
Majoritatea participant ¸ilor implicat ¸i ˆ ın activit˘ at ¸ile ce trebuie planificate im-
pun anumite restrict ¸ii asupra momentelor ˆ ın care acestea se pot desf˘ a¸ sura.
Aceste restrict ¸ii se pot referi la mult ¸imea tuturor evenimentelor unui actor
sau pot fi particularizate asupra fiec˘ arui eveniment sau grup de evenimente

146 CAPITOLUL 7. PROBLEMA ORARULUI
ˆ ın parte. Indiferent de modul de specificare a acestora, la nivel intern con-
strˆ angerea aferent˘ a va fi unar˘ a, avˆ and ca argumente variabila ce reprezint˘ a
un eveniment restrict ¸ionat ¸ si subspat ¸iul temporal aferent, acesta din urm˘ a
fiind reprezentat sub forma unui tablu, ca mai sus. La nivel descriptiv, im-
plicit se presupune c˘ a actorul este disponibil ˆ ın orice moment. La aparit ¸ia
unei intr˘ ari de tip include , spat ¸iul temporal urmeaz˘ a s˘ a fie restrict ¸ionat,
presupunerea init ¸ial˘ a este negat˘ a ceea ce ˆ ınseamn˘ a c˘ a actorul nu mai este
considerat disponibil decˆ at ˆ ın intervalele specificate. Includerea intervalelor
se face extrem de simplu prin enumerarea zilelor ¸ si orelor permise, eventual a
penaliz˘ arilor aferente (ˆ ın lipsa acestora constrˆ angerea este considerat˘ a tare).
<!–
O sa am 4 laboratoare de SO.
Daca se poate as dori sa fie puse luni, marti intre 8 si 12
sau vineri oricind.
–>
<prefs actor="a">
<event id="Lso1, Lso2">
<res id="sali-lab"/>
<include day="1,2" hour="8,10,12"/>
<include day="5"/>
</event>
</prefs>
Dac˘ a tagul include este subtag event atunci el se va referi la evenimentele
specificate de acesta, ˆ ın caz contrar va fi aplicat pentru toate evenimentele
actorului. Un exemplu de utilizare a penaliz˘ arilor:
<!–
Cursul poate fi in orice zi intre 10 si 14.
As prefera totusi, daca se poate, sa nu fie vineri.
–>
<prefs actor="a">
<event id="Cso1">
<res id="sali-curs"/>
<include hour="10,12"/>
<include day="5" penalty="10" />
</event>
</prefs>

7.2. RET ¸EAUA DE CONSTR ˆANGERI 147
Este u¸ sor de remarcat c˘ a, ˆ ın prezent ¸a mai multor directive include care
restrict ¸ioneaz˘ a domeniul temporal prin tablourile a1, …a k, tabloul ace va fi
creat ˆ ın final ca argument al constrˆ angerii va avea valorile create dup˘ a regula:
a[i] =max(a1[i], a2[i], …, a k[i])
In cazul constrˆ angerilor tari de acest tip, fiind unare, ele vor avea ca efect
reducerea domeniului variabilelor respective dup˘ a care pot fi eliminate din
ret ¸eaua de constrˆ angeri ˆ ınainte de pornirea efectiv˘ a a algoritmului sistematic
de rezolvare.
Secvent ¸ialitatea ¸ si ordinea evenimentelor
De foarte multe ori se dore¸ ste ca o mult ¸ime de evenimente s˘ a se desf˘ a¸ soare
ˆ ın bloc compact, indiferent de ordine sau ˆ ıntr-o ordine oarecare. Acest lucru
poate fi specificat prin constrˆ angerea linked care impune ca o mult ¸ime de
evenimente s˘ a fie legate, respectiv order cu argumentele first ¸ silast care
define¸ ste o relat ¸ie de ordine part ¸ial˘ a asupra acestor evenimente.
<!–
Cursul si seminarul vor fi luni, cursul inaintea seminarului.
Cele 3 laboratorare vor fi marti, unul dupa altul.
–>
<prefs actor="a">
<event id="curs">
<res id="sali-curs"/>
<include day="1"/>
</event>
<event id="curs, seminar">
<res id="sali-sem"/>
<include day="1"/>
</event>
<linked events="curs,seminar"/>
<order events="curs,seminar"
first="curs" last="seminar"/>
<event id="lab1, lab2, lab3">
<res id="sali-lab"/>
<include day="2"/>

148 CAPITOLUL 7. PROBLEMA ORARULUI
<linked/>
</event>
</prefs>
Concurent ¸a evenimentelor
Acest tip de constrˆ angere se refer˘ a ˆ ın special la evenimente care au loc o
dat˘ a la dou˘ a s˘ apt˘ amˆ ani ¸ si sunt formate dintr-un un num˘ ar par de grupe de
studii diferite. S˘ a consider˘ am exemplul unui curs facultativ t ¸inut la fiecare
din semianii A, B ai anului 1, o dat˘ a la dou˘ a s˘ apt˘ amˆ ani. Din punctul de
vedere al profesorului ¸ si din punctul de vedere al eficientiz˘ arii utiliz˘ arii s˘ alilor
este de preferat ca ambele cursuri s˘ a fie plasate ˆ ın acela¸ si moment, unul ˆ ın
s˘ apt˘ amˆ ana par˘ a iar cel˘ alalt ˆ ın cea impar˘ a. Acest lucru poate fi realizat cu
directiva concurrent :
<prefs actor="a">
<event id="cursA, cursB">
<res id="sali-curs"/>
<concurrent/>
</event>
</prefs>
Limitarea num˘ arului de zile ¸ si ore
Cu ajutorul constrˆ angerilor de tip days , respectiv hours ce au parametrii
min¸ simaxpot fi limitate num˘ arul zilelor ˆ ın care se desf˘ a¸ soar˘ a un grup de
evenimente, respectiv num˘ arul orelor din zilele ˆ ın care exist˘ a evenimente
plasate. Aceast˘ a restrict ¸ie poate fi aplicat˘ a global pe mult ¸imea evenimentelor
tuturor actorilor pentru a limita num˘ arul orelor dintr-o zi la maxim 8 de
exemplu, sau individual doar pentru evenimentele unui singur actor:
<!–
Doresc sa nu am mai mult 6 ore pe zi.
Ar fi de preferat sa nu existe zile in care sa am doar 2 ore.
–>
<prefs actor="a">

7.2. RET ¸EAUA DE CONSTR ˆANGERI 149
<hours max="6"/>
<hours min="4" penalty="1"/>
</prefs>
Restrict ¸ionarea num˘ arului de zile poate fi f˘ acut˘ a ca ˆ ın exemplul de mai
jos:
<!–
Deoarece anul acesta am lucrarea de doctorat de finalizat si
am nevoie de cat mai multe zile libere,
as vrea ca toate orele mele sa fie dispuse intr-o singura zi.
–>
<prefs actor="b">

<days max="1"/>
</prefs>
7.2.3 Complexitatea problemei
S˘ a consider˘ am problema de decizie asociat˘ a unui caz particular al problemei
de construct ¸ie a orarului formulat˘ a ˆ ın capitolul anterior:
(TTP)
Instant ¸˘ a : O mult ¸ime A={a1, …, a n}de activit˘ at ¸i ce partajeaz˘ a resurse
comune (ce pot fi actori sau resurse propriu-zise) ¸ si un domeniu temporal
T={t1, …t p}.
Intrebare : Exist˘ a o asignare a evenimentelor din Acu valori din Tastfel
ˆ ıncˆ at oricare dou˘ a evenimente ce au actori comnuni s˘ a nu fie concurente ?
Vom ar˘ ata c˘ a aceast˘ a problem˘ a este NP-complet˘ a demonstrˆ and c˘ a poate fi
obt ¸inut˘ a prin transformarea ˆ ın timp polinomial a unei probleme a c˘ arei NP-
completitudine a fost demonstrat˘ a. In lucrarea [7] autorii Tim B. Cooper
¸ si Jeffrey H. Kingston pun ˆ ın evident ¸˘ a cinci metode diferite de a realiza
acest lucru, scot ¸ˆ and astfelˆ ın evident ¸˘ a complexitatea problemei din mai multe
perspective.
F˘ ar˘ a a ne propune s˘ a intr˘ am ˆ ın detalii, prezent˘ am mai jos echivalent ¸a
dintre problema orarului ¸ si problema color˘ arii vˆ arfurilor unui graf. Aceasta
din urm˘ a este formulat˘ a astfel:

150 CAPITOLUL 7. PROBLEMA ORARULUI
(COL)
Instant ¸˘ a :G= (V, E) un graf ¸ si pun num˘ ar natural pozitiv.
Intrebare : Exist˘ a o p-colorare a vˆ arfruilor lui G?
Urm˘ atorul rezultat este binecunoscut:
Teorema 3 (Karp, 1972) [29] COL este NP-complet˘ a.
Teorema 4 TTP este NP-complet˘ a.
Vom reduce problema color˘ arii la problema orarului: COL α TTP . Fie G
un graf oarecare ¸ si pun num˘ ar de culori datele unei probleme COL . Vom
construim ˆ ın timp polinomial urm˘ atoarea problem˘ a de orar:
•fiec˘ arui vˆ arf viˆ ıi cre˘ am o activitate ai; init ¸ial presupunem c˘ a activit˘ at ¸ile
nu au nici o resurs˘ a asociat˘ a.
•pentru oricare dou˘ a vˆ arfuri adiacente a1¸ sia2, dac˘ a acestea nu au nici
o resurs˘ a comun˘ a, le ad˘ aug˘ am una ambelor.
•cre˘ am un domeniu temporal oarecare cu pelemente
In mod evident am obt ¸inut o instant ¸˘ a TTP, ceea ce demonstraz˘ a c˘ a problema
orarului este NP-complet˘ a.
7.3 Rezolvarea problemei orarului
Dup˘ a formalizarea problemei, urm˘ atorul pas ˆ ın rezolvarea acesteia este uti-
lizarea unui solver CSP pentru obt ¸inerea unei solut ¸ii optime. Dup˘ a cum am
ment ¸ionat deja solverul utilizat (OmniCS) permite particularizarea strategi-
ilor de ˆ ınaintare ¸ si instant ¸iere a variabilelor lucru util din punct de vedere
practic ˆ ıntrucˆ at o serie de euristici desprinse din experient ¸a practic˘ a se pot
dovedi extrem de utile.
Strategia de ˆ ınaintare
Euristica de selectare a variabilelor folosit˘ a este de tip ”domeniu minimal”
care alege ca urm˘ atoare variabil˘ a pe cea cu domeniul cel mai mic. In cazul
nostru, am considerat mai important aspectul temporal al domeniului ¸ si,
pentru fiecare eveniment a fost calculat un coeficient tightness ce reprezint˘ a
gradul de restrictivitate temporal˘ a extras din preferint ¸ele acestuia. Valorile
acestui coeficient sunt numere reale din intervalul [0 ,1], 1 avˆ and semnificat ¸ia

7.3. REZOLVAREA PROBLEMEI ORARULUI 151
de foarte restrictiv iar 0 de foarte relaxat. Alegerea variabilelor se va face de-
scresc˘ atorˆ ıncepˆ and cu cele de coeficient maxim. In cazul unor valori egale ale
restrictivit˘ at ¸ii, va fi folosit˘ a tehnica ”adiacent ¸ei maximale” , care selecteaz˘ a
ca urm˘ atoare variabil˘ a pe cea cu cele mai multe ”adiacent ¸e” ˆ ın mult ¸imea
variabilelor instant ¸iate deja; ˆ ın cazul nostru adiacent ¸a are semnificat ¸ia de
actori comuni.
Strategia de instant ¸iere
Euristica de instant ¸iere a variabilelor impune ca alegerea unei valori s˘ a se
fac˘ a astfel ˆ ıncˆ at orarul rezultat aferent actorilor implicat ¸i ˆ ın eveniment s˘ a
fie:
•minimal din punct de vedere temporal : aceast˘ a condit ¸ie ne asigur˘ a c˘ a,
ˆ ın condit ¸iile ˆ ın care o serie de evenimente pot fi suprapuse (cursuri
opt ¸ionale, la dou˘ a s˘ apt˘ amˆ ani, etc.) acestea vor fi suprapuse.
•compact : fragmentarea zilnic˘ a a participant ¸ilor s˘ a fie cˆ at mai mic˘ a.
Utilizˆ and aceste euristici, ˆ ın condit ¸iile ˆ ın care problema creat˘ a pe baza
tuturor preferint ¸elor nu a fost supra-constrˆ ans˘ a, solverul OmniCS a determi-
nat o solut ¸ie ˆ ıntr-un timp de ordinul minutelor, cu un num˘ ar extrem de redus
de backtracking-uri. Num˘ arul evenimentelor a fost de peste 300 iar num˘ arul
constrˆ angerilor de peste 20 .000, solut ¸ia g˘ asit˘ a fiind apropiat˘ a de cea generat˘ a
manual ˆ ın prealabil, proces care a durat 4-5 zile de munc˘ a.
In aceste condit ¸ii, singura activitate consumatoare de timp r˘ amˆ ane
operat ¸iunea de formalizare a preferint ¸elor participant ¸ilor la orar ¸ si de identifi-
care a eventualelor conflicte ˆ ıntre acestea. In viitor, ne propunem sa realiz˘ am
o interfat ¸˘ a grafic˘ a Web [20] prin intermediul c˘ areia s˘ a poat˘ a fi colectate ¸ si
formalizate automat preferint ¸ele participant ¸ilor ¸ si, ˆ ın acela¸ si timp, s˘ a asigure
consistent ¸a problemei la un anumit nivel.
Exist˘ a ˆ ıns˘ a o serie de limit˘ ari legate de rezolvarea problemei orarului sub
forma unui tot unitar, indiferent de modul ˆ ın care aceasta este abordat˘ a.
Aceste neajunsuri survin din faptul c˘ a enunt ¸ul problemei ˆ ın cele mai multe
cazuri nu este static, specificat ¸iile fiind ˆ ın permanent˘ a schimbare. Cu alte
cuvinte, este posibil ca dup˘ a construirea orarului s˘ a apar˘ a elemente noi care
trebuie luate ˆ ın calcul cum ar fi introducerea unor activit˘ at ¸i suplimentare,

152 CAPITOLUL 7. PROBLEMA ORARULUI
schimbarea de ultim moment a preferint ¸elor unor profesori sau indisponi-
bilizarea unor resurse, schimb˘ ari ce pot intra ˆ ın conflict cu solut ¸ia final˘ a
generat˘ a de solverul CSP. Reluarea ˆ ıntregului proces de construire a orarului
poate fi o rezolvare dar, ˆ ın situat ¸ii complexe, ea poate fi totu¸ si de durat˘ a ¸ si
nu este firesc s˘ a se piard˘ a ˆ ıntregul efort de procesare anterior.
Pentru a oferi o solut ¸ie efectiv practic˘ a ar trebui ca solverul responsabil
cu rezolvarea problemei s˘ a poat˘ a face fat ¸˘ a la situat ¸iile enumerate anterior ˆ ın
mod eficient, exploatˆ and cˆ at mai mai mult din rezultatul obt ¸inut anterior
ˆ ın ˆ ıncercarea de generarea a unei noi solut ¸ii care s˘ a satisfac˘ a specificat ¸iile
actuale ale problemei.
In capitolul urm˘ ator vom analiza aspectele construirii unui solver CSP
interactiv .

Capitolul 8
Rezolvarea interactiv˘ a a
problemelor
La ora actual˘ a rezolvarea problemelor modelate cu constrˆ angeri a fost abor-
dat˘ a prin prisma faptului c˘ a ret ¸eaua obt ¸inut˘ a ˆ ın urma etapei de modelare
este ˆ ın forma sa final˘ a, fiind astfel static˘ a pe durata procesului de rezolvare.
Intr-o serie de lucr˘ ari din domeniul inteligent ¸ei artificiale [32], [23] E. Lamma,
M. Gavanelli ¸ si alt ¸ii propun un cadru de lucru interactiv pentru problemele de
satisfacere a constrˆ angerilor (ICSP) ˆ ın care domeniile variabilelor sunt popu-
late dinamic pe m˘ asura execut ¸iei algoritmului de obt ¸inere a solut ¸iei. In aceste
articole dedicate ˆ ın special sistemelor de recunoa¸ stere vizual˘ a, datele proble-
mei sunt obt ¸inute printr-un mecanism de ”achizit ¸ionare a informat ¸iilor” care
se desf˘ a¸ soar˘ a concurent cu procesul de rezolvare.
In capitolul dedicat problemei orarului a fost pus˘ a ˆ ın evident ¸˘ a necesitatea
interactivit˘ at ¸ii ¸ si din alte perspective derivate din faptul c˘ a structura prob-
lemei se poate schimba chiar pe parcursul execut ¸iei sau ulterior rezolv˘ arii
acesteia, caz ˆ ın care ar fi de preferat reutilizarea efortului computat ¸ional
depus pentru obt ¸inerea solut ¸iei anterioare ˆ ıntr-o m˘ asur˘ a cˆ at mai mare.
In lucrarea lui M. Sergot, ”A query-the-user facility of logic program-
ming” [47], acest lucru este sintetizat astfel: ”Este nerezonabil ¸ si nerealist
s˘ a fort ¸˘ am utilizatorul s˘ a anticipeze ¸ si s˘ a furnizeze ˆ ın avans toate informat ¸iile
necesare rezolv˘ arii unei probleme”. Un sistem de lucru eficient trebuie s˘ a
ofere posibilitatea schimb˘ arii datelor problemei cu un efort minim de calcul.
Astfel, un solver CSP interactiv trebuie s˘ a permit˘ a urm˘ atoarele lucruri:
•Oprirea temporar˘ a a execut ¸ie ¸ si reluarea acesteia la un moment ulterior
153

154CAPITOLUL 8. REZOLVAREA INTERACTIV ˘A A PROBLEMELOR
•Salvarea ¸ si restaurarea st˘ arii ˆ ın form˘ a persistent˘ a
•Extinderea st˘ arii curente prin decizii externe (manuale)
•Anularea manual˘ a a unor decizii luate de solver
•Eliminarea (inactivarea) unor variabile
•Ad˘ augarea de noi variabile
•Ad˘ augarea, eliminarea sau modificarea constrˆ angerilor.
8.1 Starea unui solver
FieR= (X,D,C) o ret ¸ea de constrˆ angeri corespunz˘ atoare unei probleme
oarecare, unde X={x1, …, x n}¸ siD={D1, …, D n}. Dup˘ a cum am mai spus,
obt ¸inerea unei solut ¸ii a ret ¸elei Rprin intermediul unui algoritm sistematic
poate fi v˘ azut˘ a ca o succesiune finit˘ a de transform˘ ari R=R0→R1→…→
Rf, unde Ri¸ siRjsunt echivalente iar Ri+1≺Ri(ˆ ın sensul c˘ a spat ¸iul de
c˘ autare al lui Ri+1este mai mic decˆ at al lui Ri) iar Rfare toate domeniile
formate dintr-un singur element, etapa de transformare Ri→Ri+1fiind
realizat˘ a prin luarea unor decizii de instant ¸iere ¸ si propagarea acestora asupra
domeniilor variabilelor.
Ridecizie−−−−−−−−−−−→
propagare/filtrareRi+1
Deoarece este posibil ca procesul de rezolvare s˘ a aib˘ aˆ ıntoarceri este necesar ca
ˆ ınainte de trecerea de la RilaRi+1ca urmare a instant ¸ierii x=as˘ a memor˘ am
peRiastfel ˆ ıncˆ at dac˘ a Ri+1se dovede¸ ste a fi inconsistent˘ a s˘ a putem reface
problema la momentul deciziei x=a¸ si s˘ a continu˘ am atribuindu-i lui xo
alt˘ a valoare.
Definit ¸ie 17 Vom numi stare saustare simpl˘ a a unui solver CSP o struc-
tur˘ aS= (α, δ, π, ω ) unde:
•αreprezint˘ a variabilele neinstant ¸iate ale problemei (candidat ¸ii)
•δ(x) reprezint˘ a domeniul variabilei x,∀x∈X.

8.2. OPRIREA S ¸I RELUAREA EXECUT ¸IEI 155
•πeste stiva deciziilor strategiei de ˆ ınaintare, cu alte cuvinte mult ¸imea
variabilelor c˘ arora le-au fost atribuite valori dispuse ˆ ıntr-o structur˘ a de
tip stiv˘ a, baza fiind prima variabil˘ a aleas˘ a de solver iar vˆ arful variabila
curent˘ a aflat˘ a ˆ ın proces de instant ¸iere.
•ωeste o tupl˘ a reprezentˆ and solut ¸ia curent˘ a.
Ret ¸eaua init ¸ial˘ a ce urmeaz˘ a a fi rezolvat˘ a va avea starea:
(S0) :α0=X, δ 0(xi) =Di∀i=1, n, π 0=∅, ω0=∅
O stare este final˘ a dac˘ a:
(Sf) :αf=∅,|δf(xi)|= 1∀i=1, n, π f=X, var (ωf) =X
In definit ¸ia de mai sus am presupus c˘ a nu exist˘ a o dinamic˘ a a con-
strˆ angerilor ˆ ın trecerea de la o stare la alta. Modelul ˆ ın care constrˆ angerile
pot fi activate sau nu ˆ ın funct ¸ie de starea solverului introduce un grad sporit
de complexitate ¸ si nu ˆ ıl vom analiza ˆ ın continuare.
Definit ¸ie 18 Un solver Sasociat unei ret ¸ele consistente Reste corect
dac˘ a ¸ si numai dac˘ a exist˘ a o succesiune de st˘ ari S0→…→Sfcu proprietatea
c˘ aSfeste final˘ a ¸ si ωfeste consistent˘ a.
Definit ¸ie 19 Un solver Sasociat unei ret ¸ele Restecomplet dac˘ a ¸ si numai
dac˘ a oricare ar fi ωo solut ¸ie a luiRexist˘ a o succesiune de st˘ ari S0→…→Sf
cu proprietatea c˘ a ωf=ω.
Definit ¸ie 20 FieSun solver asociat unei ret ¸ele R¸ siS0→…→Sist˘ arile
simple corespunz˘ atoare subproblemelor generate de deciziile luate pˆ an˘ a la
momentul curent. Mult ¸imea S∗
i={S0, …, S i}o vom numi starea extins˘ a a
solverului S.
8.2 Oprirea ¸ si reluarea execut ¸iei
Pentru a obt ¸ine interactivitatea, o condit ¸ie esent ¸ial˘ a pe care trebuie s˘ a o
ˆ ındeplineasc˘ a un solver CSP este posibilitatea de a-i opri temporar execut ¸ia

156CAPITOLUL 8. REZOLVAREA INTERACTIV ˘A A PROBLEMELOR
ˆ ın vederea interog˘ arii sau schimb˘ arii st˘ arii sale, dup˘ a care aceasta s˘ a poat˘ a
fi reluat˘ a ulterior. Acest lucru poate fi relizat:
•manual , la momente arbitrare, ˆ ın cazul ˆ ın care este oferit˘ a ¸ si interfat ¸˘ a
grafic˘ a cu utilizatorul
•programatic , la momente prestabilite, cum ar fi: solverul urmeaz˘ a s˘ a
instant ¸ieze o anumit˘ a variabil˘ a, sau o anumit˘ a valoare a fost atribuit˘ a
unei variabile sau la anumite intervale de timp.
Deoarece, din punct de vedere teoretic, a doua situat ¸ie este un caz particular
al primei, vom analiza varianta opririi manuale.
F˘ ar˘ a a detalia deocamdat˘ a implicat ¸iile alter˘ arii st˘ arii solverului, s˘ a vedem
cum poate fi implementat din punct de vedere practic un mecanism de oprire-
pornire a procesului de rezolvare.
O prim˘ a condit ¸ie esent ¸ial˘ a este lansarea algoritmuluiˆ ıntr-un fir de execut ¸ie
propriu, de tip daemon (worker) care s˘ a depind˘ a ¸ si s˘ a poat˘ a fi accesat de un
alt fir de tip controller [19].
Thread worker = new Thread(new Runnable() {
public void run() {
// pornim solverul
solver.solve();
}
});
worker.setDaemon(true);
worker.start();
In al doilea rˆ and trebuie s˘ a existe o metod˘ a care s˘ a notifice firul de execut ¸ie
al algoritmului c˘ a se dore¸ ste ˆ ıntreruperea temporar˘ a a sa. OmniCS ofer˘ a o
solut ¸ie simpl˘ a bazat˘ a pe o variabil˘ a de control paused ¸ si mecanismul wait –
notify de sincronizare a firelor concurente. Variabila de control este accesat˘ a
prin metoda setPaused care va genera ¸ si evenimentele corespunz˘ atoare ˆ ın
cazul ˆ ın care sunt ˆ ınregistrat ¸i observatori.
public synchronized void setPaused(boolean paused) {
this.paused = paused;
if (paused) {
if (firingEvents) {
eventHandler.fireSolverPaused();

8.2. OPRIREA S ¸I RELUAREA EXECUT ¸IEI 157
}
System.out.println("Solver paused.");
} else {
notify();
if (firingEvents) {
eventHandler.fireSolverResumed();
}
System.out.println("Solver resumed.");
}
}
Metoda principal˘ a a solverului trebuie doar s˘ a verifice valoarea variabilei
de control paused ¸ si s˘ a opreasc˘ a temporar execut ¸ia dac˘ a este cazul:
while (running) {
synchronized(this) {
while (paused) {
try {
wait();
} catch(InterruptedException e) {
System.err.println(e);
}
}
if (!running) break;
}

}
Plasarea secvent ¸ei de oprire este important˘ a deoarece trebuie s˘ a garanteze
urm˘ atorul invariant: ”toate variabilele din πsunt instant ¸iate”.
Astfel, oprirea solverului se va face prin apelul solver.setPaused(true) ,
iar reluarea acestuia prin solver.setPaused(false) . Intre aceste apeluri
obiectul solver este disponibil ¸ si expune starea sa curent˘ a precum ¸ si metode
pentru actualizarea ei respectiv revenirea la una din st˘ arile anterioare.
In cazul ˆ ın care se intervine din exterior asupra unei st˘ ari a solverului
acesta ˆ ı¸ si poate pierde propriet˘ at ¸ile de completitudine ¸ si corectitudine.

158CAPITOLUL 8. REZOLVAREA INTERACTIV ˘A A PROBLEMELOR
8.3 Salvarea ¸ si restaurarea st˘ arii extinse
In situat ¸iile ˆ ın care rezolvarea unei probleme este de lung˘ a durat˘ a (ore, sau
chiar zile) exist˘ a riscul ca unitatea de calcul s˘ a devin˘ a indisponibil˘ a ¸ si sis-
temul de operare s˘ a nu fie capabil s˘ a asigure automat persistent ¸a procesului
respectiv. Pentru a rezolva aceast˘ a problem˘ a, ar fi de dorit ca solverul s˘ a
ofere un mecanism propriu de persistent ¸˘ a care s˘ a salveze la cerere sau au-
tomat la intervale de timp prestabilite starea sa extins˘ a astfel ˆ ıncˆ at, dac˘ a
este cazul, execut ¸ia s˘ a poat˘ a fi reluat˘ a de la un anumit punct.
OmniCS utilizeaz˘ a algoritmul standard de serializare a obiectelor pentru
a salva starea extins˘ a a procesului de rezolvare. Utilizarea opt ¸iunilor de
salvare-restaurare este extrem de simpl˘ a ¸ si se face astfel:
// Crearea unui solver pentru problema initiala
solver = problem.createSolver();

// Salvarea starii intr-un fisier extern
solver.save(filename);

// Crearea unui solver care preia
// starea celui salvat in fisier
solver = problem.createSolver(filename);
8.4 Extinderea st˘ arii curente
Extinderea manual˘ a a st˘ arii curente semnific˘ a efectuarea unei decizii care nu
respect˘ a regulile definite de strategiile de ˆ ınaintare ¸ si instant ¸iere. Aceast˘ a
operat ¸iune nu afecteaz˘ a ˆ ın nici un fel comportamentul solverului, act ¸iunile
efectuate fiind descrise ˆ ın algoritmul 21.
Solverul OmniCS ofer˘ a metoda instantiate(Var x, Object a) care
efectueaz˘ a extinderea st˘ arii curente prin instant ¸ierea x=a.
8.5 Anularea unor decizii
Dup˘ a cum ¸ stim rezolvarea sistematic˘ a a unei probleme presupune explorarea
arborelui corespunz˘ ator spat ¸iului solut ¸iilor. Determinarea rapid˘ a a subar-
borilor ale c˘ aror frunze nu sunt consistente reprezint˘ a un factor important

8.6. INACTIVAREA UNOR VARIABILE 159
Algorithm 21 Extinderea st˘ arii curente ( instantiate )
Intrare: Si= (αi, δi, πi, ωi) starea curent˘ a a solverului ¸ si x=ao instant ¸iere,
a∈δi(x)
Rezultat: Si+1starea obt ¸inut˘ a dup˘ a efectuarea deciziei x=a.
{Actualiz˘ am mult ¸imea candidat ¸ilor }
αi+1=αi−{x}
{Actualiz˘ am stiva variabilelor instant ¸iate }
πi+1=πi∪{x}
{Actualiz˘ am solut ¸ia part ¸ial˘ a }
ωi+1(x) =a
{Domeniul variabilei xdevine singleton}
δi+1(x) ={a}
Aplic˘ a algoritmii de filtrare ¸ si propagare
ˆ ın eficientizarea algoritmului general, dar acest lucru nu este simplu. In
condit ¸iile ˆ ın care exist˘ a ˆ ıns˘ a o reprezentare vizual˘ a, interactiv˘ a a procesu-
lui de rezolvare, acesta poate fi ”ajutat” din exterior s˘ a evite parcurgerea
unor port ¸iuni din arbore care nu cont ¸in solut ¸ii ¸ si pe care nu le-a identificat
automatˆ ın mod corespunz˘ ator datorit˘ a complexit˘ at ¸ii constrˆ angerilor. Un ex-
emplu sugestiv este oferit de problema oraruluiˆ ın care operatorul uman poate
s˘ a observe anumite decizii care nu sunt viabile ¸ si s˘ a le anuleze, direct ¸ionˆ and
solverul c˘ atre alt spat ¸iu de c˘ autare.
Anularea unei decizii x=aa solverului presupune urm˘ atoarele etape:
1.Identificarea st˘ arii simple anteriore deciziei
2.Anularea tuturor deciziilor care au urmat lui x=a, inclusiv
3.Reefectuarea deciziilor anulate, cu except ¸ia lui x=a
Solverul OmniCS ofer˘ a metoda revoke(Var x) care efectueaz˘ a anularea
instant ¸ierii variabilei x.
8.6 Inactivarea unor variabile
Inactivarea unor variabile este echivalent˘ a cu eliminarea acestora din proce-
sul de rezolvare. Acest lucru se realizeaz˘ a prin simpla eliminare a lor din
mult ¸imea candidat ¸ilor ¸ si instant ¸ierea lor cu valoarea null .

160CAPITOLUL 8. REZOLVAREA INTERACTIV ˘A A PROBLEMELOR
Algorithm 22 Anularea unei decizii ( revoke )
Intrare: Si= (α, δ, π, ω ) starea curent˘ a a solverului ¸ si x=ao instant ¸iere
care trebuie anulat˘ a
Rezultat: S/prime
i+1starea obt ¸inut˘ a dup˘ a anularea deciziei x=a.
ifx∈πthen
{xface parte din solut ¸ia init ¸ial˘ a }
α=α∪{x}
ω=ω−{x}
δ(x) =Dx{Refacem domeniul init ¸ial al lui x}
return
end if
{xe o variabil˘ a instant ¸iat˘ a de solver }
A=∅{Aeste mult ¸imea instant ¸ierilor de dup˘ a x=a}
y=peek(π)
k=i
while x/negationslash=ydo
b=ω(y)
A=A∪{(y=b)}
π=π−{y}
y=peek(π)
k=k−1
end while
{Refacem starea solverului }
S=Sk
{Anul˘ am decizia}
α=α∪{x}
ω=ω−{x}
{Efectu˘ am din nou celelate instant ¸ieri }
for(y=b)∈Ado
S=instantiate (S, y, b )
end for

8.7. AD ˘AUGAREA DE NOI VARIABILE 161
Algorithm 23 Inactivarea unor variabile
Intrare: S∗
k={S0, …, S k}starea extins˘ a a unui solver ¸ si xo nou˘ a variabil˘ a.
Rezultat: S∗/prime
kstarea obt ¸inut˘ a dup˘ a inactivarea lui x.
fori=0, kdo
αi=αi−{x}
ωi(x) =null
end for
Solverul OmniCS detecteaz˘ a dac˘ a metoda removeVariable a clasei Problem
este apelat˘ a ˆ ın timpul execut ¸iei ¸ si inactiveaz˘ a respectiva variabil˘ a prin inter-
mediul apelului setActive(false) , dup˘ a care actualizeaz˘ a st˘ arile sale.
8.7 Ad˘ augarea de noi variabile
Ad˘ augarea sau reactivarea unor variabile presupune actualizarea mult ¸imii
candidat ¸ilor pentru fiecare stare a solverului.
Algorithm 24 Ad˘ augarea de noi variabile
Intrare: S∗
k={S0, …, S k}starea extins˘ a a unui solver ¸ si xo nou˘ a variabil˘ a
sau o variabil˘ a inactiv˘ a.
Rezultat: S∗/prime
kstarea obt ¸inut˘ a dup˘ a ad˘ augarea/reactivarea lui x.
fori=0, kdo
αi=αi∪{x}
ωi=ωi−{x}
end for
Solverul OmniCS detecteaz˘ a dac˘ a metoda addVariable a clasei Problem
este apelat˘ a ˆ ın timpul execut ¸iei ¸ si realizeaz˘ a actualizarea st˘ arilor sale. In
cazul ˆ ın care variabila exista dar era inactiv˘ a, ea va fi reactivat˘ a prin apelul
setActive(false) .
8.8 Modificarea constrˆ angerilor
Modificarea constrˆ angerilor init ¸iale ale problemei presupune urm˘ atoarele etape:
1.Anularea tuturor deciziilor

162CAPITOLUL 8. REZOLVAREA INTERACTIV ˘A A PROBLEMELOR
3.Reefectuarea tuturor deciziilor, atˆ at timp cˆ at acest lucru este posibil.
Algorithm 25 Modificarea constrˆ angerilor
Intrare: S∗
k={S0, …, S k}starea extins˘ a a unui solver asociat ret ¸elei R=
(X,D,C) ¸ siC/primeun set de constrˆ angeri.
Rezultat: S/primestarea aferent˘ a ret ¸elei R= (X,D,C/prime) cu proprietatea ω(x) =
ω/prime(x),∀x∈var(ω/prime)
S/prime
0=S0
i= 1
for(y, b)∈ωkdo
ifb∈δ/prime
i(y)then
S/prime
i=instantiate (Si, y, b)
end if
end for
8.9 Concluzii
Introducerea mecanismelor care s˘ a asigure interactivitatea s-a dovedit extrem
de important˘ a ˆ ın procesul de rezolvare a problemei orarului, aceasta fiind un
exemplu elocvent de situat ¸ie ˆ ın care definit ¸ia problemei este dinamic˘ a iar
rezolvarea ei se poate face mult mai eficient dac˘ a este permis˘ a ¸ si intervent ¸ia
utilizatorului.

Capitolul 9
Probleme de colorare
9.1 Introducere
Colorarea grafurilor [9], [25], [14], [35], are o important ¸˘ a deosebit˘ a ˆ ın dome-
niul optimiz˘ arii combinatoriale deoarece numeroase probleme pot fi mod-
elate sub aceast˘ a form˘ a. Problemele de colorare sunt ˆ ın cazurile generale
NP-dificile, ceea ce a determinat dezvoltarea de numeroase tehnici de re-
zolvare a acestora, specializate pe diferite tipuri de color˘ ari sau grafuri. In
aceast capitol este prezentat˘ a o solut ¸ie general˘ a de abordare a algoritmilor
de colorare sub forma unor probleme de satisfacere a constrˆ angerilor, care
s˘ a poat˘ a fi folosit˘ a pentru cazul general dar ¸ si pentru diverse tipuri special-
izate de color˘ ari, atˆ at ˆ ın varianta explor˘ arii sistematice a grafului cˆ at ¸ si sub
form˘ a de euristici. Sunt descrise situat ¸ii concrete de implementare pentru
list-coloring ,star-coloring ,acyclic-coloring ¸ siharmonious-coloring precum ¸ si
modalitatea de integrare a unor algoritmi clasici ˆ ın acest cadru de lucru.
Prin colorarea unui graf seˆ ınt ¸elegeˆ ın general procesul de asignarea a unor
”culori”, reprezentate uzual sub forma unor numereˆ ıntregi, elementelor de un
anumit tip din respectivul graf cum ar fi vˆ arfuri, muchii, fet ¸e sau combinat ¸ii
ale acestora, astfel ˆ ıncˆ at s˘ a fie satisf˘ acute o serie de condit ¸ii. Problemele de
colorare au numeroase aplicat ¸ii atˆ at teoretice cˆ at ¸ si practice, fiind de multe
ori rezultatul formaliz˘ arii unor probleme concrete de optimizareˆ ıns˘ a, datorit˘ a
dificult˘ at ¸ii de rezolvare a acestora, g˘ asirea de algoritmi eficient ¸i ¸ si de tehnici
generale de lucru formeaz˘ a ˆ ın continuare un domeniu activ de cercetare.
Ne propunem ˆ ın continuare s˘ a descriem un cadru general de rezolvare a
problemelor de colorare folosind paradigma de programare cu constrˆ angeri.
163

164 CAPITOLUL 9. PROBLEME DE COLORARE
In cadrul acestei abord˘ ari este necesar s˘ a analiz˘ am urm˘ atoarele aspecte im-
portante:
•G˘ asirea unei solut ¸ii generale de modelare a problemele de colorare sub
forma unor instant ¸e CSP.
•Implementarea unei strategii cˆ at mai flexibile de c˘ autare a solut ¸iilor
care s˘ a poat˘ a fi parametrizat˘ a ¸ si adaptat˘ a fiec˘ arui tip de colorare ˆ ın
parte.
9.2 Colorarea grafurilor
Problema color˘ arii poate fi definit˘ a pe diferite tipuri de elemente constitu-
ive ale grafurilor dar, uzual, ne referim la colorarea vˆ arfurilor, acesta fiind
cazul cel mai important ¸ si din perspectiva faptului c˘ a majoritatea celorlalte
tipuri de color˘ ari pot fi transformate ˆ ıntr-o form˘ a echivalent˘ a de colorare a
vˆ arfurilor. Astfel, colorarea muchiilor unui graf Gpoate fi rezolvat˘ a prin col-
orarea nodurilor line-grafului L(G) iar colorare fet ¸elor unui graf planar este
echivalent˘ a cu colorarea vˆ arfurilor grafului dual.
De¸ si ˆ ın continuare vom analiza doar probleme de colorare a vˆ arfurilor,
acest lucru nu trebuie privit ca o restrict ¸ie pe care o vom impune sistemului
pe care dorim s˘ a-l prezent˘ am. Dimpotriv˘ a, unul din scopurile acestei lucr˘ ari
este de a g˘ asi modalit˘ at ¸i de a specifica ¸ si rezolva probleme de diferite tipuri
care s˘ a p˘ astreze cˆ at mai mult specificat ¸iile init ¸iale astfel ˆ ıncˆ at, pe parcur-
sul procesului de c˘ autare a solut ¸iilor s˘ a poat˘ a fi puse ˆ ın evident ¸˘ a diferite
propriet˘ at ¸i ale grafului analizat cu impact asupra color˘ arii finale.
FieG= (V, E) un graf. O p-colorare proprie [9] a lui V, unde p∈N∗
poate fi definit˘ a ca o funct ¸ie c:V→{1,2, …, p}cu proprietatea c˘ a c(vi)/negationslash=
c(vj)∀vivj∈E. Cu alte cuvinte, funct ¸ia cdefine¸ ste o partit ¸ie a vˆ arfurilor
grafului ˆ ın pmult ¸imi stabile. Num˘ arul minim de culori necesare unei color˘ ari
proprii a unui graf Gva fi numit num˘ arul cromatic al grafului ¸ si va fi notat
χ(G).
χ(G) =min{p∈N∗|G admite o p-colorare}
Evident, se pune problema determin˘ arii lui χ(G) pentru un graf oarecare G,
lucru echivalent cu a r˘ aspunde la urm˘ atoarea problem˘ a de decizie (COL):

9.2. COLORAREA GRAFURILOR 165
COL: ”Fie G= (V, E) ¸ sip∈N∗. Exist˘ a o p-colorare a lui G?”
Este binecunoscut faptul c˘ a problema COL este NP-complet˘ a ¸ si, mai mult,
ea r˘ amˆ ane NP-complet˘ a ¸ si ˆ ın varianta simplificat˘ a ˆ ın care p= 3, ceea ce pune
ˆ ın evident ¸˘ a dificultatea rezolv˘ arii problemelor de colorare a vˆ arfurilor unui
graf.
Datorit˘ a acestei dificult˘ at ¸i au fost elaborate numeroare modalit˘ at ¸i de
abordare a problemelor de colorare, majoritatea sub form˘ a de euristici al
c˘ aror scop este nu s˘ a g˘ aseasc˘ a solut ¸ia exact˘ a ci s˘ a se apropie cˆ at mai mult de
ea, exemple de astfel de tehnici incluzˆ and tehnici de programare evolutiv˘ a, al-
goritmi genetici, algoritmi stochastici, etc. Cu toate acestea, ˆ ın unele situat ¸ii
este necesar˘ a g˘ asirea exact˘ a a solut ¸iei a¸ sa ˆ ıncˆ at trebuie analizate modalit˘ at ¸i
eficiente de rezolvare ¸ si ˆ ın aceste cazuri; amintim aici programarea semi-
definit˘ a ¸ si algoritmii sistematici de c˘ autare ˆ ımbun˘ at˘ at ¸iti cu diferite tehnici
de reducere a spat ¸iului solut ¸iilor. Eventual, metodele sistematice de c˘ autare
pot fi combinate cu diferite euristici pentru a obt ¸ine rezultate optime ˆ ın pro-
cesul de colorare.
Un alt aspect care trebuie luat ˆ ın calcul este acela c˘ a mult ¸i dintre algorit-
mii care au fost propu¸ si pˆ an˘ a ˆ ın prezent sunt dedicat ¸i fie cazului general al
problemei color˘ arii vˆ arfurilor unui graf, fie unor cazuri specializate, adaptarea
acestora la alte situat ¸ii fiind dificil sau chiar imposibil de realizat. Multe prob-
leme de optimizare care ˆ ın final sunt modelate sub forma unei probleme de
colorare impun ˆ ıns˘ a diferite restrict ¸ii pe care trebuie s˘ a le satisfac˘ a colorarea
final˘ a, ceea ce ˆ ınseamn˘ a c˘ a mult ¸i dintre algoritmii implementat ¸i deja nu pot
fi folosit ¸i. Astfel de variat ¸iuni includ:
•List coloring – fiecare vˆ arf are asociat˘ a o list˘ a de culori disponibile,
numai acestea putˆ and fi folosite pentru a-l colora.
•Harmonious ,Complete ,Exact coloring – fiecare pereche de culori poate
ap˘ area cel mult / cel put ¸in / exact o dat˘ a pentru vˆ arfurile unei muchii.
•Acyclic coloring – ˆ ın colorarea final˘ a orice subgraf 2-cromatic trebuie
s˘ a fie aciclic (nici un circuit nu trebuie s˘ a fie bicolor).
•Star coloring – ˆ ın colorarea final˘ a nici un drum de lungime 3 nu poate
fi bicolor.
•On-line coloring – instant ¸a problemei nu este cunoscut˘ a complet de la
ˆ ınceput ci ea devine disponibil˘ a treptat pe parcursul execut ¸iei algorit-
mului.

166 CAPITOLUL 9. PROBLEME DE COLORARE
•…Lista poate continua oricˆ at, restrict ¸iile putˆ and fi de orice tip ca rezul-
tat al model˘ arii problemelor concrete de optimizare.
In concluzie, ˆ ın analiza pe care o vom face trebuie s˘ a g˘ asim o solut ¸ie care s˘ a
poat˘ a fi adaptat˘ a cˆ at mai u¸ sor tuturor situat ¸iilor care pot ap˘ area.
Problemele de colorare a vˆ arfurilor unui graf se ˆ ıncadreaz˘ a ˆ ın mod firesc
ˆ ın domeniul CSP, modelarea unei probleme de colorare prin intermediul unei
ret ¸ele de constrˆ angeri fiind, ˆ ın general, destul de natural˘ a. S˘ a vedem ˆ ın
continuare cˆ ateva cazuri. Fie G= (V, E) un graf oarecare avˆ and vˆ arfurile
V={v1, …, v n}.
a.p-Colorarea unui graf
X={v1, …v n}
Di={1, …, p},∀i∈{1, …, n}
Cvivj={c(vi)/negationslash=c(vj)},∀(vi, vj)∈E(G)
b.List-coloring
X={v1, …v n}
Di={Lista de culori asociat˘ a vˆ arfului vi},∀i∈{1, …, n}
Cvivj={c(vi)/negationslash=c(vj)},∀(vi, vj)∈E(G)
c.Star-coloring (nici un P3nu trebuie s˘ a fie bicolor)
X={v1, …v n}
Di={1, …, p},∀i∈{1, …, n}
Cvivj={c(vi)/negationslash=c(vj)},∀i/negationslash=j
Cvivjvk={|{c(vi), c(vj), c(vk)|= 3},∀{vi, vj, vk}=P3
d.Acyclic-coloring (Nici un circuit nu trebuie s˘ a fie bicolor)
C=? (exprimarea constrˆ angerii nu mai e evident˘ a)
Dup˘ a cum se observ˘ a ˆ ın situat ¸iile de mai sus, specificarea ret ¸elei de con-
strˆ angeri poate fi extrem de u¸ sor de realizat ˆ ın cazul unor probleme, con-
strˆ angerile fiind obt ¸inute direct din structura grafului analizat (situat ¸iile a
¸ si b). In cazul c), este necesar˘ a o procesare init ¸ial˘ a a grafului pentru deter-
minarea vˆ arfurilor care formeaz˘ a drumuri induse cu 3 vˆ arfuri ( P3) ¸ si, pe baza

9.3. REZOLVAREA UNOR PROBLEME DE COLORARE 167
acestora, vor fi ad˘ augate corespunz˘ ator noi constrˆ angeri. In ultimul caz ˆ ıns˘ a
descrierea constrˆ angerilor prin expresii simple ˆ ıntre vˆ arfuri este mai greu de
realizat, ceea ce ne determin˘ a la reconsiderarea modalit˘ at ¸ii de exprimare a
constrˆ angerilor fat ¸˘ a de cea clasic˘ a.
9.3 Rezolvarea unor probleme de colorare
9.3.1 Colorarea vˆ arfurilor unui graf
Colorarea unui graf presupune definirea condit ¸iei prin care dou˘ a noduri nu
pot avea aceea¸ si culoare. Aceasta va fi folosit˘ a ¸ siˆ ın celelalte tipuri de colorare,
decuplarea modului de specificare a constrˆ angerilor de problema propriu-zis˘ a
permit ¸ˆ and a¸ sadar reutilizarea codului. Specificarea acestei condit ¸ii poate fi
f˘ acut˘ a utilizˆ and constrˆ angerea predefinit˘ a NotEqual : pentru fiecare pereche
de vˆ arfuri adiacente ale grafului impunem ca valorile variabilelor asociate s˘ a
nu fie egale:
for((x,y) in E(G)) {
problem.addConstraint(new NotEqual(x,y));
}
}
9.3.2 Star-coloring
O abordare similar˘ a va fi folosit˘ a ¸ si ˆ ın aceast tip de colorare, cu deosebirea c˘ a
trebuie s˘ a facem o procesare init ¸ial˘ a prin intermediul c˘ arei s˘ a identific˘ am dru-
murile de lungime 3 ale grafului ¸ si s˘ a cre˘ am constrˆ angerile corespunz˘ atoare:
// Nici un P3 nu trebuie sa fie bicolor
class StarColoring extends Constraint {
Var x, y, z;
StarColoring(Var x, Var y, Var z) {
this.x = x;
this.y = y;
this.z = z;
}
public int eval(Tuple tuple) {
if (!tuple.contains(x, y, z)) return ALLOWED;

168 CAPITOLUL 9. PROBLEME DE COLORARE
int xColor = (Integer)tuple.get(x);
int yColor = (Integer)tuple.get(y);
int zColor = (Integer)tuple.get(z);
if (xColor != yColor &&
xColor != zColor &&
yColor != zColor) {
return ALLOWED;
}
return FORBIDDEN;
}
}

for((x,y) in E(G)) {
problem.addConstraint(new NotEqual(x,y));
}
for((x,y,z) P3 indus in G) {
problem.addConstraint(new StarColoring(x,y,z));
}
9.3.3 Acyclic-coloring
In aceast˘ a situat ¸ie colorarea final˘ a trebuie s˘ a satisfac˘ a condit ¸ia ca nici un
circuit s˘ a nu fie bicolor. Exprimarea acestei condit ¸ii sub forma unor expresii
ˆ ıntre variabile este dificil de realizat deoarece ar presupune aflareaˆ ın prealabil
a tuturor circuitelor ¸ si impunerea tuturor constrˆ angerilor folosind variabilele
corespunz˘ atoare acestora. Alegerea unei strategii corecte de ˆ ınaintare ne
poate reduce ˆ ın acest caz semnificativ complexitatea procesului de descriere a
condit ¸iei. Astfel, ˆ ınaintˆ and conform strategiei ConnectedComponents putem
identifica circuitele grafului pe m˘ asur˘ a ce acestea se formeaz˘ a ˆ ıntre nodurile
instant ¸iate deja ¸ si doar ˆ ın momentul form˘ arii s˘ a test˘ am condit ¸ia impus˘ a.
// Nici un circuit nu trebuie sa fie bicolor
class AcyclicColoring extends UnaryConstraint {
Var x;
AcyclicColoring(Var x) {
this.x = x;
}
public int eval(Tuple tuple) {

9.3. REZOLVAREA UNOR PROBLEME DE COLORARE 169
/*
Daca x este adiacent cu un alt nod din tupla,
conform strategiei de inaintare s-a format un circuit.
Determinam circuitul format si verificam daca este bicolor.
*/

}
}

for((x,y) in E(G)) {
problem.addConstraint(new NotEqual(x,y));
}
for(x in V(G)) {
problem.addConstraint(new AcyclicColoring(x));
}

solver.setForwardStrategy(new ConnectedComponents());
9.3.4 Harmonious-coloring
Colorarea ”armonioas˘ a” impune ca o pereche de culori s˘ a nu poat˘ a ap˘ area
decˆ at la cel mult extremit˘ at ¸ile unei muchii. In acest caz, tehnica de rezolvare
este aceea de a ment ¸ine o structur˘ a global˘ a, extern˘ a algoritmului propriu-zis
dar accesibil˘ a strategiilor de ˆ ınaintare ¸ si ˆ ıntoarcere, ˆ ın care s˘ a fie ret ¸inute
perechile de culori folosite deja ˆ ın colorare.
Map<Integer,List<Integer>> globalPairs;

class HarmoniousColoring extende BinaryConstraint {
Var x, y;
HarmoniousColoring(Var x, Var y) {
this.x=x;
this.y=y;
}
public int eval(Tuple tuple) {
if (!tuple.contains(x, y)) return ALLOWED;
int xColor = (Integer)tuple.get(x);
int yColor = (Integer)tuple.get(y);

170 CAPITOLUL 9. PROBLEME DE COLORARE
boolean ok = globalPairs.get(xColor).contains(yColor);
return (ok ? ALLOWED : FORBIDDEN);
}
}

// La inaintare adaugam noi perechi de culori in globalPairs
solver.setForwardStrategy(
new HarmoniousForward(globalPairs));
// La intoarcere eliminam perechi de culori din globalPairs
solver.setBackwardStrategy(
new HarmoniousBackward(globalPairs));
9.4 Euristici de colorare
Folosind acest sistem de lucru, o serie de euristici clasice de colorare cum
ar fi colorarea ”Greedy” a unui graf pot fi implementate doar prin simpla
parametrizare a algoritmului general. Astfel, pentru a implementa o colorare
de tip greedy, este suficient s˘ a definim o strategie deˆ ıntoarcere care s˘ a nu fac˘ a
de fapt o ˆ ıntoarcere propriu-zis˘ a ci s˘ a rescrie dinamic domeniile variabilelor
r˘ amase de instant ¸iat adˆ augˆ andu-le o nou˘ a culoare disponibil˘ a ¸ si continuˆ and
apoi algoritmul general.
public class Greedy extends AbstractStrategy
implements BackwardStrategy {

public Var back() {
// Nodul in care ne-am blocat
Var current = solver.current();
// Crestem nr de culori
nc ++;
// Rescriem dinamic domeniile
solver.solution().put(current, nc);
for(Var var : candidates) {
var.getDomain().add(nc);
}

9.5. ANALIZOARE DE PROBLEM ˘A 171
// Nu facem nici o intoarcere
return current;
}
}
9.5 Analizoare de problem˘ a
Pentru a eficientiza procesul de c˘ autare a unei solut ¸ii, un solver CSP tre-
buie s˘ a permit˘ a integrarea unor algoritmi dedicat ¸i unor cazuri particulare
ale problemei ˆ ın cadrul algoritmului general de rezolvare astfel ˆ ıncˆ at atunci
cˆ and subproblema r˘ amas˘ a de rezolvat face parte dintr-o astfel de clas˘ a s˘ a
poat˘ a fi utilizat ¸i respectivii algoritmi. De exemplu, ˆ ın cazul color˘ arii grafu-
rilor, putem utiliza algoritmi eficient ¸i de recunoa¸ stere a unor clase specifice de
grafuri [12], dupa care s˘ a folosim propriet˘ at ¸ile acestora pentru a crea strategii
ˆ ımbun˘ at˘ at ¸ite de explorare a spat ¸iului solut ¸ilor.
Unanalizor de problem˘ a este o component˘ a a solverului CSP dedicat˘ a
unei anumite probleme responsabil˘ a cu:
1.Identificarea unor cazuri speciale ale problemei care se ˆ ıncadreaz˘ a ˆ ın
clase pentru care exist˘ a algoritmi eficient ¸i de rezolvare.
2.Determinarea inconsistent ¸ei problemei folosind tehnici specifice respec-
tivei clasei speciale.
3.Punerea la dispozit ¸ia solverului CSP a unui algoritm dedicat de re-
zolvare care s˘ a poat˘ a fi utilizat ˆ ın mod automat pentru extinderea
solut ¸iei curente.
Solverul OmniCS ofer˘ a o modalitate extrem de simpl˘ a de definire a unui
analizor de problem˘ a prin intermediul interfet ¸ei Analyzer care descrie la
modul abstract comportamentul unui analizor, respectiv a clasei DefaultAnalyzer
care implementeaz˘ a comportamentul standard ¸ si poate fi folosit˘ a prin extin-
dere pentru diverse cazuri particulare.
Dup˘ a cum am v˘ azut la ˆ ınceputul capitolului, modelarea unei probleme de
colorare a vˆ arfurilor unui graf ˆ ın cazul general este realizat˘ a foarte simplu,
printr-o secvent ¸˘ a de tipul celei de mai jos:
for((x,y) in E(G)) {
problem.addConstraint(new NotEqual(x,y));

172 CAPITOLUL 9. PROBLEME DE COLORARE
}
}
F˘ ar˘ a a oferi solverului posibilitatea de a identifica situat ¸ii particulare
comportamentul general poate fi extrem de ineficient ¸ si f˘ ar˘ a modalit˘ at ¸i simple
de ˆ ımbun˘ at˘ at ¸ire. S˘ a consider˘ am cazul ˆ ın care graful de intrare este complet,
avˆ and 10 vˆ arfuri ¸ si cerem solverului s˘ a realizeze o colorare cu 9 culori:
Graph g = GraphFactory.createComplete(10);
OmnicsGraphColoring col = new OmnicsGraphColoring(g, 9);
De¸ si rezolvarea problemei este evident˘ a, solverul va efectua nu mai put ¸in
de 260 .650 backtrack-uri pentru a ajunge la aceast˘ a concluzie, lucru care
nu este deloc mult ¸umitor. Evident, ˆ ın cazul ˆ ın care am fi identificat cazul
particular ¸ si ad˘ augam o constrˆ angere de tipul AllDiff inconsistent ¸a ar fi fost
determinat˘ a imediat. De asemenea, prezent ¸a unui mecanism de identificare
¸ si eliminare a simetriilor (Symetry Breaking During Search) [24], [15] ar fi
redus num˘ arul de e¸ securi ale algoritmului.
O prim˘ a solut ¸ie care se contureaz˘ a din exemplul de mai sus ar fi crearea
unui analizor responsabil cu identificarea grafurilor complete ˆ ın procesul de
rezolvare. Acesta va realiza urm˘ atoarele act ¸iuni:
1.Determin˘ a dac˘ a subgraful G1indus de vˆ arfurile deja colorate este com-
plet ¸ si, ˆ ın caz afirmativ, ad˘ aug˘ a o constrˆ angere AllDiff pentru ele.
2.Determin˘ a dac˘ a subgraful G2indus de vˆ arfurile r˘ amase de colorat este
complet ¸ si, ˆ ın caz afirmativ, ad˘ aug˘ a o constrˆ angere AllDiff pentru ele.
3.In cazul ˆ ın care G2este complet, determin˘ a num˘ arul de culori kfolosite
pentru colorarea vˆ arfurilor adiacente celor din G2¸ si verfic˘ a dac˘ a nu
cumva k+|V(G2|dep˘ a¸ se¸ ste num˘ arul de culori pe care le avem la
dispozit ¸ie; ˆ ın caz afirmativ, semnaleaz˘ a inconsistent ¸a subproblemei.
4.In cazul ˆ ın care G2este complet ¸ si problema nu este inconsistent˘ a, ofer˘ a
un algoritm liniar pentru problema de list-colorare a grafului complet
G2.
Implementarea doar a primelor trei puncte din cele de mai sus, corelat˘ a cu
o strategie de ˆ ınaintare ˆ ın care sunt alese mai ˆ ıntˆ ai vˆ arfurile cu grad mai mic,
a adus la ˆ ımbun˘ at˘ at ¸iri spectaculoase ˆ ın colorarea grafurilor dense, reducˆ and
num˘ arul de backtrack-uri cu factori de ordinul 103sau chiar 104. Clasa care
descrie analizorul pentru grafuri complete este prezentat˘ a part ¸ial mai jos:

9.5. ANALIZOARE DE PROBLEM ˘A 173
public class CompleteGraphAnalyzer extends DefaultAnalyzer {
SystematicSolver solver;
Graph graph;
int nc; //numarul de culori cu care efectuam colorarea
public CompleteGraphAnalyzer(Graph graph, int nc) {
this.graph = graph;
this.nc = nc;
}
public void init() {
solver = (SystematicSolver)problem.getSolver();
}
public boolean isInconsistent() {
if (super.isInconsistent()) {
return true;
}
Graph g1 = currentSubgraph();
Graph g2 = remainingSubgraph();
if(g1.isComplete() && g1.N() > 2) {
insertAllDiff(solver.solution().variables());
}
if (g2.isComplete() && g1.N() > 2) {
NodeSet adj = g2.nodes().neigbors();
// Numar culorile folosite in adj
Set<Integer> colors = new HashSet<Integer>();
for(Node u : adj) {
Var var = (Var) u.getData();
colors.add((Integer)var.getValue());
}
int used = colors.size();
if (g2.N() + used > nc) {
// problema nu este consistenta
return true;
}
AllDiff alldiff = insertAllDiff(new VarSet(solver.candidates()));
if (alldiff.eval(solver.solution()) == FORBIDDEN) {
return true;

174 CAPITOLUL 9. PROBLEME DE COLORARE
}
}
return false;
}

}
Ad˘ augarea analizorului de problem˘ a se face extrem de simplu:
SystematicSolver solver = pb.createSolver();
solver.addAnalyzer(
new CompleteGraphAnalyzer(graph, nbOfColors));
Din p˘ acate, ˆ ın cele mai multe situat ¸ii problema color˘ arii subgrafului indus
de variabilele neinstant ¸iate este o problem˘ a de list-colorare care, ˆ ın cele mai
multe cazuri, sunt NP-complete. Pentru a da doar dou˘ a exemple:
•grafuri bipartite (Hujter ¸ si Tuza (1993))
•cografuri (Jansen ¸ si Scheffler (1997))
Analiza modalitat ¸ilor de integrare a unor algoritmi eficient ¸i ˆ ın procesul
general de colorare r˘ amˆ ane ˆ ın continuare una din direct ¸iile principale de
cercetare pe aceast˘ a tem˘ a.

Capitolul 10
Concluzii
Lucrarea de fat ¸˘ a ˆ ı¸ si propune ca principal˘ a direct ¸ie de cercetare crearea unui
cadru de lucru care s˘ a permit˘ a modelarea cu ajutorul constrˆ angerilor a unor
probleme din domenii diverse ¸ si rezolvarea automat˘ a, eventual interactiv˘ a a
acestora. Pentru eficientizarea procesului de determinare a solut ¸iei ˆ ın cazul
problemelor NP-dificile s-a avut ˆ ın vedere posibilitatea de integrarea a unor
algoritmi dedicat ¸i unor cazuri particulare ale problemeiˆ ın cadrul algoritmului
general.
In prima parte au fost analizate atˆ at din punct de vedere teoretic cˆ at ¸ si
din perspectiva implement˘ arii aspecte generale legate de tehnici de rezolvare
a instant ¸elor CSP, cum ar fi algoritmii de arc-consistent ¸˘ a AC-3, AC-4 sau
mecanisme de ˆ ıntoarcere controlat˘ a (backjumping).
Contribut ¸ia proprie a tezei const˘ a ˆ ın crearea solverului CSP
OmniCS1(Omni Constraint Solver), prezentarea acestuia fiind partea cen-
tral˘ a a lucr˘ arii. Elementele de noutate constau ˆ ın:
•Crearea unei arhitecturi originale care s˘ a permit˘ a modelarea ¸ si re-
zolvarea atˆ at a problemelor clasice de satisfacere a constrˆ angerilor cˆ at
¸ si a celor slabe (Soft CSP).
•Realizarea implement˘ arii pe baza unor ¸ sabloane de proiectare software
consacrate, precum ¸ si utilizarea celor mai noi tehnici de programare
orientat˘ a-obiect oferite de platforma de lucru Java. Acestea fac din
OmniCS un solver extrem de simplu de folosit ¸ si de ˆ ınt ¸eles, fiind u¸ sor
de integrat ˆ ın activit˘ at ¸i didactice sau de cercetare.
1http://omnics.sourceforge.net
175

176 CAPITOLUL 10. CONCLUZII
•Nivelul algoritmic al solver-ului propriu-zis este foarte flexibil, putˆ and
fi parametrizat atˆ at din punctul de vedere al strategiilor de explo-
rare cˆ at ¸ si din punctul de vedere al algoritmilor de reducere a prob-
lemei. Abordarea original˘ a const˘ a ˆ ın faptul c˘ a pot exista algoritmi de
filtrare-propagare globali dar ¸ si locali, asociat ¸i fiec˘ arei constrˆ angeri ˆ ın
parte. De¸ si aceast˘ a parametrizare poate induce o penalizare la nivelul
performant ¸ei, testele comparative cu solut ¸ii similare existente pe piat ¸˘ a
au ar˘ atat ca OmniCS este comparabil cu acestea, chiar mai rapid ˆ ın
unele situat ¸ii.
•In abordarea problemelor supra-constrˆ anse a fost conceput˘ a o solut ¸ie
proprie de generare a unor structuri de date din care s˘ a poat˘ a fi extrase
informat ¸ii necesare explic˘ arii insatisfiabilit˘ at ¸ii.
•Introducerea mecanismelor de interactivitate permit integrarea solveru-
lui ˆ ın cadrul unor interfet ¸e cu utilizatorul cu ajutorul c˘ arora s˘ a poat˘ a fi
controlat procesul de rezolvare sau chiar modificat enunt ¸ul problemei
f˘ ar˘ a repornirea solverului. In acest context, sunt studiate propriet˘ at ¸ile
de corectitudine ¸ si completitudine ale unui solver CSP.
•A fost introdus˘ a ¸ si not ¸iunea de analizor de problem˘ a capabil s˘ a iden-
tifice ˆ ın procesul de rezolvare a unei instant ¸e NP-dificile subprobleme
rezolvabile polinomial, s˘ a ofere solut ¸ii dedicate acestora ¸ si s˘ a integreze
rezultatul obt ¸inut ˆ ın algoritmul general.
In partea a doua a lucr˘ arii sunt prezentate trei studii de caz ˆ ın utilizarea
solverului OmniCS, care s˘ a pun˘ a ˆ ın evident ¸˘ a caracteristicile ¸ si performant ¸ele
acestuia:
•Problema satisfiabilit˘ at ¸ii (3-SAT) , ˆ ın care este descris˘ a o nou˘ a
tehnic˘ a de abordare a acesteia sub forma unei probleme de clic˘ a de car-
dinal maxim ˆ ıntr-un graf corespunz˘ ator. De¸ si modelul teoretic rezultat
este complex, flexibilitatea oferit˘ a de OmniCS a permis rezolvarea cu
succes a problemei, t ¸inˆ and cont de toate propriet˘ at ¸ile rezultate ˆ ın urma
analizei grafului.
•Problema orarului , care pune ˆ ın evident ¸˘ a aspectele dinamice ¸ si in-
teractive ale solverului precum ¸ si moduri de definire a constrˆ angerilor
globale care au algoritmi proprii de filtrare. Introducerea unor strate-
gii eficiente de explorare a spat ¸iului solut ¸iilor a permis rezolvarea unor

177
probleme cu peste 300 de evenimente ¸ si 20.000 de constrˆ angeri ˆ ıntr-un
timp de ordinul minutelor.
•Probleme de colorare a grafurilor, ˆ ın care sunt prezentate ˆ ın mod
unitar diverse tipuri de colorare a grafurilor, modelarea lor folosind
OmniCS precum ¸ si asocierea unor analizori de problem˘ a care s˘ a sim-
plifice procesul de rezolvare. Testele f˘ acute pe colorarea grafurilor dense
demonstreaz˘ a eficient ¸a acestei solut ¸ii.
Ca direct ¸ii viitoare de cercetare ne propunem:
•Definirea unei modalit˘ at ¸i declarative de specificare a constrˆ angerilor,
prin intermediul unui limbaj dedicat;
•Crearea unei libr˘ arii extinse de constrˆ angeri, care s˘ a includ˘ a algoritmi
dedicat ¸i de filtrare specifici constrˆ angerilor globale;
•Crearea unei libr˘ arii de analizoare dedicate pentru diverse clase de
restrict ¸ii polinomiale ale unor probleme NP-complete;
•Crearea unui mecanism de ˆ ınv˘ at ¸are cu ajutorul c˘ aruia s˘ a poat˘ a fi creat˘ a
o baz˘ a de date cu explicat ¸ii pentru diferite probleme, care s˘ a poat˘ a fi
consultat˘ a de solver ˆ ın procesul de rezolvare.
Fiecare din aceste aspecte presupune provoc˘ ari complexe atˆ at din punct
de vedere teoretic cˆ at ¸ si practic, ˆ ıns˘ a important ¸a domeniului ¸ si interesul gen-
eral de care se bucur˘ a sunt motivat ¸ii suficiente pentru a le aborda, continuˆ and
¸ si rafinˆ and rezultatele obt ¸inute pˆ an˘ a acum.

178 CAPITOLUL 10. CONCLUZII

Bibliografie
[1]Krzysztof Apt. Principles of constraint programming . Cambridge Uni-
versity Press, 2003.
[2]Roman Bartak. On-line guide to constraint programming.
http://kti.ms.mff.cuni.cz/ bartak/constraints/index.html.
[3]Roman Bartak. Constraint propagation and backtracking-based search.
First International Summer School on Constraint Programming Italy,
September 11-15 2005.
[4]Claude Berge. Graphes et Hypergraphes . Dunod, Paris, 1970.
[5]Stefano Bistarelli. Semirings for Soft Constraint Solving and Program-
ming . Springer, 2004.
[6]Yves Caseau and Francois Laburthe. Palm. http://www.e-
constraints.net/palm.
[7]Tim B. Cooper and Jeffrey H. Kingston. The complexity of timetable
construction problems. In Proceedings of the First International Con-
ference on the Practice and Theory of Automated Timetabling (ICPTAT
’95), pages 511–522, 1995.
[8]Auton L.D. Crawford J.M. Experimental results on the crossover point
in random 3sat. Artificial Intelligence, No. 81, 1996.
[9]Cornelius Croitoru. Tehnici de baza in optimizarea combinatorie . Edi-
tura Universitatii ”Al. I. Cuza” Iasi, 1992.
[10]Cornelius Croitoru and Cristian Fr˘ asinaru. Exploring unknown undi-
rected graphs. Scientific Annals of Al.I.Cuza Iasi University , 8:67–76,
1998.
179

180 BIBLIOGRAFIE
[11]Cornelius Croitoru and Cristian Fr˘ asinaru. A new approach for solv-
ing satisfiability problems. International Conference on Mathematics &
Informatics ICMI 45 Bacau, Romania, September 18-20 2006.
[12]Cornelius Croitoru, Cristian Fr˘ asinaru, Elefterie Olaru, and Mihai Tal-
maciu. Hardly perfect graphs. Scientific Annals of Al.I.Cuza University ,
14:12–22, 2004.
[13]Rina Dechter. Constraint Processing . Morgan Kaufmann, 2003.
[14]Reinhard Distel. Graph Theory . Springer, 1997.
[15]Torsten Fahle, Stefan Schamberger, and Meinolf Sellmann. Symmetry
breaking. Lecture Notes in Computer Science , 2239:93, 2001.
[16]Eugene C. Freuder. Synthesizing constraint expressions. Communica-
tions of the ACM , 21(11):958966, 1978.
[17]Eugene C. Freuder. Partial constraint satisfaction. In Proceedings of
the Eleventh International Joint Conference on Artificial Intelligence,
IJCAI-89, Detroit, Michigan, USA , pages 278–283, 1989.
[18]Cristian Fr˘ asinaru. Omnics. http://omnics.sourceforge.net.
[19]Cristian Fr˘ asinaru. Curs practic de Java . Matrix Rom Bucuresti, 2005.
[20]Cristian Fr˘ asinaru. Dezvoltarea modular˘ a ¸ si extensibil˘ a a interfet ¸elor
web. RoCHI 2005. A doua Conferint ¸˘ a de Interact ¸iune Om-Calculator.
Universitatea Babes-Blyai, Cluj-Napoca. , 2:61–66, 2005.
[21]Cristian Fr˘ asinaru. Crearea interfet ¸elor grafice folosind constrˆ angeri.
RoCHI 2006. A treia Conferint ¸˘ a de Interact ¸iune Om-Calculator. Acad-
emia de Studii Economice Bucure¸ sti, 21-22 Septembrie 2006.
[22]Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides. De-
sign Patterns: Elements of Reusable Object-Oriented Software . Addison-
Wesley Professional, 1995.
[23]M. Gavanelli, E. Lamma, P. Mello, and M. Milano. Performance mea-
surement of interactive CSP search algorithms. In Giornata di Lavoro
RCRA su “Analisi sperimentale di algoritmi per l’Intelligenza Artifi-
ciale” , Rome, Italy, Dec 16 1999.

BIBLIOGRAFIE 181
[24]I. Gent and B. Smith. Symmetry breaking during search in constraint
programming. Ian P. Gent and Barbara Smith. Symmetry breaking
during search in constraint programming. Report 99.02, University of
Leeds, January 1999.
[25]Frank Harary. Graph Theory . Addison-Wesley, Reading, MA, 1969.
[26]J.E. Hopcroft and R.M. Karp. A n5/2 algorithm for maximum match-
ings in bipartite graphs. SIAM Journal on Computing , 2:225–231, 1973.
[27]Ilog. Ilog solver. http://www.ilog.com.
[28]Freeman J.W. Improvements to propositional satisfiability search algo-
rithms. Ph.D. Thesis, Department of computer and Information science,
University of Pennsylvania, Philadelphia, PA, 1995., 1995.
[29]R. Karp. Reducibility among combinatorial problems. In In R. Miller
and J. Thatcher, editors, Complexity of Computer Communications ,
pages pages 85–103. Plenum Press, 1972.
[30]Koalog. Koalog constraint solver tutorial. http://www.koalog.com.
[31]Francois Laburthe and Narendra Jussien. Choco.
http://choco.sourceforge.net.
[32]Evelina Lamma, Paola Mello, Michela Milano, Rita Cucchiara, Marco
Gavanelli, and Massimo Piccardi. Constraint propagation and value
acquisition: Why we should do it interactively. In IJCAI , pages 468–
477, 1999.
[33]J.-L. Lauriere. A language and a program for stating and solving com-
binatorial problems. Artificial Intelligence. An International Journal ,
10(1):29–127, 1978.
[34]Chu Min Li. Look-ahead versus look-back for satisfiability problems. In
Proceedings of Third International Conference on Principles and Prac-
tice of Constraint Programming (CP97), LNCS, 341-355. Springer Ver-
lag., 1997.
[35]Laszlo Lovasz. Combinatorial Problems and Exercises . Elsevier, Horth-
Holland, 1993.

182 BIBLIOGRAFIE
[36]Alan K. Mackworth. Consistency in networks of relations. Artificial
Intelligence , 8(1):99118, 1977.
[37]Robert C. Martin. The open-closed principle. C++ Report, SIGS Pub-
lications, 1996.
[38]Bertrand Meyer. Object-Oriented Software Construction . Prentice-Hall,
1997.
[39]C.Paul M.Habib. A simple linear time algorithm for cograph recognition.
Discrete Applied Mathematics , 145:183 197, 2005.
[40]David S. Johnson Michael R. Garey. Computers and Intractability; A
Guide to the Theory of NP-Completeness . W.H. Freeman and Company,
1979.
[41]Ugo Monatanari. Networks of constraints: Fundamental properties and
application to picture processing. Information Science , 7(2):95132, 1974.
[42]P. Boizumault N. Jussien, R.Debruyne. Mantaining arc-consistency
within dynamic backtracking. In Sixth international conference on prin-
ciples and practice of constraint programming (CP’2000) , 2000.
[43]Christos H. Papadimitriou. Computational Complexity . Addison-Wesley,
1994.
[44]Jean-Charles Regin. Global constraints. First International Summer
School on Constraint Programming Acquafredda di Maratea – Italy,
September 11-15 2005.
[45]F. Rossi, P. van Beek, and T. Walsh (editors). Handbook of Constraint
Programming . Elsevier, 2006.
[46]Thomas Schiex. Soft constraint processing. First International Summer
School on Constraint Programming, July 2005.
[47]M. Sergot. A query-the-user facility of logic programming. In In Degano,
P., Sandwell, E., eds.: Integrated Interactive Computer Systems, North
Holland , pages 27–41, 1983.

BIBLIOGRAFIE 183
[48]Cook Stephen. The complexity of theorem prooving procedures. Pro-
ceedings of 3rd ACM Symp. on Theory of Computing , pages 151–158,
1971.
[49]G. Verfaille T. Schiex, H. Fargier. Valued constrained satisfaction prob-
lems: hard and easy problems. Proc. of the 14th IJCAI , -:631637, 1995.
[50]Edward Tsang. Foundations of Constraint Satisfaction . Academic Press,
1993.
[51]James W.Cooper. The Design Patterns Java Companion . Addison-
Wesley, 1998.

Similar Posts