cs774 (Prasad)L12CLP1 Constraint Logic Programming
Ordinary Logic Programming ?- p(a,X) = p(Y,b). Y=a X=b ?- p(X,X) = p(a,b). *fails* Unification solves equality constraints (under unique name hypothesis) cs774 (Prasad)L12CLP2
Constraint Logic Programming ?- X + 2 = 5. *fails in ordinary LP* In CLP, succeeds with: X = 3 Generalizes to constraint satisfaction problem, interpreting “+” as the arithmetic addition operator cs774 (Prasad)L12CLP3
Constraint Satisfaction Problem Given a set of variables, their types (domains of values and applicable operations), and constraints on them, determine assignment of values to variables so that the constraints are satisfied. Benefit: Embodiment of Declarative Programming Challenge: Designing tractable constraint languages cs774 (Prasad)L12CLP4
Applications Scheduling and Resource Management in production and transportation teachers and courses to classes rooms machines to jobs crews to planes Linear and Non-linear programming problems Mortgage Calculations cs774 (Prasad)L12CLP5
CLP : Motivation fib(0,1). fib(1,1). fib(N,X) :- N1 is N-1, N2 is N-2, fib(N1,X1), fib(N2,X2), X is X1 + X2. ?- fib(4,5). Succeeds. ?- fib(X,5). Fails. Treatment of arithmetic expression looks unnatural, as it does not smoothly integrate with the logic programming paradigm (e.g., invertibility destroyed) cs774 (Prasad)L12CLP6
Introducing the Theory of Arithmetic fib(0,1). fib(1,1). fib(N, X1 + X2) :- N > 1, fib(N - 1,X1), fib(N - 2,X2). Interpret arithmetic operators in the domain of reals –improves readability –improves invertibility ?- fib(N, 13). N = 6. ?- fib(N, X), 10 =< X, X =< 25. N = 6. X = 13. N = 7. X = 21. cs774 (Prasad)L12CLP7
Solving Simultaneous Equations ?- X + Y = 12, 2*X + 4*Y = 34. X = 7. Y = 5. Complex Multiplication zmul(c(R1,I1),c(R2,I2),c(R3,I3)) :- R3 = R1 * R2 - I1 * I2, I3 = R1 * I2 + R2 * I1. ?- zmul(c(2,2),Ans,c(0,16)) Unique solution: Ans = C(4,4) ?- zmul(A,B,c(0,16)) *Set of constraints* Infinite solution: *Set of constraints* cs774 (Prasad)L12CLP8
Prolog vs CLP(R) ? = X + Y. X = 5 Y = 2 ? = X + 3. *fail* Equality constraints over terms ? = X + Y. X = 7 - Y ? = X + 3. X = 4 General constraints over arithmetic expressions; Equality constraints over terms cs774 (Prasad)L12CLP9
Prolog vs CLP(R) Uninterpreted function symbols Unification algorithm Backtrack when terms fail to unify Arithmetic operators + uninterpreted term trees General constraint solvers – E.g., Simplex algorithm for linear constraints Backtrack when constraints violated cs774 (Prasad)L12CLP10
CLP : Linear Programming light_meal(A,M,D) :- appetizer(A,I), main_course(M,J), dessert(D,K), I >= 0, J >= 0, K >= 0, I + J + K <= 12. appetizer(soup,1). appetizer(nachos,6). main_course(sphagetti,3). main_course(alfredo,7). dessert(fruit,2). dessert(ice_cream,6). cs774 (Prasad)L12CLP11
?- light_meal(App,Main,Dess). Dess = fruit Main = sphagetti App = soup *** Retry? y Dess = ice_cream Main = sphagetti App = soup *** Retry? y Dess = fruit Main = alfredo App = soup *** Retry? y Dess = fruit Main = sphagetti App = nachos cs774 (Prasad)L12CLP12
CLP : Mortgage Payment Calculator %mortgage(Principal,Time_Months, Interest_Rate,Monthly_Payment, Balance) mortgage(P,0,_,_,P). mortgage(P,1,_,_,B) :- B = P * (1 + (I / 1200)) - MP. mortgage(P, T, I, MP, B) :- mortgage( (P * (1 + I / 1200)) - MP, T – 1, I, MP, B). cs774 (Prasad)L12CLP13
CLP : Mortgage Payment Queries %mortgage(Principal,Time_Months, Interest_Rate,Monthly_Payment, Balance) %Customer: What will be the monthly payment? ?- mortgage(148000,180,8,M,0). M = %Lender: How much loan does one qualify for, given monthly payment limit? ?- mortgage(P,180,8,1200,0). P = cs774 (Prasad)L12CLP14
(cont’d) %mortgage(Principal,Time_Months, Interest_Rate,Monthly_Payment, Balance) %Customer/Lender: What is the remaining balance? ?- mortgage(148000,180,8.375, ,B). B = %Customer: How long will it take to clear the debt? ?- mortgage(148000,L,8.5,1400,0). L = cs774 (Prasad)L12CLP15
(cont’d) %mortgage(Principal,Time_Months, Interest_Rate,Monthly_Payment, Balance) %Customer: What is the contribution to the principal in the first month (in a 15 yr loan at 8 or a 30 yr loan at 8.375)? %Customer: Building equity. ?- mortgage(148000,1,8,1414, CP). CP = 427 ?- mortgage(148000,1,8.375,1124, CP). CP = 92 cs774 (Prasad)L12CLP16
Non-linear constraints : CLP(R) Fails Here %mortgage(Principal,Time_Months, Interest_Rate,Monthly_Payment, Balance) %Customer: What is the maximum interest rate for the given principal and monthly payment? %Customer: Affordability ?- mortgage(148000,180,I,1400,0). *lots of constraints output* cs774 (Prasad)L12CLP17
CLP : Annuity Calculator %annuity(Time_Months, Interest_Rate,Monthly_Payment, Initial_Principal, Total_Value) annuity(0,_,_,IP,IP). annuity(T, I, MP, IP, TV) :- annuity(T-1, I, MP, IP, V), TV = MP + (V * (1 + I / 1200)). cs774 (Prasad)L12CLP18
CLP : Annuity Queries %annuity(Time_Months, Interest_Rate,Monthly_Payment, Initial_Principal, Total_Value) %Customer: What will be the final investment value? ?- annuity(180,5,225,0,FV). FV = %Customer: What is the net gain? ?- annuity(180,5,225,0,225*180 + G). G = cs774 (Prasad)L12CLP19
CLP : Limitations ?- (Cows + Pigs + Sheeps) = 100, (10*Cows + 3*Pigs + Sheeps/2) = 100, Cows >= 1, Pigs >= 1, Sheeps >= 1. Pigs = *Sheeps Cows = *Sheeps Sheeps <= 94 * Lots of constraints * CLP(R) is unable to determine the unique solution: Cows = 5, Pigs = 1, Sheeps = 94 cs774 (Prasad)L12CLP20