2
def dummy_problem(computation_space):
3
ret = computation_space.var('__dummy__')
4
computation_space.set_dom(ret, c.FiniteDomain([]))
7
def send_more_money(computation_space):
8
#FIXME: this problem needs propagators for integer finite domains
9
# performance is terrible without it
10
cs = computation_space
12
variables = (s, e, n, d, m, o, r, y) = cs.make_vars('s', 'e', 'n', 'd', 'm', 'o', 'r', 'y')
16
cs.set_dom(var, c.FiniteDomain(digits))
22
cs.add_constraint([v1, v2],
23
'%s != %s' % (v1.name, v2.name))
26
cs.add_constraint([s], 's != 0')
27
cs.add_constraint([m], 'm != 0')
28
cs.add_constraint([s, e, n, d, m, o, r, y],
29
'1000*s+100*e+10*n+d+1000*m+100*o+10*r+e == 10000*m+1000*o+100*n+10*e+y')
30
cs.set_distributor(di.DichotomyDistributor(cs))
32
return (s, e, n, d, m, o, r, y)
34
def conference_scheduling(computation_space):
35
cs = computation_space
37
dom_values = [(room,slot)
38
for room in ('room A','room B','room C')
39
for slot in ('day 1 AM','day 1 PM','day 2 AM',
42
variables = [cs.var(v, FiniteDomain(dom_values))
43
for v in ('c01','c02','c03','c04','c05',
44
'c06','c07','c08','c09','c10')]
45
for conf in ('c03','c04','c05','c06'):
47
cs.tell(make_expression([v], "%s[0] == 'room C'" % conf))
49
for conf in ('c01','c05','c10'):
51
cs.tell(make_expression([v], "%s[1].startswith('day 1')" % conf))
53
for conf in ('c02','c03','c04','c09'):
55
cs.tell(make_expression([v], "%s[1].startswith('day 2')" % conf))
57
groups = (('c01','c02','c03','c10'),
58
('c02','c06','c08','c09'),
59
('c03','c05','c06','c07'),
60
('c01','c03','c07','c08'))
66
v1, v2 = cs.find_vars((conf1, conf2))
67
cs.tell(make_expression([v1, v2], '%s[1] != %s[1]'% (v1.name(),v2.name())))
68
cs.tell(AllDistinct(variables))
72
def sudoku(computation_space):
73
cs = computation_space
74
import constraint as c
76
variables = [cs.var('v%i%i'%(x,y)) for x in range(1,10) for y in range(1,10)]
80
cs.set_dom(v, c.FiniteDomain(range(1,10)))
81
# Add constraints for rows (sum should be 45)
83
row = [ v for v in variables if v.name[1] == str(i)]
84
cs.add_constraint(row, 'sum([%s]) == 45' % ', '.join([v.name for v in row]))
85
# Add constraints for columns (sum should be 45)
87
row = [ v for v in variables if v.name[2] == str(i)]
88
cs.add_constraint(row, 'sum([%s]) == 45' % ', '.join([v.name for v in row]))
89
# Add constraints for subsquares (sum should be 45)
90
offsets = [(r,c) for r in [-1,0,1] for c in [-1,0,1]]
91
subsquares = [(r,c) for r in [2,5,8] for c in [2,5,8]]
93
sub = [cs.find_var('v%d%d'% (rc[0] + off[0],rc[1] + off[1])) for off in offsets]
94
cs.add_constraint(sub, 'sum([%s]) == 45' % ', '.join([v.name for v in sub]))
96
for m in sub[sub.index(v)+1:]:
97
cs.add_constraint([v,m], '%s != %s' % (v.name, m.name))
99
return tuple(variables)