*hwwlqj 3udfwlfdo«...

48
*HWWLQJ 3UDFWLFDO« !"#$%&'( *'+,"#-.+&"' /$.+-,$ 012 1030405416 ID2204: Constraint Programming Christian Schulte !"!#$%&'()&#*"' Software and Computer Systems School of Information and Communication Technology KTH ± Royal Institute of Technology Stockholm, Sweden

Upload: others

Post on 10-Aug-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: *HWWLQJ 3UDFWLFDO« !#$%&'()*'+,#-.+&'marco/Teaching/AY2010-2011/DM826/Slides/… · *HWWLQJ 3UDFWLFDO«!"#$%&'()*'+,"#-.+&"' /$.+-,$)012)1030405416 ID2204: Constraint Programming

!"#$%&'()*'+,"#-.+&"'/$.+-,$)012)1030405416

ID2204: Constraint Programming

Christian Schulte!"!#$%&'()&#*"'

Software and Computer SystemsSchool of Information and Communication TechnologyKTH Royal Institute of TechnologyStockholm, Sweden

Page 2: *HWWLQJ 3UDFWLFDO« !#$%&'()*'+,#-.+&'marco/Teaching/AY2010-2011/DM826/Slides/… · *HWWLQJ 3UDFWLFDO«!"#$%&'()*'+,"#-.+&"' /$.+-,$)012)1030405416 ID2204: Constraint Programming

7"'8+,9&'+):,"(,9;;&'()<&+=)>$."#$

Page 3: *HWWLQJ 3UDFWLFDO« !#$%&'()*'+,#-.+&'marco/Teaching/AY2010-2011/DM826/Slides/… · *HWWLQJ 3UDFWLFDO«!"#$%&'()*'+,"#-.+&"' /$.+-,$)012)1030405416 ID2204: Constraint Programming

1030405416 *?110@4/012)7=,&8+&9')A.=-%+$2)*7B2)CBD 3E

FG$,G&$<

Program model as scriptdeclare variablespost constraints (creates propagators)define branching

Solve scriptbasic search strategyGist: interactive visual search

Page 4: *HWWLQJ 3UDFWLFDO« !#$%&'()*'+,#-.+&'marco/Teaching/AY2010-2011/DM826/Slides/… · *HWWLQJ 3UDFWLFDO«!"#$%&'()*'+,"#-.+&"' /$.+-,$)012)1030405416 ID2204: Constraint Programming

:,"(,9;)!"#$%)98)A.,&H+

Page 5: *HWWLQJ 3UDFWLFDO« !#$%&'()*'+,#-.+&'marco/Teaching/AY2010-2011/DM826/Slides/… · *HWWLQJ 3UDFWLFDO«!"#$%&'()*'+,"#-.+&"' /$.+-,$)012)1030405416 ID2204: Constraint Programming

1030405416 *?110@4/012)7=,&8+&9')A.=-%+$2)*7B2)CBD 3I

A.,&H+J)FG$,G&$<

Script is class inheriting from class Spacemembers store variables regarded as solution

Script constructorinitialize variablespost propagators for constraintsdefine branching

Copy constructor and copy functioncopy a Script object during search

Exploration takes Script object as inputreturns object representing solution

Main functioninvokes search engine

Page 6: *HWWLQJ 3UDFWLFDO« !#$%&'()*'+,#-.+&'marco/Teaching/AY2010-2011/DM826/Slides/… · *HWWLQJ 3UDFWLFDO«!"#$%&'()*'+,"#-.+&"' /$.+-,$)012)1030405416 ID2204: Constraint Programming

1030405416 *?110@4/012)7=,&8+&9')A.=-%+$2)*7B2)CBD 3K

A.,&H+)L",)A!!J)A+,-.+-,$

!"#$%&'()*+($,'(-"#./001!"#$%&'()*+($,'(-2(34$0/001

&2"#+)#35(263$()7($,'(8

$%322)9(#':,4(:,#(; <)6&=%"$)963$()>64,.($.('<?#.@34A443; %8)--)B"+".2)C,4).0()%(..(42

6&=%"$<--)D,#2.4&$.,4)C,4)2$4"6.9(#':,4(:,#(;--)D,#2.4&$.,4)C,4)$%,#"#+9(#':,4(:,#(;E=,,% 2034(F)9(#':,4(:,#(;--)G(4C,45)$,6;"#+)'&4"#+)$%,#"#+H"4.&3%)963$(I)$,6;E=,,%--)G4"#.)2,%&.",#

J8

Page 7: *HWWLQJ 3UDFWLFDO« !#$%&'()*'+,#-.+&'marco/Teaching/AY2010-2011/DM826/Slides/… · *HWWLQJ 3UDFWLFDO«!"#$%&'()*'+,"#-.+&"' /$.+-,$)012)1030405416 ID2204: Constraint Programming

1030405416 *?110@4/012)7=,&8+&9')A.=-%+$2)*7B2)CBD 10

A.,&H+)L",)A!!J)A+,-.+-,$

!"#$%&'()*+($,'(-"#./001!"#$%&'()*+($,'(-2(34$0/001

