Figaro Yet Another Constraint Programming Library - PowerPoint PPT Presentation

About This Presentation
Title:

Figaro Yet Another Constraint Programming Library

Description:

Trailing vs copying. Design patterns for constraint programming ... moving on: Trailing vs. Copying (Schulte, ICLP'99) 26. Trailing vs Copying. Trail and backtrack ... – PowerPoint PPT presentation

Number of Views:45
Avg rating:3.0/5.0
Slides: 51
Provided by: marti76
Category:

less

Transcript and Presenter's Notes

Title: Figaro Yet Another Constraint Programming Library


1
FigaroYet Another Constraint Programming Library
  • Martin Henz, Ka Boon Ng
  • National University of Singapore
  • Tobias Müller
  • Universität des Saarlandes

2
Finite Domain Constraint Programming
  • A technique for solving combinatorial search and
    optimization problems.

3
S E N D M O R E M O N E Y
4
S E N D M O R E M O N E Y
Modeling
  • 0?S,,Y?9
  • S ? 0
  • M ? 0
  • SY all different
  • 1000S 100E
    10N D
  • 1000M 100O 10R E
  • 10000M 1000O 100N 10E Y

5
S E N D M O R E M O N E Y
S ? N E ? N N ? N D ? N M ? N O ? N R ? N Y ? N
  • 0?S,,Y?9
  • S ? 0
  • M ? 0
  • SY all different
  • 1000S 100E
    10N D
  • 1000M 100O 10R E
  • 10000M 1000O 100N 10E Y

6
S E N D M O R E M O N E Y
Propagate
S ? 0..9 E ? 0..9 N ? 0..9 D ? 0..9 M ?
0..9 O ? 0..9 R ? 0..9 Y ? 0..9
  • 0?S,,Y?9
  • S ? 0
  • M ? 0
  • SY all different
  • 1000S 100E
    10N D
  • 1000M 100O 10R E
  • 10000M 1000O 100N 10E Y

7
S E N D M O R E M O N E Y
Propagate
S ? 1..9 E ? 0..9 N ? 0..9 D ? 0..9 M ?
1..9 O ? 0..9 R ? 0..9 Y ? 0..9
  • 0?S,,Y?9
  • S ? 0
  • M ? 0
  • SY all different
  • 1000S 100E
    10N D
  • 1000M 100O 10R E
  • 10000M 1000O 100N 10E Y

8
S E N D M O R E M O N E Y
Propagate
S ? 9 E ? 4..7 N ? 5..8 D ? 2..8 M ?
1 O ? 0 R ? 2..8 Y ? 2..8
  • 0?S,,Y?9
  • S ? 0
  • M ? 0
  • SY all different
  • 1000S 100E
    10N D
  • 1000M 100O 10R E
  • 10000M 1000O 100N 10E Y

9
S E N D M O R E M O N E Y
S ? 9 E ? 4..7 N ? 5..8 D ? 2..8 M ?
1 O ? 0 R ? 2..8 Y ? 2..8
Labeling
E ? 4
E 4
S ? 9 E ? 4..7 N ? 5..8 D ? 2..8 M ?
1 O ? 0 R ? 2..8 Y ? 2..8
S ? 9 E ? 4..7 N ? 5..8 D ? 2..8 M ?
1 O ? 0 R ? 2..8 Y ? 2..8
  • 0?S,,Y?9
  • S ? 0
  • M ? 0
  • SY all different
  • 1000S 100E
    10N D
  • 1000M 100O 10R E
  • 10000M 1000O 100N 10E Y

10
S E N D M O R E M O N E Y
S ? 9 E ? 4..7 N ? 5..8 D ? 2..8 M ?
1 O ? 0 R ? 2..8 Y ? 2..8
Propagate
E ? 4
E 4
S ? 9 E ? 5..7 N ? 6..8 D ? 2..8 M ?
1 O ? 0 R ? 2..8 Y ? 2..8
  • 0?S,,Y?9
  • S ? 0
  • M ? 0
  • SY all different
  • 1000S 100E
    10N D
  • 1000M 100O 10R E
  • 10000M 1000O 100N 10E Y

11
S E N D M O R E M O N E Y
Labeling
S ? 9 E ? 4..7 N ? 5..8 D ? 2..8 M ?
1 O ? 0 R ? 2..8 Y ? 2..8
E ? 4
E 4

S ? 9 E ? 5..7 N ? 6..8 D ? 2..8 M ?
1 O ? 0 R ? 2..8 Y ? 2..8
E 5
E ? 5
S ? 9 E ? 5..7 N ? 6..8 D ? 2..8 M ?
1 O ? 0 R ? 2..8 Y ? 2..8
S ? 9 E ? 5..7 N ? 6..8 D ? 2..8 M ?
1 O ? 0 R ? 2..8 Y ? 2..8
12
S E N D M O R E M O N E Y
Propagate
S ? 9 E ? 4..7 N ? 5..8 D ? 2..8 M ?
1 O ? 0 R ? 2..8 Y ? 2..8
E ? 4
E 4

S ? 9 E ? 5..7 N ? 6..8 D ? 2..8 M ?
1 O ? 0 R ? 2..8 Y ? 2..8
E 5
E ? 5
S ? 9 E ? 5 N ? 6 D ? 7 M ? 1 O ? 0 R
? 8 Y ? 2
S ? 9 E ? 6..7 N ? 7..8 D ? 2..8 M ?
1 O ? 0 R ? 2..8 Y ? 2..8
13
S E N D M O R E M O N E Y
Complete Search Tree
S ? 9 E ? 4..7 N ? 5..8 D ? 2..8 M ?
1 O ? 0 R ? 2..8 Y ? 2..8
E 4
E ? 4

S ? 9 E ? 5..7 N ? 6..8 D ? 2..8 M ?
1 O ? 0 R ? 2..8 Y ? 2..8
E 5
E ? 5
S ? 9 E ? 5 N ? 6 D ? 7 M ? 1 O ? 0 R
? 8 Y ? 2
S ? 9 E ? 6..7 N ? 7..8 D ? 2..8 M ?
1 O ? 0 R ? 2..8 Y ? 2..8
E ? 6
E 6


14
Is That All?
S ? 9 E ? 4..7 N ? 5..8 D ? 2..8 M ?
1...
E 4
E ? 4
  • Complex
  • symbolic
  • constraints
  • Programmable search
  • Trailing vs copying
  • Design patterns for constraint programming
  • Integration of other search techniques


S ? 9 E ? 5..7 N ? 6..8 D ? 2..8 M ?
1...
E 5
E ? 5
S ? 9 E ? 5 N ? 6 D ? 7 M ? 1..
S ? 9 E ? 6..7 N ? 7..8 D ? 2..8 M ?
1...
E 6
E ? 6


15
FD(CP) Languages and Libraries
  • Languages
  • CLP(FD)
  • Eclipse, CHIP
  • CLAIRE new language
  • Oz new language
  • Libraries
  • PECOS LISP
  • Ilog Solver C
  • Figaro C, under development

Prolog based
16
Design Issues
  • Languages
  • CLP(FD)
  • Eclipse, CHIP
  • CLAIRE
  • Oz
  • Libraries
  • PECOS
  • Ilog Solver
  • Syntax
  • Integration with
  • application programming
  • Programming
  • propagation algorithms
  • Programming search
  • strategies
  • Programming search
  • algorithms

17
Representing the Constraint Store
  • class store
  • public
  • store()
  • var newvar(int lo,
  • int hi)
  • var getlo(var v)
  • var gethi(var v)
  • ...

18
Representing the Constraint Store
  • class store
  • public
  • store()
  • var newvar(int lo,
  • int hi)
  • var getlo(var v)
  • var gethi(var v)
  • ...

int main(...) storestnew store()
...
19
Representing the Constraint Store
  • class store
  • public
  • store()
  • var newvar(int lo,
  • int hi)
  • var getlo(var v)
  • var gethi(var v)
  • ...

int main(...) storestnew store() s
st -gt newvar(0,9) ... y st -gt
newvar(0,9) ...
20
Representing the Constraint Store
  • class store
  • public
  • store()
  • var newvar(int lo,
  • int hi)
  • var getlo(var v)
  • var gethi(var v)
  • ...

int main(...) storestnew store() s
st -gt newvar(0,9) ... y st -gt
newvar(0,9) all_different(st,
s,..,y) ...
21
Representing Search Trees
  • class node
  • public virtual node child(store ,int)0

S ? 9 E ? 4..7 N ? 5..8 D ? 2..8 M ?
1...
E 4
E ? 4

S ? 9 E ? 5..7 N ? 6..8 D ? 2..8 M ?
1...
E 5
E ? 5
S ? 9 E ? 5 N ? 6 D ? 7 M ? 1..
S ? 9 E ? 6..7 N ? 7..8 D ? 2..8 M ?
1...
E 6
E ? 6


22
Representing Search Trees
  • class naive public node
  • private int idxvectorltvargt varsnodesubtree
  • public
  • naive(vectorltvargt vs,int i,nodet) ...
  • node child(storest, int i)
  • if (i0)
  • st-gttell(varsidx,st-gtgetlo(varsidx))
  • return (idx1var.size() ? subtree
  • new naive(vars,idx1,subtree))
  • else
  • st-gttell(varsidx,st-gtgetlo(varsidx)1,
  • st-gtgethi(varsidx))
  • return new naive(vars,idx,subtree)

23
Backtracking
  • mark storemark()
  • void storebacktrack(mark m)

S ? 9 E ? 4..7 N ? 5..8 D ? 2..8 M ?
1...
E 4
E ? 4

S ? 9 E ? 5..7 N ? 6..8 D ? 2..8 M ?
1...
E 5
E ? 5
S ? 9 E ? 5 N ? 6 D ? 7 M ? 1..
S ? 9 E ? 6..7 N ? 7..8 D ? 2..8 M ?
1...
E 6
E ? 6


24
Depth-first Search (backtracking)
  • node solve_one(store s,node t)
  • if (t NULL) return t
  • mark m s-gtmark()
  • try return solve_one(s,t-gtchild(s,0))
  • catch (Failure)
  • s-gtbacktrack(m)
  • return solve_one(s,t-gtchild(s,1))

25
Stepping Back
  • Nothing new so far Oz has programmable search
    algorithms through spaces (Schulte, ICLP97)
    Ilog Solver has IlcManager objects.
  • But
  • lean stores
  • nodes as an abstraction for programming search
    strategies
  • more on the basic data structures in the
    proceedings
  • moving on Trailing vs. Copying (Schulte, ICLP99)

26
Trailing vs Copying
  • Trail and backtrack
  • Copy and abandon

S ? 9 E ? 4..7 N ? 5..8 D ? 2..8 M ?
1...
E 4
E ? 4

S ? 9 E ? 5..7 N ? 6..8 D ? 2..8 M ?
1...
E 5
E ? 5
S ? 9 E ? 5 N ? 6 D ? 7 M ? 1..
S ? 9 E ? 6..7 N ? 7..8 D ? 2..8 M ?
1...
E 6
E ? 6


27
Copying Stores
  • Simply copy the store with all variables and
    constraints
  • storestore(const store)
  • But nodes refer to variables
    their addresses change!

28
Labeling Refers to Variables
  • class naive public node
  • private int idxvectorltvargt varsnodesubtree
  • public
  • naive(vectorltvargt vs,int i,nodet) ...
  • node child(storest, int i)
  • if (i0)
  • st-gttell(varsidx,st-gtgetlo(varsidx))
  • return (idx1vars.size() ? subtree
  • new naive(vars,idx1,subtree))
  • else
  • st-gttell(varsidx,st-gtgetlo(varsidx)1,
  • st-gtgethi(varsidx))
  • return new naive(vars,idx,subtree)

29
Search Refers to Marks
  • node solve_one(store s,node t)
  • if (t NULL) return t
  • mark m s-gtmark()
  • try return solve_one(s,t-gtchild(s,0))
  • catch (Failure)
  • s-gtbacktrack(m)
  • return solve_one(s,t-gtchild(s,1))

30
Indirect Addressing
store
  • only use indices in arrays to address variables,
    propagators and marks

vars
props
trail
1 2 3 4 5 . . .
1 2 3 4 5 . . .
1 2 3 4 5 . . .
Now nodes dont need to care, whether they work
on original or copy.
31
Depth-first Search (copying)
  • node solve_one(store s,node t)
  • if (t NULL) return t
  • store s2 new store(s)
  • try return solve_one(s,t-gtchild(s,0))
  • catch (Failure)
  • return solve_one(s2,t-gtchild(s,1))

32
Stepping Back
  • Indirect addressing allows copy and
    trailing-based search
  • Possibly interesting combinations of the two to
    be explored
  • Moving on Memory policy just one dimension in
    the design space for search algorithms.

33
Dimensions in the Design Space for Search
Algorithms
  • Exploration depth-first search,
    limited-discrepancy search,...
  • Memory policy copying, trailing,...
  • Optimization branch-and-bound, restart
    optimization,...
  • Interaction first, last, all solution search,
    tracing,...
  • Visualization Oz Explorer like search tree
    visualization

34
STK Software Engineering of Inference Engines
  • STK originally developed for Oz
  • Allows to separate design dimensions into modules
  • Software architecture ensures reusability of
    components
  • STK ideas will be at the heart of Figaro

35
Example Exploration and Interaction
  • Exploration is defined by a class that extends
    the abstract class exploration.
  • class exploration
  • public virtual node one_step()0

36
Example Exploration and Interaction
  • Exploration is defined by a class that extends
    the abstract class exploration.
  • class exploration
  • public virtual node one_step()0
  • Interaction calls one_step according to the
    desired mode of interaction.
  • node first(exploration e)
  • node n
  • while (n e-gtone_step())
  • if (nsuccess_node) break
  • return n

37
Stepping Back
  • Design patterns for tree search
  • More in paper A Search Toolkit for Constraint
    Programming (PADL00)
  • Moving on Constraint programming is just one
    technique local search?

38
Global Search
??
  • v1 ? v2,v1 ? v2,v1 ? v2

F?
?T
T?
?F
FT
TT
FF
TF
39
Global Search
??
v1F
  • v1 ? v2,v1 ? v2,v1 ? v2

F?
?T
v1T
T?
?F
FT
TT
FF
TF
40
Global Search
??
v1F
  • v1 ? v2,v1 ? v2,v1 ? v2

F?
?T
v1T
T?
v2T
?F
v2F
FT
TT
FF
TF
41
Global Search
??
v1F
  • v1 ? v2,v1 ? v2,v1 ? v2

F?
?T
v1T
T?
v2T
?F
Search Tree
v2F
FT
v2T
TT
FF
v2F
solution
TF
42
Local Search
??
v1F
  • v1 ? v2,v1 ? v2,v1 ? v2

F?
?T
v1T
T?
v2T
?F
consider only full assignments of variables to
values
v2F
FT
v2T
TT
FF
v2F
solution
TF
43
Local Search
  • v1 ? v2,v1 ? v2,v1 ? v2

FT
Search Space
TT
FF
TF
44
Local Search
  • v1 ? v2,v1 ? v2,v1 ? v2

neighborhood
FT
initial assignment
TT
FF
TF
45
Local Search
  • v1 ? v2,v1 ? v2,v1 ? v2

FT
TT
FF
local move
TF
46
Local Search
  • v1 ? v2,v1 ? v2,v1 ? v2

FT
TT
FF
TF
local move
47
Local Search
  • v1 ? v2,v1 ? v2,v1 ? v2

FT
TT
FF
solution found
TF
48
Observations
  • Data structures needed for constraint programming
    are the same as in local search.
  • Integration of CP and LS has been approached
    before.
  • Stephen Won, MS thesis supervised by Jimmy Lee
    (1997)

49
Stepping Back (for good)
  • Viewing constraint programming as a collection of
    design patterns.
  • Flexible memory policy through indirect
    addressing
  • Figaro initiative
  • library for discrete problem solving and
    optimization
  • local search and constraint programming (LP,IP?)
  • designed by researchers for researchers
  • open source, current contributors N U Singapore,
    partners CUHK, PSL

50
Figaro (very last slide)
  • Figaro, an offspring of Mozart
  • F I nite domain
  • GA dget for combinatorial
  • p RO blem solving
Write a Comment
User Comments (0)
About PowerShow.com