Constraint satisfaction Zoekalgoritmen (2009 2010) College 11: Constraint Satisfaction Dirk Thierens, Tekst: Linda van der Gaag Een constraint satisfaction probleem (CSP) bestaat uit: een verzameling variabelen; een domein van waarden voor elke variabele; een verzameling constraints op waardetoekenningen aan de variabelen. Een oplossing van een constraint satisfaction probleem is een waardetoekenning aan alle variabelen waarmee aan alle constraints is voldaan. Zoekalgoritmen: 278 / 297 Zoekalgoritmen: CSP Inleiding en definities 279 / 297 Voorbeelden Een constraint satisfaction probleem Roosteringsproblemen zijn meestal te formuleren als constraint satisfaction problemen: het maken van een lesrooster voor een middelbare school; het inroosteren van inkomende en vertrekkende vluchten voor Schiphol. Configuratieproblemen zijn ook meestal te formuleren als constraint satisfaction problemen: het ergonomisch verantwoord inrichten van een operatiezaal; het bekabelen van een computernetwerk. Een (binair) constraint satisfaction probleem is een drietupel CSP = (V, D, C) met V = {,..., V n }, n 1, is de niet-lege eindige verzameling variabelen van het probleem; D = {D 1,..., D n }, n 1, is de verzameling van niet-lege eindige domeinen van het probleem, waarin D i het domein is van de variabele V i, i = 1,..., n; C = {C i,j i, j = 1,..., n} is de verzameling binaire constraints van het probleem met C i,j D i D j en C i,j = C j,i, i, j = 1,..., n. Zoekalgoritmen: CSP Inleiding en definities 280 / 297 Zoekalgoritmen: CSP Inleiding en definities 281 / 297
: het kleuringsprobleem De constraint graaf Het kleuringsprobleem is als een constraint satisfaction probleem CSP = (V, D, C) te formuleren: V = {,..., } is de verzameling van variabelen, waarin elke variabele een in te kleuren land representeert; het domein D i = {blauw, groen, rood} van een variabele V i bevat de mogelijke kleuren voor het corresponderende land; als constraints C i,j, i, j = 1,..., 7, bevat het probleem bijvoorbeeld: C1,3 = {(kleur 1, kleur 3 ) kleur 1 kleur 3 } D 1 D 3 ; De constraints van een constraint satisfaction probleem worden in een ongerichte graaf weergegeven, waarin elke knoop een variabele van het probleem representeert; elke kant een niet-universele constraint van het probleem representeert. Zo n graaf wordt een constraint graaf of afhankelijkheidsgraaf genoemd. C1,6 = D 1 D 6 (dit noemen we een universele constraint) Zoekalgoritmen: CSP Inleiding en definities 282 / 297 Zoekalgoritmen: CSP Inleiding en definities 283 / 297 De toestanden van een CSP De constraint graaf van het probleem is de volgende ongerichte graaf: een instantiatie van een variabele V i V is een waardetoekenning V i = d, d D i ; een toestand van het probleem CSP is een samengestelde waardetoekenning s Di DD i aan alle variabelen van V; een partiële toestand van CSP voor V V is een samengestelde waardetoekenning s Di D D i aan alle variabelen van V ; de nultoestand van CSP is de partiële toestand voor. Zoekalgoritmen: CSP Inleiding en definities 284 / 297 Zoekalgoritmen: CSP Inleiding en definities 285 / 297
Projectie en uitbreiding een (partiële) toestand s voor V is een projectie van een (partiële) toestand s voor V op V als V V ; s (V i ) = s (V i ), voor alle V i V ; omgekeerd heet s een uitbreiding van s. Zoekalgoritmen: CSP Inleiding en definities 286 / 297 De waardetoekenningen s 1 = ( = blauw) s 2 = ( = groen, = blauw) s 3 = ( = blauw, = groen, = blauw) zijn partiële toestanden van het probleem. Er geldt dat s 1 is een projectie van s 3 en s 3 is een uitbreiding van s 1 ; s 2 is geen uitbreiding van s 1 ; s 2 is geen projectie van s 3. Zoekalgoritmen: CSP Inleiding en definities 287 / 297 Schending van constraints Zij s een (partiële) toestand van CSP voor V V. aan een constraint C i,j C is voldaan door s als V i, V j V en (s(v i ), s(v j )) C i,j ; een constraint C i,j C is geschonden door s als V i, V j V en (s(v i ), s(v j )) / C i,j. Zoekalgoritmen: CSP Inleiding en definities 288 / 297 s = ( = blauw, = groen, = blauw) aan de constraint C 1,2 = {(kleur 1, kleur 2 ) kleur 1 kleur 2 } is voldaan door s; de constraint C 1,3 = {(kleur 1, kleur 3 ) kleur 1 kleur 3 } is geschonden door s; aan de constraint C 1,4 is niet voldaan door s, maar de constraint is ook niet geschonden door s. Zoekalgoritmen: CSP Inleiding en definities 289 / 297
Een oplossing een oplossing van CSP is een toestand die aan alle constraints van CSP voldoet; een partiële oplossing is een partiële toestand die geen enkele constraint van CSP schendt. s = ( = blauw, = groen, = groen) de partiële toestand s is een partiële oplossing van het probleem; de partiële toestand s heeft een uitbreiding die een oplossing is voor het probleem: ( = blauw, = groen, = groen, = rood, = blauw, = blauw, = groen). Zoekalgoritmen: CSP Inleiding en definities 290 / 297 Zoekalgoritmen: CSP Inleiding en definities 291 / 297 Nog een voorbeeld Een CSP als zoekprobleem s = ( = blauw, = groen, = rood) de partiële toestand s is een partiële oplossing van het probleem; de partiële toestand s heeft echter geen uitbreiding die een oplossing is van het probleem. Een constraint satisfaction probleem CSP kan als een zoekprobleem worden geformuleerd: de toestandsruimte van het zoekprobleem is de verzameling van alle (partiële) toestanden van CSP; de begintoestand van het zoekprobleem is de nultoestand van CSP; een doeltoestand van het zoekprobleem is een oplossing van CSP; de operator van het zoekprobleem is het uitbreiden van een partiële toestand door een waarde aan een nog ongeïnstantieerde variabele toe te kennen. Zoekalgoritmen: CSP Inleiding en definities 292 / 297 Zoekalgoritmen: CSP Inleiding en definities 293 / 297
Chronologische backtracking kleuringsprobleem: Met backtracking wordt de volgende zoekboom dynamisch gegenereerd: ( ) (V1=blauw) V2=blauw) V2=blauw, V3=blauw) Chronologische backtracking is een variant van backtracking. De overeenkomst is: de zoekboom wordt dynamisch gegenereerd door knopen in een depth-first volgorde te expanderen. Het belangrijkste verschil is: een knoop wordt alleen geëxpandeerd als deze een (partiële) oplossing van het probleem is. Chronologische backtracking is daardoor alleen geschikt voor constraint satisfaction problemen. V2=blauw, V3=blauw, V4=blauw) Zoekalgoritmen: CSP Inleiding en definities 294 / 297 Zoekalgoritmen: CSP Inleiding en definities 295 / 297 Nogmaals het voorbeeld Thrashing kleuringsprobleem: Met chronologische backtracking wordt de volgende zoekboom dynamisch gegenereerd: V2=blauw) (V1=blauw) V3=blauw) ( ) V2=groen) V3=groen, V4=blauw) V3=groen) V3=groen, V3=groen, V4=groen) V4=rood) Zoekalgoritmen: CSP Inleiding en definities 296 / 297 kleuringsprobleem, maar nu met V D 4 = {blauw, groen} en 3 D i = {blauw, groen, rood}, V 6 i = 1, 2, 3, 5, 6, 7: Chronologische backtracking genereert achtereenvolgens de volgende niet succesvolle partiële toestanden: ({ = blauw, = blauw}) ({ = blauw, = groen, = blauw}) ({ = blauw, = groen, = groen, = blauw}) ({ = blauw, = groen, = groen, = groen}) ({ = blauw, = groen, = rood, = blauw}) ({ = blauw, = groen, = rood, = groen})... Het steeds opnieuw proberen van niet succesvolle combinaties van waardetoekenningen wordt thrashing genoemd. Zoekalgoritmen: CSP Inleiding en definities 297 / 297