&2"#+)#35(263$()7($,'(8

$%322)9(#':,4(:,#(; <)6&=%"$)963$()>64,.($.('<?#.@34A443; %8)--)B"+".2)C,4).0()%(..(42

6&=%"$<--)D,#2.4&$.,4)C,4)2$4"6.9(#':,4(:,#(;--)D,#2.4&$.,4)C,4)$%,#"#+9(#':,4(:,#(;E=,,% 2034(F)9(#':,4(:,#(;--)G(4C,45)$,6;"#+)'&4"#+)$%,#"#+H"4.&3%)963$(I)$,6;E=,,%--)G4"#.)2,%&.",#

J8

array of integer variables stores solution

Page 8: *HWWLQJ 3UDFWLFDO« !#$%&'()*'+,#-.+&'marco/Teaching/AY2010-2011/DM826/Slides/… · *HWWLQJ 3UDFWLFDO«!"#$%&'()*'+,"#-.+&"' /$.+-,$)012)1030405416 ID2204: Constraint Programming

1030405416 *?110@4/012)7=,&8+&9')A.=-%+$2)*7B2)CBD 13

A.,&H+)L",)A!!J)A+,-.+-,$

!"#$%&'()*+($,'(-"#./001!"#$%&'()*+($,'(-2(34$0/001

&2"#+)#35(263$()7($,'(8

$%322)9(#':,4(:,#(; <)6&=%"$)963$()>64,.($.('<?#.@34A443; %8)--)B"+".2)C,4).0()%(..(42

6&=%"$<--)D,#2.4&$.,4)C,4)2$4"6.9(#':,4(:,#(;--)D,#2.4&$.,4)C,4)$%,#"#+9(#':,4(:,#(;E=,,% 2034(F)9(#':,4(:,#(;--)G(4C,45)$,6;"#+)'&4"#+)$%,#"#+H"4.&3%)963$(I)$,6;E=,,%--)G4"#.)2,%&.",#

J8

constructor: initialize variables, post

constraints, define branching

Page 9: *HWWLQJ 3UDFWLFDO« !#$%&'()*'+,#-.+&'marco/Teaching/AY2010-2011/DM826/Slides/… · *HWWLQJ 3UDFWLFDO«!"#$%&'()*'+,"#-.+&"' /$.+-,$)012)1030405416 ID2204: Constraint Programming

1030405416 *?110@4/012)7=,&8+&9')A.=-%+$2)*7B2)CBD 11

A.,&H+)L",)A!!J)A+,-.+-,$

!"#$%&'()*+($,'(-"#./001!"#$%&'()*+($,'(-2(34$0/001

&2"#+)#35(263$()7($,'(8

$%322)9(#':,4(:,#(; <)6&=%"$)963$()>64,.($.('<?#.@34A443; %8)--)B"+".2)C,4).0()%(..(42

6&=%"$<--)D,#2.4&$.,4)C,4)2$4"6.9(#':,4(:,#(;--)D,#2.4&$.,4)C,4)$%,#"#+9(#':,4(:,#(;E=,,% 2034(F)9(#':,4(:,#(;--)G(4C,45)$,6;"#+)'&4"#+)$%,#"#+H"4.&3%)963$(I)$,6;E=,,%--)G4"#.)2,%&.",#

J8

copy constructor and copy function

Page 10: *HWWLQJ 3UDFWLFDO« !#$%&'()*'+,#-.+&'marco/Teaching/AY2010-2011/DM826/Slides/… · *HWWLQJ 3UDFWLFDO«!"#$%&'()*'+,"#-.+&"' /$.+-,$)012)1030405416 ID2204: Constraint Programming

1030405416 *?110@4/012)7=,&8+&9')A.=-%+$2)*7B2)CBD 15

A.,&H+)L",)A!!J)7"'8+,-.+",

9(#':,4(:,#(;EH,"'K)<)%EI.0"2F)LF)MF)NK)>?#.@34 2E%OMPKF)(E%OQPKF)#E%ORPKF)'E%OSPKF

5E%OTPKF),E%OUPKF)4E%OVPKF);E%OWPK8--)G,2.)$,#2.43"#.2

--)G,2.)=43#$0"#+2

J

Page 11: *HWWLQJ 3UDFWLFDO« !#$%&'()*'+,#-.+&'marco/Teaching/AY2010-2011/DM826/Slides/… · *HWWLQJ 3UDFWLFDO«!"#$%&'()*'+,"#-.+&"' /$.+-,$)012)1030405416 ID2204: Constraint Programming

1030405416 *?110@4/012)7=,&8+&9')A.=-%+$2)*7B2)CBD 1@

A.,&H+)L",)A!!J)7"'8+,-.+",

9(#':,4(:,#(;EH,"'K)<)%EI.0"2F)LF)MF)NK)>?#.@34 2E%OMPKF)(E%OQPKF)#E%ORPKF)'E%OSPKF

5E%OTPKF),E%OUPKF)4E%OVPKF);E%OWPK8--)G,2.)$,#2.43"#.2

--)G,2.)=43#$0"#+2

J variables created in this script (space)

