Skip to main content
โšก Calmops

Constraint Logic Programming: Combining Logic and Constraints

Introduction

Constraint Logic Programming (CLP) combines logic programming with constraint solving. Rather than just using unification, CLP systems maintain constraints on variables and solve them efficiently. This article explores CLP fundamentals, domains, and applications.

CLP Basics

Concept

Idea: Extend logic programming with constraint domains

Domains: Finite domains, real numbers, booleans

Benefit: Powerful problem-solving combining logic and constraints

Example

% Traditional Prolog
append([], L, L).
append([H|T1], L2, [H|T3]) :- append(T1, L2, T3).

% CLP(FD) - Constraint Logic Programming over Finite Domains
?- X #> 5, X #< 10, X #= 7.
X = 7.

CLP Domains

CLP(FD) - Finite Domains

Domain: Integers with finite bounds

Constraints: Arithmetic, logical

Example:

?- X #> 0, X #< 10, X #= Y + 2, Y #= 3.
X = 5, Y = 3.

CLP(R) - Real Numbers

Domain: Real numbers

Constraints: Linear arithmetic

Example:

?- X > 0, X < 10, X = Y + 2, Y = 3.5.
X = 5.5, Y = 3.5.

CLP(B) - Booleans

Domain: Boolean values

Constraints: Boolean operations

Example:

?- X #\/ Y, X #/\ Z, Z #= 0.
X = 1, Y = 0, Z = 0.

Constraint Propagation

Arc Consistency

Idea: Maintain consistency between variables

Benefit: Reduces search space

Process:

  1. For each constraint
  2. Remove values inconsistent with constraint
  3. Repeat until fixed point

Example

?- X #> 0, X #< 10, X #= Y + 2, Y #> 3.
Propagation:
  X > 0, X < 10 โ†’ X โˆˆ {1..9}
  Y > 3 โ†’ Y โˆˆ {4..}
  X = Y + 2 โ†’ X โˆˆ {6..9}, Y โˆˆ {4..7}

CLP Applications

Scheduling

Application: Schedule tasks respecting constraints

Example:

% Schedule tasks with duration and precedence
task(t1, 2).  % duration 2
task(t2, 3).  % duration 3
before(t1, t2).  % t1 before t2

% Find schedule
schedule(T1_start, T2_start) :-
  task(t1, D1), task(t2, D2),
  T1_start #>= 0, T2_start #>= 0,
  T2_start #>= T1_start + D1,
  T1_start + D1 #=< 10,
  T2_start + D2 #=< 10.

Planning

Application: Generate plans achieving goals

Example:

% Robot planning with constraints
move(robot, X, Y, T) :-
  location(X), location(Y),
  distance(X, Y, D),
  T #>= D.  % Time >= distance

Configuration

Application: Configure systems respecting constraints

Example:

% Computer configuration
cpu(intel, 2.5).
cpu(amd, 2.0).
ram(8).
ram(16).

config(CPU, RAM, Price) :-
  cpu(CPU, Speed),
  ram(RAM),
  Speed #>= 2.0,
  RAM #>= 8,
  Price #= Speed * 100 + RAM * 50.

CLP Systems

SICStus Prolog

Features: CLP(FD), CLP(R), CLP(B) Strengths: Mature, efficient Applications: Industrial problems

GNU Prolog

Features: CLP(FD) Strengths: Free, good performance Applications: Educational, research

ECLiPSe

Features: Multiple constraint domains Strengths: Flexible, extensible Applications: Research, complex problems

Practical Example: Sudoku

Problem

Task: Fill 9ร—9 grid with digits 1-9 respecting constraints

CLP(FD) Solution

sudoku(Grid) :-
  Grid = [Row1, Row2, ..., Row9],
  
  % Each row has digits 1-9
  maplist(all_different, Grid),
  
  % Each column has digits 1-9
  transpose(Grid, Columns),
  maplist(all_different, Columns),
  
  % Each 3ร—3 box has digits 1-9
  boxes(Grid, Boxes),
  maplist(all_different, Boxes),
  
  % All variables in domain 1-9
  append(Grid, Vars),
  maplist(in(1..9), Vars),
  
  % Solve
  label(Vars).

Glossary

Arc Consistency: Consistency between variable pairs CLP: Constraint Logic Programming Constraint: Restriction on variable values Constraint Domain: Set of possible values Constraint Propagation: Using constraints to reduce domains Finite Domain: Integers with bounds Label: Assign values to variables

Practice Problems

Problem 1: Write CLP(FD) program for N-queens.

Solution:

queens(N, Qs) :-
  length(Qs, N),
  Qs ins 1..N,
  all_different(Qs),
  safe_queens(Qs),
  label(Qs).

safe_queens([]).
safe_queens([Q|Qs]) :-
  safe_queens(Qs, Q, 1),
  safe_queens(Qs).

safe_queens([], _, _).
safe_queens([Q|Qs], Q0, D) :-
  Q0 #\= Q + D,
  Q0 #\= Q - D,
  D1 is D + 1,
  safe_queens(Qs, Q0, D1).

Problem 2: Write CLP(FD) program for graph coloring.

Solution:

color_graph(Colors) :-
  Colors = [C1, C2, C3],
  Colors ins 1..3,
  C1 #\= C2,
  C2 #\= C3,
  C1 #\= C3,
  label(Colors).

Problem 3: Explain advantages of CLP over pure logic programming.

Solution: CLP combines logic programming with constraint solving, enabling efficient solution of constraint problems. Constraint propagation reduces search space, and specialized algorithms handle constraints efficiently.

Conclusion

Constraint Logic Programming combines the declarative nature of logic programming with the power of constraint solving. By maintaining constraints on variables and using constraint propagation, CLP systems can efficiently solve complex problems.

Understanding CLP is essential for anyone working with constraint solving, scheduling, planning, or configuration problems. The combination of logic programming with constraint solving creates powerful systems for complex problem-solving.

Comments