/* Lectures problem in SICStus Prolog. Biggs: Discrete Mathematics (2nd ed), page 187. """ Suppose we wish to schedule six one-hour lectures, v1, v2, v3, v4, v5, v6. Among the the potential audience there are people who wish to hear both - v1 and v2 - v1 and v4 - v3 and v5 - v2 and v6 - v4 and v5 - v5 and v6 - v1 and v6 How many hours are necessary in order that the lectures can be given without clashes? """ Compare with the following model: * MiniZinc: http://www.hakank.org/minizinc/lectures.mzn Model created by Hakan Kjellerstrand, hakank@bonetmail.com See also my SICStus Prolog page: http://www.hakank.org/sicstus/ */ :-use_module(library(clpfd)). :-use_module(library(lists)). go :- N = 6, % number of nodes g(Graph), MaxC in 1..N, length(V, N), domain(V, 1,N), maximum(MaxC, V), ( foreach([L1,L2], Graph), param(V) do element(L1,V,V1), element(L2,V,V2), V1 #\= V2 ), % symmetry breaking: % v1 has the color 1, v2 has either color 1 or 2 % (this should be enough for a general model) element(1,V,1), element(2,V,V2), V2 #=< 2, labeling([minimize(MaxC)], V), write(v:V),nl, write(max_c:MaxC),nl, fd_statistics. % The schedule requirements: % lecture a cannot be held at the same time as b g([ [1, 2], [1, 4], [3, 5], [2, 6], [4, 5], [5, 6], [1, 6]]).