Page 12: *HWWLQJ 3UDFWLFDO« !#$%&'()*'+,#-.+&'marco/Teaching/AY2010-2011/DM826/Slides/… · *HWWLQJ 3UDFWLFDO«!"#$%&'()*'+,"#-.+&"' /$.+-,$)012)1030405416 ID2204: Constraint Programming

1030405416 *?110@4/012)7=,&8+&9')A.=-%+$2)*7B2)CBD 16

A.,&H+)L",)A!!J)7"'8+,-.+",

9(#':,4(:,#(;EH,"'K)<)%EI.0"2F)LF)MF)NK)>?#.@34 2E%OMPKF)(E%OQPKF)#E%ORPKF)'E%OSPKF

5E%OTPKF),E%OUPKF)4E%OVPKF);E%OWPK8--)G,2.)$,#2.43"#.2

--)G,2.)=43#$0"#+2

J

8 variables

Page 13: *HWWLQJ 3UDFWLFDO« !#$%&'()*'+,#-.+&'marco/Teaching/AY2010-2011/DM826/Slides/… · *HWWLQJ 3UDFWLFDO«!"#$%&'()*'+,"#-.+&"' /$.+-,$)012)1030405416 ID2204: Constraint Programming

1030405416 *?110@4/012)7=,&8+&9')A.=-%+$2)*7B2)CBD 1E

A.,&H+)L",)A!!J)7"'8+,-.+",

9(#':,4(:,#(;EH,"'K)<)%EI.0"2F)LF)MF)NK)>?#.@34 2E%OMPKF)(E%OQPKF)#E%ORPKF)'E%OSPKF

5E%OTPKF),E%OUPKF)4E%OVPKF);E%OWPK8--)G,2.)$,#2.43"#.2

--)G,2.)=43#$0"#+2

J

take values between 0 and 9

(digits)

Page 14: *HWWLQJ 3UDFWLFDO« !#$%&'()*'+,#-.+&'marco/Teaching/AY2010-2011/DM826/Slides/… · *HWWLQJ 3UDFWLFDO«!"#$%&'()*'+,"#-.+&"' /$.+-,$)012)1030405416 ID2204: Constraint Programming

1030405416 *?110@4/012)7=,&8+&9')A.=-%+$2)*7B2)CBD 1M

A.,&H+)L",)A!!J)7"'8+,-.+",

9(#':,4(:,#(;EH,"'K)<)%EI.0"2F)LF)MF)NK)>?#.@34 2E%OMPKF)(E%OQPKF)#E%ORPKF)'E%OSPKF

5E%OTPKF),E%OUPKF)4E%OVPKF);E%OWPK8--)G,2.)$,#2.43"#.2

--)G,2.)=43#$0"#+2

J refer to variables by their letters

Page 15: *HWWLQJ 3UDFWLFDO« !#$%&'()*'+,#-.+&'marco/Teaching/AY2010-2011/DM826/Slides/… · *HWWLQJ 3UDFWLFDO«!"#$%&'()*'+,"#-.+&"' /$.+-,$)012)1030405416 ID2204: Constraint Programming

1030405416 *?110@4/012)7=,&8+&9')A.=-%+$2)*7B2)CBD 1I

A.,&H+)L",)A!!J)7"'8+,-.+",

