280 likes | 492 Views
Solving Constraint Satisfaction Problems in Java. Nico van Hanxleden Houwert nhouwert@iprofs.nl. Topics. Wat zijn Constraint Satisfaction Problems? Wat maakt CSP’s zo lastig? Hoe los je ze op? Java CSP frameworks Demonstratie en code. Wat zijn CSP’s?.
E N D
SolvingConstraint Satisfaction Problemsin Java Nico van Hanxleden Houwert nhouwert@iprofs.nl
Topics • Wat zijn Constraint Satisfaction Problems? • Wat maakt CSP’s zo lastig? • Hoe los je ze op? • Java CSP frameworks • Demonstratie en code
Wat zijn CSP’s? • ‘Normale’ problemen: reguliere algoritmes • B.v.: omrekenen graden Celcius → Fahrenheit • Lage complexiteit, eenduidig algoritme • Input → berekening → output • Stapje verder: zoekprobleem: legpuzzel • Niet eenduidig • Ietwat zoeken • Maar: niet complex • En: probleem kan in stukken gehakt worden
Planning Commerciële Haven • Variabelen: 10 schepen, 5 aanlegplaatsen • Welk schip wanneer op welke aanlegplaats? • Veel constraints (voorwaarden) • Opstellen van goed of optimaal rooster • ‘Puzzelprobleem’, geen eenduidig algoritme • Hoge complexiteit / veel afhankelijkheden • Niet deelbaar • Grote zoekruimte • 5^10 ≈ 10.000.000 mogelijkheden • Oplossingmogelijkheid: brute-force ≈ 3u rekentijd
10 Jaar Later… • 20 schepen en 10 aanlegplaatsen • 10^20 mogelijkheden -> 3.000.000.000 jaar • 100x krachtigere processor aanschaffen? • Probleem in stukken hakken: 2x 3u = 6u? • Dit is een CSP • Zoekprobleem; geen eenduidig algoritme • Hoge complexiteit / veel afhankelijkheden / constraints • Zeer grote zoekruimte • Combinatorische explosie
Andere voorbeelden van CSP’s • Opstellen van vluchtroosters op Schiphol • Opstellen treinroosters bij de NS • Opstellen rooster voor de J-Fall • Puzzels (schaken, dammen, Sudoku, kruiswoordpuzzels, GO, etc.) • Logistieke problemen • Resource allocation • Elektronica (circuit design) • …
Wat maakt CSP’s zo lastig? • Zoek-/‘puzzel’-problemen • Niet oplosbaar middels reguliere algoritmes • Clay Mathematics Institute biedt $1.000.000,- • Hoge mate van complexiteit • Veel afhankelijkheden • Zeer grote zoekruimten • Combinatorische explosie
N-Queens • N-queens is een CSP • Zoekruimte: mogelijkheden • 8-queens: 64x63x62x61x60x59x58x57 / 8! = 4.426.165.368 mogelijkheden • Slechts 92 oplossingen, waarvan slechts 12 uniek (speld in hooiberg) • 1 mogelijkheid/msec = 51 dagen rekentijd • 20-queens: 88.418.346.767.849.338.466.287 jaar ≈ 88,5 triljard jaar (combinatorische explosie)
Algoritmiek voor CSP’s • ‘Recht-toe/recht-aan’ algoritmes zijn er niet • Brute-force algoritmes werken niet • Zoekalgoritmes?
Backtracking - Backtracking (depth- first search) - Efficiënter dan brute- force, maar niet voldoende - Constant op fouten stuiten en moeten backtracken is duur - Supercomputer komt momenteel tot +/- n=25 binnen enkele uren
Hoe los je CSP’s dan wel op? • Allereerst, formele definitie CSP: • Verzameling variabelen: V = {x1, ..., xn} • Verzameling domeinen: D = {d1, …, dn} • Verzameling constraints: C = {c1, …, cm} • B.v.: • V = {x, y, z} • Dx = Dy = Dz = {0…10}, • C1 = [x == 4], C2 = [x < y], C3 = [y > z]
Weergave Middels CSP-Graaf • 3 variabelen, 3 domeinen, 3 constraints • 1 unaire constraint, 2 binaire constraints • Oplossing (b.v.): x = 4, y = 6, z = 5
Hoe los je CSP’s dan wel op? • Basis: systematic search: backtracking • Maar, verrijkt met een aantal technieken • Consistency techniques • Deze worden uitgevoerd voordat gezocht wordt • Node-consistency:verwijdert alle unaire constraints & werkt de domains bij • Arc-consistency:een binaire constraint tussen 2 variabelen X en Y is arc consistent indien alle waarden in beide domeinen consistent zijn met de constraint. Een arc consistency algoritme verwijdert alle waarden uit de domeinen waarvoor dit niet geldt
Constraint Propagation • ‘Intelligente’ vorm van backtracking • Gewone backtracking instantieert variabelen incrementeel, en herstelt van ongeldige instantiaties nadat deze gedetecteerd zijn • Constraint propagation voorkomt ongeldige instantiaties door deze van tevoren te detecteren en ze over te slaan • Dit door de constraints te integreren (propageren) in het zoekproces
Constraint Propagation • Instantieer een variabele • Kijk naar de andere variabelen die middels een constraint hiermee verbonden zijn • Verwijder uit de domains van die andere variabelen alle waarden die in conflict zijn met de huidige variabele (n.a.v. de constraints) • Zodra de domain(s) leeg zijn weet je dat je niet verder hoeft te zoeken in die richting -> backtrack
Backtracking vs. Constraint Prop. • Backtracking: Constraint prop.:
Variable Ordering • In welke volgorde variabelen bezoeken? • Statische & dynamische ordering algoritmes • MRV (Minimum Remaining Values) • Heuristiek: Fail First Principle – “To succeed, try first where you are most likely to fail” • Variabele met de minst resterende waarden (kleinste domein) • Hiermee: doodlopende takken in de zoekboom z.s.m. detecteren, en hiermee de grootte van de zoekboom minimaliseren
Value Ordering • Zodra de volgende te bezoeken variabele bepaald is: in welke volgorde de mogelijke waarden toekennen? • Populair algoritme: LCV (Least Constraining Value) • Heuristiek: kies de waarde die de minste waarden uit de domeinen van de andere variabelen elimineert
Hoe los je CSP’s dan wel op? • Samenvattend: • Kunnen we CSP’s efficiënter oplossen? • Yes we can • Node-consistency & arc-consistency • Constraint propagation (‘intelligente’ backtracking) • Dynamic variable ordering & dynamic value ordering • Echter - als developer wil je je focussen op het probleem, en niet op alle algoritmen (en varianten erop)
Java CSP Frameworks • Commerciële en open-source frameworks beschikbaar • Voordelen: • Off-the-shelf algoritmes • Abstractielaag waarmee CSPs eenvoudiger gemodelleerd kunnen worden • O.a.: ILOG en CREAM
N-Queens in CREAM • Eerst: n-queens als CSP modelleren • n variabelen • representatie: • Qi = {Q1, …, Qn} • index is kolom, waarde = rij • n domeinen ({1…n}) • constraints: 4 typen: 1. ongelijke kolommen 1. i ≠ j ≠ …(automatisch) 2. ongelijke rijen 2. Qi ≠ Qj ≠ … ≠ Qn 3. ongelijke diagonalen \ 3. Qi+i ≠ Qj+j ≠ … ≠ Qn+n 4. ongelijke diagonalen / 4. Qi-i ≠ Qj-j ≠ … ≠ Qn-n {1, 2, 6, 5, 7, 3, 8, 4}
N-Queens in CREAM public classQueensCSPSolver { // Declare Network, Solver, Solution and Variables IntVariable[] queens; Network net; Solver solver; Solution sol; ... void solveQueens(intnrQueens) { queens = newIntVariable[nrQueens]; // Initialise Variables with their Domains for (inti = 0; i < nrQueens; i++) { queens[i] = newIntVariable(net, 1, nrQueens); }
N-Queens in CREAM // Add the first set of Constraints // (Queens must be on different rows) new NotEquals(net, queens); ... // Initialise the solver solver = new DefaultSolver(net); // Solve the problem & iterate through all solutions for (solver.start(); solver.waitNext(); solver.resume()) { // Get a solution solution = solver.getSolution();
N-Queens in CREAM • Korte demonstratie • Backtracking: n = 8 ok, n = 20 ok, n = 30 nok • CSP/CREAM: n = 8 ok, n = 20 ok, n = 50 ok, n = 70 ok, n = 100 ok, … // Print the solution // Usessolution.getIntValue(queens[i]); printBoard(); } // Stop the solver solver.stop(); }
Afsluiting • Samenvattend • Q & A • Meer informatie en whitepapers: www.iprofs.nl