1 / 17

170 likes | 415 Views

Constraint Logic Programming (CLP). Luis Tari March 10, 2005. Why CLP?. “Generate-and-test” approach is a common methodology for logic programming. Generate possible solutions Test and eliminate non-solutions Disadvantages of “generate-and-test” approach:

Download Presentation
## Constraint Logic Programming (CLP)

**An Image/Link below is provided (as is) to download presentation**
Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.
Content is provided to you AS IS for your information and personal use only.
Download presentation by click this link.
While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.
During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

**Constraint Logic Programming (CLP)**Luis Tari March 10, 2005**Why CLP?**• “Generate-and-test” approach is a common methodology for logic programming. • Generate possible solutions • Test and eliminate non-solutions • Disadvantages of “generate-and-test” approach: • Passive use of constraints to test potential values • Inefficient for combinatorial search problems • CLP languages use the global search paradigm. • Actively pruning the search space • Recursively dividing a problem into subproblems until its subproblems are simple enough to be solved**Why CLP and AnsProlog?**• AnsProlog is inefficient in dealing with numerical values, due to • Implementation of the current solvers • “generate-and-test” paradigm • Goal of CLP is to pick numerical values from pre-defined domains for certain variables so that the given constraints on the variables are all satisfied. • Idea: use CLP to define and reason with numerical constraints and assignments**List Notation in Prolog**• Example of list notation • [eggs, tea, milk, steak, spinach, toothpaste] • Head of a list • First element of a list • eggs • Tail of a list • The remaining list apart from the head • [tea, milk, steak, spinach, toothpaste] • [H|T] • H = eggs • T = [tea, milk, steak, spinach, toothpaste]**An example of List**• Use the predicate append to define appending two lists into one. append([X|XL],YL,[X|ZL]) :- append(XL,YL,ZL). append([],YL,YL). ?- append([1],[2],X). X = [1,2]**CLP with Sicstus Prolog**• To invoke the CLP library: | ?- :- use_module(library(clpfd)). • A constraint is called as if it is a Prolog predicate. | ?- X in 1..5, Y in 2..8, X+Y #= T. X in 1..5, Y in 2..8, T in 3..13 • The above constraint says that given X,Y, assign values for T so that the constraint is satisfiable. | ?- X in 1..5, T in 3..13, X+Y #= T. X in 1..5, T in 3..13, Y in -2..12**Typical Steps of a CLP Program**• Step 1. Declare the domains of the variables • Step 2. Post the problem constraints • Step 3. Look for a feasible solution via backtrack search, or look for an optimal solution via branch-and-bound search**Constraint Satisfaction Problem**• Let’s consider the Send More Money puzzle. • The variables are the letters S, E, N, D, M, O, R and Y. • Each letter represents a digit between 0 and 9. • Assign a value to each digit, such that SEND + MORE equals MONEY.**Send More Money Exampleusing CLP**| ?- mm([S,E,N,D,M,O,R,Y], []). D = 7, E = 5, M = 1, N = 6, O = 0, R = 8, S = 9, Y = 2**Reified Constraints**• To reflect its truth value into a 0/1 variable B, so that: • The constraint is posted if B is set to 1 • The negation of the constraint is posted if B is set to 0 • B is set to 1 if the constraint becomes entailed • B is set to 0 if the constraint becomes disentailed. • A reified constraint is written as: | ?- Constraint #<=> B.**An example using reified constraint**• Define exactly(X,L,N) so that it is true if X occurs exactly N times in the list L. • If the constraint “element X is the same as element Y” becomes entailed, then assign B to be 1 else 0.**Other Constraints**• Arithmetic constraints • | ?- X in 1..2, Y in 3..5, X#=<Y #<=> B. B = 1, X in 1..2, Y in 3..5 • If the constraint “value in X is <= value in Y” becomes entailed, then assign B to be 1 else 0. • Propositional constraints • X #= 4 #\/ Y #= 6 • Disjunction of the two equality constraints • Many more….**Defining Search Variants**• labeling(:Options, +Variables) • Where Variables is a list of domain variables or integers and Options is a list of search options. • | ?- constraints(Variables), labeling([], Variables). %same as [leftmost,step,up,all] • leftmost: the leftmost variable is selected • step: makes a binary choice between X#=B and X#\=B, where B is the lower or upper bound of X. • up: the domain is explored in ascending order • all: all solutions are enumerated by backtracking**An Example - Cumulative Scheduling**• There are 7 tasks where each task has a fixed duration and a fixed amount of used resource. • Goal: find a schedule that minimizes the completion time for the schedule while not exceeding the capacity 13 of the resource.**Constraining the tasks such that for each task j has a start**time Ssj, a duration Dsj, and a resource Rsj, so that the total resource consumption does not exceed 13 at any time. Find an assignment that minimizes the domain variable of Vars Cumulative Scheduling (2) :- use_module(library(clpfd)). :- use_module(library(lists), [append/3]). schedule(Ss, End) :- length(Ss, 7), Ds=[16,6,13,7,5,18,4], Rs=[2,9,3,7,10,1,11], domain(Ss, 1, 30), domain([End], 1, 50), after(Ss, Ds, End), cumulative(Ss, Ds, Rs, 13), append(Ss, [End], Vars), labeling([minimize(End)], Vars). after([], [], _). after([S|Ss], [D|Ds], E) :- E #>= S+D, after(Ss, Ds, E).**Cumulative Scheduling (3)**• Ds = [16,6,13,7, 5,18,4] • Rs = [2 ,9, 3,7,10, 1,11] • Capacity = 13 | ?- schedule(Ss, End). Ss = [1,17,10,10,5,5,1], End = 23**References**• Sicstus Prolog Manual Version 3.12, Chapter 34 on Constraint Logic Programming over Finite Domains • P. Van Hentenryck, H. Simonis, M. Dincbas, Constraint satisfaction using constraint logic programming, Journal of Artif. Intell., 58(1-3), pages 113--159, 1992.

More Related