9(#':,4(:,#(;EH,"'K)<)%EI.0"2F)LF)MF)NK)>?#.@34 2E%OMPKF)(E%OQPKF)#E%ORPKF)'E%OSPKF

5E%OTPKF),E%OUPKF)4E%OVPKF);E%OWPK8--)X,)%(3'"#+)Y(4,2)E?Z[<)"#.(+(4)4(%3.",#).;6(K4(%EI.0"2F)2F)?Z[\X]F)MK8)4(%EI.0"2F)5F)?Z[\X]F)MK8--)A%%)%(..(42)5&2.).3^()'"2."#$.)'"+".2'"2."#$.EI.0"2F)%K8--)[0()%"#(34)(_&3.",#)5&2.)0,%'

--)`43#$0),H(4).0()%(..(42

J

Page 16: *HWWLQJ 3UDFWLFDO« !#$%&'()*'+,#-.+&'marco/Teaching/AY2010-2011/DM826/Slides/… · *HWWLQJ 3UDFWLFDO«!"#$%&'()*'+,"#-.+&"' /$.+-,$)012)1030405416 ID2204: Constraint Programming

1030405416 *?110@4/012)7=,&8+&9')A.=-%+$2)*7B2)CBD 1K

:"8+&'()7"'8+,9&'+8

Defined in namespace 7($,'(

Check documentation for available constraints

Take script reference as first argumentwhere is the propagator for the constraint to be posted!script is a subclass of Space (computation space)

Page 17: *HWWLQJ 3UDFWLFDO« !#$%&'()*'+,#-.+&'marco/Teaching/AY2010-2011/DM826/Slides/… · *HWWLQJ 3UDFWLFDO«!"#$%&'()*'+,"#-.+&"' /$.+-,$)012)1030405416 ID2204: Constraint Programming

1030405416 *?110@4/012)7=,&8+&9')A.=-%+$2)*7B2)CBD 50

/&'$9,)NO-9+&"'8)9'#)/&'$9,)7"'8+,9&'+8

Equations of the formc1 x1 cn xn = dinteger constants: ci and dinteger variables: xi

In Gecode specified by arraysintegers (?#.A4+2K civariables (?#.@34A443;F)?#.@34A4+2K xi

Not only equations?Z[\a]F)?Z[\X]F)?Z[\baF)?Z[\7ZF)?Z[\b]F)?Z[\7]equality, disequality, inequality (less, greater, less or equal, greater or equal)

Page 18: *HWWLQJ 3UDFWLFDO« !#$%&'()*'+,#-.+&'marco/Teaching/AY2010-2011/DM826/Slides/… · *HWWLQJ 3UDFWLFDO«!"#$%&'()*'+,"#-.+&"' /$.+-,$)012)1030405416 ID2204: Constraint Programming

1030405416 *?110@4/012)7=,&8+&9')A.=-%+$2)*7B2)CBD 53

A.,&H+)L",)A!!J)7"'8+,-.+",

9(#':,4(:,#(;EH,"'K)<)%EI.0"2F)LF)MF)NK)>

--)[0()%"#(34)(_&3.",#)5&2.)0,%'?#.A4+2 $ETcTcUK8)?#.@34A4+2 dETcTcUK8$OMPeQMMM8)$OQPeQMM8)$ORPeQM8)$OSPeQ8dOMPe28))))dOQPe(8)))dORPe#8))dOSPe'8$OTPeQMMM8)$OUPeQMM8)$OVPeQM8)$OWPeQ8dOTPe58))))dOUPe,8)))dOVPe48))dOWPe(8$OLPefQMMMM8)$ONPefQMMM8)$OQMPefQMM8)$OQQPefQM8)$OQRPefQ8dOLPe58))))))dONPe,8)))))dOQMPe#8))))dOQQPe(8)))dOQRPe;8%"#(34EI.0"2F)$F)dF)?Z[\a]F)MK8--)`43#$0),H(4).0()%(..(42

J

Page 19: *HWWLQJ 3UDFWLFDO« !#$%&'()*'+,#-.+&'marco/Teaching/AY2010-2011/DM826/Slides/… · *HWWLQJ 3UDFWLFDO«!"#$%&'()*'+,"#-.+&"' /$.+-,$)012)1030405416 ID2204: Constraint Programming

1030405416 *?110@4/012)7=,&8+&9')A.=-%+$2)*7B2)CBD 51

/&'$9,)NPH,$88&"'8

Other options for posting linear constraints are available: minimodeling support

linear expressionsBoolean expressionsmatrix classes

See the examples that come with Gecode

Page 20: *HWWLQJ 3UDFWLFDO« !#$%&'()*'+,#-.+&'marco/Teaching/AY2010-2011/DM826/Slides/… · *HWWLQJ 3UDFWLFDO«!"#$%&'()*'+,"#-.+&"' /$.+-,$)012)1030405416 ID2204: Constraint Programming

1030405416 *?110@4/012)7=,&8+&9')A.=-%+$2)*7B2)CBD 55

A.,&H+)L",)A!!J)7"'8+,-.+",

!"#$%&'()*+($,'(-5"#"5,'(%/001

9(#':,4(:,#(;EH,"'K)<)%EI.0"2F)LF)MF)NK)>

--)[0()%"#(34)(_&3.",#)5&2.)0,%'6,2.EI.0"2F)))))))))))))QMMMI2)c)QMMI()c)QMI#)c)'

c)QMMMI5)c)QMMI,)c)QMI4)c)(ee)QMMMMI5)c)QMMMI,)c)QMMI#)c)QMI()c);K8

--)`43#$0),H(4).0()%(..(42

J

Page 21: *HWWLQJ 3UDFWLFDO« !#$%&'()*'+,#-.+&'marco/Teaching/AY2010-2011/DM826/Slides/… · *HWWLQJ 3UDFWLFDO«!"#$%&'()*'+,"#-.+&"' /$.+-,$)012)1030405416 ID2204: Constraint Programming

1030405416 *?110@4/012)7=,&8+&9')A.=-%+$2)*7B2)CBD 5@

A.,&H+)L",)A!!J)7"'8+,-.+",

9(#':,4(:,#(;EH,"'K)<)%EI.0"2F)LF)MF)NK)>

--)`43#$0),H(4).0()%(..(42=43#$0EI.0"2F)%F)?X[\@AZ\9?ga\:?XF)?X[\@Ab\:?XK8

J

Page 22: *HWWLQJ 3UDFWLFDO« !#$%&'()*'+,#-.+&'marco/Teaching/AY2010-2011/DM826/Slides/… · *HWWLQJ 3UDFWLFDO«!"#$%&'()*'+,"#-.+&"' /$.+-,$)012)1030405416 ID2204: Constraint Programming

1030405416 *?110@4/012)7=,&8+&9')A.=-%+$2)*7B2)CBD 56

