def setUp(self):
     self.relevant_variables = ['x']
     self.irrelevant_variable = 'tagada'
     self.constraint = fd.make_expression(self.relevant_variables,
                                          'x==2')
     self.domains = {'x':fd.FiniteDomain(range(4))}
     self.entailed_domains = {'x':fd.FiniteDomain([2])}
 def testFailure3(self):
     domains = {'x':fd.FiniteDomain((1,)),
                'y':fd.FiniteDomain((1,)),
                'z':fd.FiniteDomain((2,3)),}
     exception = 0
     try:
         entailed = self.constraint.narrow(domains)
     except propagation.ConsistencyFailure:
         exception = 1
     assert exception
 def testNarrowing3(self):
     domains = {'x':fd.FiniteDomain((1,)),
                'y':fd.FiniteDomain((2,)),
                'z':fd.FiniteDomain((1,2,3,4)),}
     entailed = self.constraint.narrow(domains)
     vx = domains['x'].getValues()
     vy = domains['y'].getValues()
     vz = domains['z'].getValues()
     self.assert_(not entailed)
     self.assert_(1 in vx, str(vx))
     self.assert_(2 in vy, str(vy))
     self.assert_(4 in vz and 3 in vz, str(vz))
 def testNarrowing2(self):
     domains = {'x':fd.FiniteDomain((1,2)),
                'y':fd.FiniteDomain((1,)),
                'z':fd.FiniteDomain((1,4)),}
     entailed = self.constraint.narrow(domains)
     vx = domains['x'].getValues()
     vy = domains['y'].getValues()
     vz = domains['z'].getValues()
     self.assert_(entailed)
     self.assert_(2 in vx)
     self.assert_(1 in vy)
     self.assert_(4 in vz)
示例#5
0
 def testNarrowing3(self):
     domains = {
         'x': fd.FiniteDomain((1, )),
         'y': fd.FiniteDomain((2, )),
         'z': fd.FiniteDomain((1, 2, 3, 4)),
     }
     entailed = self.constraint.narrow(domains)
     vx = domains['x'].getValues()
     vy = domains['y'].getValues()
     vz = domains['z'].getValues()
     self.assertFalse(entailed)
     self.assertIn(1, vx)
     self.assertIn(2, vy)
     self.assertIn(4, vz)
     self.assertIn(3, vz)
示例#6
0
    def setUp(self):
        self.domains = {}
        self.variables = list('abcdef')
        for v in self.variables:
            self.domains[v] = fd.FiniteDomain(range(6))

        self.repo = Repository(self.variables, self.domains)
 def testNarrowing4(self):
     domains = {'x':fd.FiniteDomain((1,)),
                'y':fd.FiniteDomain((2,)),
                'z':fd.FiniteDomain((1,3,4)),
                't':fd.FiniteDomain((2,5,4)),
                'u':fd.FiniteDomain((1,2,4)),
                }
     constraint = fd.AllDistinct(domains.keys())
     entailed = constraint.narrow(domains)
     vx = domains['x'].getValues()
     vy = domains['y'].getValues()
     vz = domains['z'].getValues()
     vt = domains['t'].getValues()
     vu = domains['u'].getValues()
     self.failUnless(entailed)
     self.assertEquals([1],  vx)
     self.assertEquals([2], vy)
     self.assertEquals([3], vz)
     self.assertEquals([5], vt)
     self.assertEquals([4], vu)
示例#8
0
    def setUp(self):
        self.solver = Solver()
        self.domains = {}
        self.variables = list('abcdef')
        for v in self.variables:
            self.domains[v] = fd.FiniteDomain(range(6))

        self.repo = Repository(self.variables, self.domains)
        for v1 in self.variables:
            for v2 in self.variables:
                if v1 < v2:
                    self.repo.addConstraint(fd.make_expression((v1, v2),
                                                               '%s < %s'%(v1, v2)))
 def setUp(self):
     self.relevant_variables = ['x','y','z']
     self.irrelevant_variable = 'tagada'
     self.constraint = fd.make_expression(self.relevant_variables,
                                          'x+y==2 and z>1')
     self.domains = {'x':fd.FiniteDomain(range(4)),
                     'y':fd.FiniteDomain(range(3)),
                     'z':fd.FiniteDomain(range(4))}
     self.entailed_domains = {'x':fd.FiniteDomain([2]),
                              'y':fd.FiniteDomain([0]),
                              'z':fd.FiniteDomain([2,3]),}
 def setUp(self):
     self.relevant_variables = ['x','y','z']
     self.irrelevant_variable = 'tagada'
     self.constraint = fd.AllDistinct(self.relevant_variables)
     self.domains = {'x':fd.FiniteDomain((1,2)),
                     'y':fd.FiniteDomain((1,3)),
                     'z':fd.FiniteDomain((1,4)),}
     
     self.entailed_domains = {'x':fd.FiniteDomain((1,)),
                              'y':fd.FiniteDomain((1,2)),
                              'z':fd.FiniteDomain((1,2,3)),}
 def setUp(self):
     self.variables = ('v1', 'v2', 'v3')
     self.domains1 = {
         'v1': fd.FiniteDomain([1]),
         'v2': fd.FiniteDomain([2, 3]),
         'v3': fd.FiniteDomain([4, 5, 6, 7]),
     }
     self.domains2 = {
         'v1': fd.FiniteDomain([1]),
         'v2': fd.FiniteDomain([2, 3, 4, 5, 6]),
         'v3': fd.FiniteDomain([7, 8, 9, 10, 11, 12, 13]),
     }
     self.distributor = self.buildDistributor()
示例#12
0
def queens(size=8, verbose=0):
    possible_positions = [(i, j) for i in range(size) for j in range(size)]
    variables = []
    domains = {}
    constraints = []
    for i in range(size):
        name = 'Q%d' % i
        variables.append(name)
        domains[name] = fd.FiniteDomain(possible_positions)
    for q1 in variables:
        for q2 in variables:
            if q1 < q2:
                constraints.append(fd.make_expression((q1,q2),
                                                      '%(q1)s[0] < %(q2)s[0] and '
                                                      '%(q1)s[1] != %(q2)s[1] and '
                                                      'abs(%(q1)s[0]-%(q2)s[0]) != '
                                                      'abs(%(q1)s[1]-%(q2)s[1])'%\
                                                      {'q1':q1,'q2':q2}))
    r = Repository(variables, domains, constraints)
    s = Solver().solve(r, verbose)
    print 'Number of solutions:', len(s)
 def setUp(self):
     self.values = list(range(3))
     self.domain = fd.FiniteDomain(self.values)
 def setUp(self):
     self.constraint = fd.NotEquals('x',1)
     self.domains = {'x':fd.FiniteDomain(range(3))}
 def setUp(self):
     self.constraint = fd.LesserThan('x',1)
     self.domains = {'x':fd.FiniteDomain(range(3))}
示例#16
0
 def add_var(self, name, values):
     self.domains[name] = fd.FiniteDomain(values)
 def setUp(self):
     self.constraint = fd.GreaterOrEqual('x',1)
     self.domains = {'x':fd.FiniteDomain(range(3))}