def test_next_on_different_sized_constraints(self): bqm = dimod.BinaryQuadraticModel.empty(dimod.SPIN) variables = list('abcdefg') fixed_variables = list('abc') size = 3 constraints = [] # Set BQM and constraints of varying lengths for triplet in itertools.combinations(variables, size): for u, v in itertools.combinations(triplet, 2): bqm.add_interaction(u, v, -1) non_fixed_variables = set(triplet) - set(fixed_variables) constraints.append(non_fixed_variables) for fixed_variable in fixed_variables: bqm.fix_variable(fixed_variable, 1) # Get new state rcd = RandomConstraintDecomposer(size, constraints) state = State.from_sample(min_sample(bqm), bqm) newstate = rcd.run(state).result() self.assertIn('subproblem', newstate) self.assertTrue(len(newstate.subproblem) <= size) # correct size
def test_completely_disconnected_constraints(self): bqm = dimod.BinaryQuadraticModel.from_ising({}, {'ab': 1, 'bc': 1, 'ca': 1}) size = 2 constraints = ['a', 'b'] with self.assertRaises(ValueError): rcd = RandomConstraintDecomposer(size, constraints) state = State.from_problem(bqm) _ = rcd.run(state).result()
def test_partially_disconnected_constraints(self): bqm = dimod.BinaryQuadraticModel.from_ising({}, {'ab': 1, 'bc': 1, 'ca': 1}) size = 2 constraints = ['a', 'b', 'cb'] rcd = RandomConstraintDecomposer(size, constraints) state = State.from_problem(bqm) newstate = rcd.run(state).result() self.assertIn('subproblem', newstate) self.assertTrue(len(newstate.subproblem) <= size) # correct size
def test_typical_construction(self): bqm = dimod.BinaryQuadraticModel.empty(dimod.SPIN) variables = list('abcdefg') constraints = [] for triplet in itertools.combinations(variables, 3): for u, v in itertools.combinations(triplet, 2): bqm.add_interaction(u, v, -1) constraints.append(triplet) rcd = RandomConstraintDecomposer(3, constraints) rcd.init(state=State.from_sample(min_sample(bqm), bqm)) # check that the graph is complete G = rcd.constraint_graph for i in range(len(constraints)): self.assertIn(i, G.nodes)
def test_next(self): bqm = dimod.BinaryQuadraticModel.empty(dimod.SPIN) variables = list('abcdefg') constraints = [] for triplet in itertools.combinations(variables, 3): for u, v in itertools.combinations(triplet, 2): bqm.add_interaction(u, v, -1) constraints.append(triplet) rcd = RandomConstraintDecomposer(3, constraints) state = State.from_sample(min_sample(bqm), bqm) newstate = rcd.run(state).result() self.assertIn('subproblem', newstate) self.assertTrue(len(newstate.subproblem) <= 3) # correct size