Q,9'.=&'(

Which variable to choosegiven order ?X[\@AZ\XhXasmallest size ?X[\@AZ\9?ga\:?Xsmallest minimum ?X[\@AZ\:?X\:?X

How to branch: which value to choosetry smallest value ?X[\@Ab\:?Xsplit (lower first) ?X[\@Ab\9Gb?[\:?X

Page 23: *HWWLQJ 3UDFWLFDO« !#$%&'()*'+,#-.+&'marco/Teaching/AY2010-2011/DM826/Slides/… · *HWWLQJ 3UDFWLFDO«!"#$%&'()*'+,"#-.+&"' /$.+-,$)012)1030405416 ID2204: Constraint Programming

1030405416 *?110@4/012)7=,&8+&9')A.=-%+$2)*7B2)CBD 5E

A.,&H+)L",)A!!J)7"HR&'(

--)D,#2.4&$.,4)C,4)$%,#"#+9(#':,4(:,#(;E=,,% 2034(F)9(#':,4(:,#(;i)2K)<)963$(E2034(F)2K)>

%/&6'3.(EI.0"2F)2034(F)2/%K8J--)G(4C,45)$,6;"#+)'&4"#+)$%,#"#+H"4.&3%)963$(I)$,6;E=,,% 2034(K)>

4(.&4#)#(j)9(#':,4(:,#(;E2034(FI.0"2K8J

Page 24: *HWWLQJ 3UDFWLFDO« !#$%&'()*'+,#-.+&'marco/Teaching/AY2010-2011/DM826/Slides/… · *HWWLQJ 3UDFWLFDO«!"#$%&'()*'+,"#-.+&"' /$.+-,$)012)1030405416 ID2204: Constraint Programming

1030405416 *?110@4/012)7=,&8+&9')A.=-%+$2)*7B2)CBD 5M

A.,&H+)L",)A!!J)7"HR&'(

--)D,#2.4&$.,4)C,4)$%,#"#+9(#':,4(:,#(;E=,,% 2034(F)9(#':,4(:,#(;i)2K)<)963$(E2034(F)2K)>

%/&6'3.(EI.0"2F)2034(F)2/%K8J--)G(4C,45)$,6;"#+)'&4"#+)$%,#"#+H"4.&3%)963$(I)$,6;E=,,% 2034(K)>

4(.&4#)#(j)9(#':,4(:,#(;E2034(FI.0"2K8J

update all variables needed

for solution

Page 25: *HWWLQJ 3UDFWLFDO« !#$%&'()*'+,#-.+&'marco/Teaching/AY2010-2011/DM826/Slides/… · *HWWLQJ 3UDFWLFDO«!"#$%&'()*'+,"#-.+&"' /$.+-,$)012)1030405416 ID2204: Constraint Programming

1030405416 *?110@4/012)7=,&8+&9')A.=-%+$2)*7B2)CBD 5I

A.,&H+)L",)A!!J)7"HR&'(

--)D,#2.4&$.,4)C,4)$%,#"#+9(#':,4(:,#(;E=,,% 2034(F)9(#':,4(:,#(;i)2K)<)963$(E2034(F)2K)>

%/&6'3.(EI.0"2F)2034(F)2/%K8J--)G(4C,45)$,6;"#+)'&4"#+)$%,#"#+H"4.&3%)963$(I)$,6;E=,,% 2034(K)>

4(.&4#)#(j)9(#':,4(:,#(;E2034(FI.0"2K8J

create a new copy of the space

during cloning

Page 26: *HWWLQJ 3UDFWLFDO« !#$%&'()*'+,#-.+&'marco/Teaching/AY2010-2011/DM826/Slides/… · *HWWLQJ 3UDFWLFDO«!"#$%&'()*'+,"#-.+&"' /$.+-,$)012)1030405416 ID2204: Constraint Programming

1030405416 *?110@4/012)7=,&8+&9')A.=-%+$2)*7B2)CBD 5K

7"HR&'(

Required during explorationbefore starting to guess: make copywhen guess is wrong: use copydiscussed later

Copy constructor and copy function neededcopy constructor is specific to scriptupdates (copies) variables in particular

Page 27: *HWWLQJ 3UDFWLFDO« !#$%&'()*'+,#-.+&'marco/Teaching/AY2010-2011/DM826/Slides/… · *HWWLQJ 3UDFWLFDO«!"#$%&'()*'+,"#-.+&"' /$.+-,$)012)1030405416 ID2204: Constraint Programming

1030405416 *?110@4/012)7=,&8+&9')A.=-%+$2)*7B2)CBD @0

7"HR)7"'8+,-.+",)S'#)7"HR)T-'.+&"'

Always same structure

Important!must update the variables of a script!

Page 28: *HWWLQJ 3UDFWLFDO« !#$%&'()*'+,#-.+&'marco/Teaching/AY2010-2011/DM826/Slides/… · *HWWLQJ 3UDFWLFDO«!"#$%&'()*'+,"#-.+&"' /$.+-,$)012)1030405416 ID2204: Constraint Programming

1030405416 *?110@4/012)7=,&8+&9')A.=-%+$2)*7B2)CBD @3

A.,&H+)L",)A!!J):,&'+)T-'.+&"'

