Title: Solving Constraint Satisfaction Problems in Java
1SolvingConstraint Satisfaction Problemsin Java
- Nico van Hanxleden Houwert
- nhouwert_at_iprofs.nl
2Topics
- Wat zijn Constraint Satisfaction Problems?
- Wat maakt CSPs zo lastig?
- Hoe los je ze op?
- Java CSP frameworks
- Demonstratie en code
3Wat zijn CSPs?
- 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
4Planning 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
- 510 10.000.000 mogelijkheden
- Oplossingmogelijkheid brute-force 3u rekentijd
510 Jaar Later
- 20 schepen en 10 aanlegplaatsen
- 1020 mogelijkheden -gt 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
6Andere voorbeelden van CSPs
- 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)
-
7Wat maakt CSPs 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
8N-Queens
9N-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)
10Algoritmiek voor CSPs
- Recht-toe/recht-aan algoritmes zijn er niet
- Brute-force algoritmes werken niet
- Zoekalgoritmes?
11Backtracking
- 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 /- n25 binnen enkele uren
12Hoe los je CSPs 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 010,
- C1 x 4, C2 x lt y, C3 y gt z
13Weergave Middels CSP-Graaf
- 3 variabelen, 3 domeinen, 3 constraints
- 1 unaire constraint, 2 binaire constraints
- Oplossing (b.v.) x 4, y 6, z 5
14Hoe los je CSPs 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
15Constraint 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
16Constraint 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 -gt
backtrack
17Backtracking vs. Constraint Prop.
- Backtracking Constraint prop.
18Variable 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
19Value 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
20Hoe los je CSPs dan wel op?
- Samenvattend
- Kunnen we CSPs 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)
21Java 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
22CREAM
23N-Queens in CREAM
- Eerst n-queens als CSP modelleren
- representatie
- Qi Q1, , Qn
- index is kolom, waarde rij
1. ongelijke kolommen
1. i ? j ? (automatisch)
2. ongelijke rijen
2. Qi ? Qj ? ? Qn
3. ongelijke diagonalen \
3. Qii ? Qjj ? ? Qnn
4. ongelijke diagonalen /
4. Qi-i ? Qj-j ? ? Qn-n
1, 2, 6, 5, 7, 3, 8,
4
24N-Queens in CREAM
public class QueensCSPSolver // Declare
Network, Solver, Solution and Variables
IntVariable queens Network net Solver
solver Solution sol ... void
solveQueens(int nrQueens) queens new
IntVariablenrQueens // Initialise
Variables with their Domains for (int i 0
i lt nrQueens i) queensi new
IntVariable(net, 1, nrQueens)
25N-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()
26N-Queens in CREAM
// Print the solution // Uses
solution.getIntValue(queensi)
printBoard()
// Stop the solver solver.stop()
- 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,
27Enkele Statistieken
28Afsluiting
- Samenvattend
- Q A
- Meer informatie en whitepapers www.iprofs.nl