--)G4"#.)2,%&.",#H,"')64"#.EH,"'K)>

2.'<<$,&. **)%)**)2.'<<(#'%8J

Page 29: *HWWLQJ 3UDFWLFDO« !#$%&'()*'+,#-.+&'marco/Teaching/AY2010-2011/DM826/Slides/… · *HWWLQJ 3UDFWLFDO«!"#$%&'()*'+,"#-.+&"' /$.+-,$)012)1030405416 ID2204: Constraint Programming

1030405416 *?110@4/012)7=,&8+&9')A.=-%+$2)*7B2)CBD @1

A-;;9,RJ)A.,&H+

Variablesdeclare as membersinitialize in constructorupdate in copy constructor

Posting constraintsCreate branchingProvide copy constructor and copy function

Page 30: *HWWLQJ 3UDFWLFDO« !#$%&'()*'+,#-.+&'marco/Teaching/AY2010-2011/DM826/Slides/… · *HWWLQJ 3UDFWLFDO«!"#$%&'()*'+,"#-.+&"' /$.+-,$)012)1030405416 ID2204: Constraint Programming

A"%G&'()A.,&H+8

Page 31: *HWWLQJ 3UDFWLFDO« !#$%&'()*'+,#-.+&'marco/Teaching/AY2010-2011/DM826/Slides/… · *HWWLQJ 3UDFWLFDO«!"#$%&'()*'+,"#-.+&"' /$.+-,$)012)1030405416 ID2204: Constraint Programming

1030405416 *?110@4/012)7=,&8+&9')A.=-%+$2)*7B2)CBD @@

SG9&%9U%$)A$9,.=)N'(&'$8

Returning solutions one by one for scriptBk9 depth-first search`A` branch-and-boundZ(2.34.F)bB9

Interactive, visual search7"2.

Page 32: *HWWLQJ 3UDFWLFDO« !#$%&'()*'+,#-.+&'marco/Teaching/AY2010-2011/DM826/Slides/… · *HWWLQJ 3UDFWLFDO«!"#$%&'()*'+,"#-.+&"' /$.+-,$)012)1030405416 ID2204: Constraint Programming

1030405416 *?110@4/012)7=,&8+&9')A.=-%+$2)*7B2)CBD @6

!9&')!$+="#J)T&,8+)A"%-+&"'

"#. 53"#E"#. 34+$F)$034I)34+HOPK)>9(#':,4(:,#(;I)5)e)#(j)9(#':,4(:,#(;8Bk9*9(#':,4(:,#(;1)(E5K8'(%(.()58"C)E9(#':,4(:,#(;I)2)e)(/#(d.EKK)>

2f164"#.EK8)'(%(.()28J4(.&4#)M8

J

Page 33: *HWWLQJ 3UDFWLFDO« !#$%&'()*'+,#-.+&'marco/Teaching/AY2010-2011/DM826/Slides/… · *HWWLQJ 3UDFWLFDO«!"#$%&'()*'+,"#-.+&"' /$.+-,$)012)1030405416 ID2204: Constraint Programming

1030405416 *?110@4/012)7=,&8+&9')A.=-%+$2)*7B2)CBD @E

!9&')!$+="#J)T&,8+)A"%-+&"'

"#. 53"#E"#. 34+$F)$034I)34+HOPK)>9(#':,4(:,#(;I)5)e)#(j)9(#':,4(:,#(;8Bk9*9(#':,4(:,#(;1)(E5K8'(%(.()58"C)E9(#':,4(:,#(;I)2)e)(/#(d.EKK)>

2f164"#.EK8)'(%(.()28J4(.&4#)M8

J

create root space for search

Page 34: *HWWLQJ 3UDFWLFDO« !#$%&'()*'+,#-.+&'marco/Teaching/AY2010-2011/DM826/Slides/… · *HWWLQJ 3UDFWLFDO«!"#$%&'()*'+,"#-.+&"' /$.+-,$)012)1030405416 ID2204: Constraint Programming

1030405416 *?110@4/012)7=,&8+&9')A.=-%+$2)*7B2)CBD @M

!9&')!$+="#J)T&,8+)A"%-+&"'

"#. 53"#E"#. 34+$F)$034I)34+HOPK)>9(#':,4(:,#(;I)5)e)#(j)9(#':,4(:,#(;8Bk9*9(#':,4(:,#(;1)(E5K8'(%(.()58"C)E9(#':,4(:,#(;I)2)e)(/#(d.EKK)>

2f164"#.EK8)'(%(.()28J4(.&4#)M8

J

create search engine (takes

clone of 5)

Page 35: *HWWLQJ 3UDFWLFDO« !#$%&'()*'+,#-.+&'marco/Teaching/AY2010-2011/DM826/Slides/… · *HWWLQJ 3UDFWLFDO«!"#$%&'()*'+,"#-.+&"' /$.+-,$)012)1030405416 ID2204: Constraint Programming

1030405416 *?110@4/012)7=,&8+&9')A.=-%+$2)*7B2)CBD @I

!9&')!$+="#J)T&,8+)A"%-+&"'

"#. 53"#E"#. 34+$F)$034I)34+HOPK)>9(#':,4(:,#(;I)5)e)#(j)9(#':,4(:,#(;8Bk9*9(#':,4(:,#(;1)(E5K8'(%(.()58"C)E9(#':,4(:,#(;I)2)e)(/#(d.EKK)>

2f164"#.EK8)'(%(.()28J4(.&4#)M8

J

root space not any longer

needed

Page 36: *HWWLQJ 3UDFWLFDO« !#$%&'()*'+,#-.+&'marco/Teaching/AY2010-2011/DM826/Slides/… · *HWWLQJ 3UDFWLFDO«!"#$%&'()*'+,"#-.+&"' /$.+-,$)012)1030405416 ID2204: Constraint Programming

1030405416 *?110@4/012)7=,&8+&9')A.=-%+$2)*7B2)CBD @K

!9&')!$+="#J)T&,8+)A"%-+&"'

"#. 53"#E"#. 34+$F)$034I)34+HOPK)>9(#':,4(:,#(;I)5)e)#(j)9(#':,4(:,#(;8Bk9*9(#':,4(:,#(;1)(E5K8'(%(.()58"C)E9(#':,4(:,#(;I)2)e)(/#(d.EKK)>

2f164"#.EK8)'(%(.()28J4(.&4#)M8

J

search first solution and

print it

Page 37: *HWWLQJ 3UDFWLFDO« !#$%&'()*'+,#-.+&'marco/Teaching/AY2010-2011/DM826/Slides/… · *HWWLQJ 3UDFWLFDO«!"#$%&'()*'+,"#-.+&"' /$.+-,$)012)1030405416 ID2204: Constraint Programming

1030405416 *?110@4/012)7=,&8+&9')A.=-%+$2)*7B2)CBD 60

!9&')!$+="#J)S%%)A"%-+&"'8

"#. 53"#E"#. 34+$F)$034I)34+HOPK)>9(#':,4(:,#(;I)5)e)#(j)9(#':,4(:,#(;8Bk9*9(#':,4(:,#(;1)(E5K8'(%(.()58j0"%()E9(#':,4(:,#(;I)2)e)(/#(d.EKK)>

2f164"#.EK8)'(%(.()28J4(.&4#)M8

J

Page 38: *HWWLQJ 3UDFWLFDO« !#$%&'()*'+,#-.+&'marco/Teaching/AY2010-2011/DM826/Slides/… · *HWWLQJ 3UDFWLFDO«!"#$%&'()*'+,"#-.+&"' /$.+-,$)012)1030405416 ID2204: Constraint Programming

1030405416 *?110@4/012)7=,&8+&9')A.=-%+$2)*7B2)CBD 63

>$."#$)>&8+

A graphical tool for exploring the search treeexplore tree step by steptree can be scaleddouble-clicking node prints information: inspectionsearch for next solution, all solutions

Best to play a little bit by yourselfhide and unhide failed subtrees

Page 39: *HWWLQJ 3UDFWLFDO« !#$%&'()*'+,#-.+&'marco/Teaching/AY2010-2011/DM826/Slides/… · *HWWLQJ 3UDFWLFDO«!"#$%&'()*'+,"#-.+&"' /$.+-,$)012)1030405416 ID2204: Constraint Programming

1030405416 *?110@4/012)7=,&8+&9')A.=-%+$2)*7B2)CBD 61

!9&')T-'.+&"'J)>&8+

!"#$%&'()*+($,'(-+"2./001

"#. 53"#E"#. 34+$F)$034I)34+HOPK)>9(#':,4(:,#(;I)5)e)#(j)9(#':,4(:,#(;87"2.<<'C2E5K8'(%(.()584(.&4#)M8

J

Page 40: *HWWLQJ 3UDFWLFDO« !#$%&'()*'+,#-.+&'marco/Teaching/AY2010-2011/DM826/Slides/… · *HWWLQJ 3UDFWLFDO«!"#$%&'()*'+,"#-.+&"' /$.+-,$)012)1030405416 ID2204: Constraint Programming

>&8+)A.,$$'8="+

1030405416 *?110@4/012)7=,&8+&9')A.=-%+$2)*7B2)CBD 65

Page 41: *HWWLQJ 3UDFWLFDO« !#$%&'()*'+,#-.+&'marco/Teaching/AY2010-2011/DM826/Slides/… · *HWWLQJ 3UDFWLFDO«!"#$%&'()*'+,"#-.+&"' /$.+-,$)012)1030405416 ID2204: Constraint Programming

Q$8+)A"%-+&"')A$9,.=

Page 42: *HWWLQJ 3UDFWLFDO« !#$%&'()*'+,#-.+&'marco/Teaching/AY2010-2011/DM826/Slides/… · *HWWLQJ 3UDFWLFDO«!"#$%&'()*'+,"#-.+&"' /$.+-,$)012)1030405416 ID2204: Constraint Programming

1030405416 *?110@4/012)7=,&8+&9')A.=-%+$2)*7B2)CBD 66

V$;&'#$,J)A!!WW

Find distinct digits for letters, such that

and +,-./ maximal

0.-1

2 +,03

4 +,-./

Page 43: *HWWLQJ 3UDFWLFDO« !#$%&'()*'+,#-.+&'marco/Teaching/AY2010-2011/DM826/Slides/… · *HWWLQJ 3UDFWLFDO«!"#$%&'()*'+,"#-.+&"' /$.+-,$)012)1030405416 ID2204: Constraint Programming

1030405416 *?110@4/012)7=,&8+&9')A.=-%+$2)*7B2)CBD 6E

A.,&H+)L",)A!!WW

Similar, please try it yourself at homeIn the following, referred to by 9(#':,2.:,#(;

Page 44: *HWWLQJ 3UDFWLFDO« !#$%&'()*'+,#-.+&'marco/Teaching/AY2010-2011/DM826/Slides/… · *HWWLQJ 3UDFWLFDO«!"#$%&'()*'+,"#-.+&"' /$.+-,$)012)1030405416 ID2204: Constraint Programming

1030405416 *?110@4/012)7=,&8+&9')A.=-%+$2)*7B2)CBD 6M

A"%G&'()A!!WWJ)F,#$,

Principlefor each solution found, constrain remaining search for better solution

Implemented as additional methodH"4.&3%)H,"')$,#2.43"#E$,#2.)963$(i)=K)>

J

Argument = refers to so far best solutiononly take values from =never mix variables!

Invoked on object to be constrained

Page 45: *HWWLQJ 3UDFWLFDO« !#$%&'()*'+,#-.+&'marco/Teaching/AY2010-2011/DM826/Slides/… · *HWWLQJ 3UDFWLFDO«!"#$%&'()*'+,"#-.+&"' /$.+-,$)012)1030405416 ID2204: Constraint Programming

1030405416 *?110@4/012)7=,&8+&9')A.=-%+$2)*7B2)CBD 6I

F,#$,)L",)A!!WW

H"4.&3%)H,"')$,#2.43"#E$,#2.)963$(i)\=K)>$,#2.)9(#':,2.:,#(;i)=)e)

2.3."$\$32.*$,#2.)9(#':,2.:,#(;i1E\=K8

?#.@34 (E%OQPKF)#E%ORPKF)5E%OTPKF),E%OUPKF);E%OLPK8

?#.@34 =\(E=/%OQPKF)=\#E=/%ORPKF)=\5E=/%OTPKF)=\,E=/%OUPKF)=\;E=/%OLPK8

"#. 5,#(;)e)EQMMMMI=\5/H3%EKcQMMMI=\,/H3%EKcQMMI=\#/H3%EKcQMI=\(/H3%EKc=\;/H3%EKK8

6,2.EI.0"2F)QMMMMI5cQMMMI,cQMMI#cQMI(c; 1)5,#(;K8J

Page 46: *HWWLQJ 3UDFWLFDO« !#$%&'()*'+,#-.+&'marco/Teaching/AY2010-2011/DM826/Slides/… · *HWWLQJ 3UDFWLFDO«!"#$%&'()*'+,"#-.+&"' /$.+-,$)012)1030405416 ID2204: Constraint Programming

1030405416 *?110@4/012)7=,&8+&9')A.=-%+$2)*7B2)CBD 6K

!9&')!$+="#J)S%%)A"%-+&"'8

"#. 53"#E"#. 34+$F)$034I)34+HOPK)>9(#':,2.:,#(;I)5)e)#(j)9(#':,2.:,#(;8`A`*9(#':,2.:,#(;1)(E5K8'(%(.()58j0"%()E9(#':,2.:,#(;I)2)e)(/#(d.EKK)>

2f164"#.EK8)'(%(.()28J4(.&4#)M8

J

Page 47: *HWWLQJ 3UDFWLFDO« !#$%&'()*'+,#-.+&'marco/Teaching/AY2010-2011/DM826/Slides/… · *HWWLQJ 3UDFWLFDO«!"#$%&'()*'+,"#-.+&"' /$.+-,$)012)1030405416 ID2204: Constraint Programming

1030405416 *?110@4/012)7=,&8+&9')A.=-%+$2)*7B2)CBD E0

!9&')T-'.+&"'J)>&8+

!"#$%&'()*+($,'(-+"2./001

"#. 53"#E"#. 34+$F)$034I)34+HOPK)>9(#':,2.:,#(;I)5)e)#(j)9(#':,2.:,#(;87"2.<<=3=E5K8'(%(.()584(.&4#)M8

J

Page 48: *HWWLQJ 3UDFWLFDO« !#$%&'()*'+,#-.+&'marco/Teaching/AY2010-2011/DM826/Slides/… · *HWWLQJ 3UDFWLFDO«!"#$%&'()*'+,"#-.+&"' /$.+-,$)012)1030405416 ID2204: Constraint Programming

1030405416 *?110@4/012)7=,&8+&9')A.=-%+$2)*7B2)CBD E3

A-;;9,RJ)A"%G&'(

Result-only search enginesBk9F)`A`

Interactive search engine7"2.

Best solution search uses constrain-method for posting constraintSearch engine independent of script and constrain-method