def test_sample_hising_quadratic_range(self): linear = {'a': -4.0, 'b': -4.0, 'c': -4.0} quadratic = {('a', 'b', 'c'): 3.2} offset = 5 ignored_variables, ignored_interactions = _check_params(None, None) comp_parameters = dict(ignored_interactions=ignored_interactions, ignored_variables=ignored_variables, penalty_strength=5., quadratic_range=(-1, 2) ) sampler = ScaleComposite( ScalingChecker(HigherOrderComposite(ExactSolver()), h=linear, J=quadratic, offset=offset, **comp_parameters)) response = sampler.sample_ising(linear, quadratic, offset=offset, **comp_parameters) self.assertAlmostEqual(response.first.energy, -3.8) comp_parameters = dict(ignored_interactions=ignored_interactions, ignored_variables=ignored_variables, penalty_strength=5., quadratic_range=(-1, 0.4) ) sampler = ScaleComposite( ScalingChecker(HigherOrderComposite(ExactSolver()), h=linear, J=quadratic, offset=offset, **comp_parameters)) response = sampler.sample_ising(linear, quadratic, offset=offset, **comp_parameters) self.assertAlmostEqual(response.first.energy, -3.8)
def test_sample_bias_range(self): linear = {'a': -4.0, 'b': -4.0} quadratic = {('a', 'b'): 3.2} ignored_variables, ignored_interactions = _check_params(None, None) bqm = BinaryQuadraticModel.from_ising(linear, quadratic) comp_parameters = dict(ignored_interactions=ignored_interactions, ignored_variables=ignored_variables, bias_range=2.) sampler = ScaleComposite( ScalingChecker(ExactSolver(), bqm=bqm, **comp_parameters)) response = sampler.sample(bqm, **comp_parameters) self.assertAlmostEqual(response.first.energy, -4.8)
def test_sample_ising_quadratic(self): linear = {'a': -4.0, 'b': -4.0} quadratic = {('a', 'b'): 3.2} offset = 5 ignored_variables, ignored_interactions = _check_params(None, None) comp_parameters = dict(ignored_interactions=ignored_interactions, ignored_variables=ignored_variables) sampler = ScaleComposite(ScalingChecker(ExactSolver(), h=linear, J=quadratic, offset=offset, **comp_parameters)) response = sampler.sample_ising(linear, quadratic, offset=offset) self.assertAlmostEqual(response.first.energy, 0.2)
def test_sample_ignore_variables(self): linear = {'a': -4.0, 'b': -4.0} quadratic = {('a', 'b'): 3.2} offset = 5 bqm = BinaryQuadraticModel.from_ising(linear, quadratic, offset=offset) ignored_variables, ignored_interactions = _check_params( ['a'], None) comp_parameters = dict(ignored_interactions=ignored_interactions, ignored_variables=ignored_variables, ignore_offset=True, scalar=0.5) sampler = ScaleComposite(ScalingChecker(ExactSolver(), h=linear, J=quadratic, offset=offset, **comp_parameters)) response = sampler.sample(bqm, **comp_parameters) self.assertAlmostEqual(response.first.energy, 0.2)
def test_sample_hising_ignore_variables(self): linear = {'a': -4.0, 'b': -4.0, 'c': -4.0} quadratic = {('a', 'b', 'c'): 3.2} offset = 5 ignored_variables, ignored_interactions = _check_params( ['a'], None) comp_parameters = dict(ignored_interactions=ignored_interactions, ignored_variables=ignored_variables, ignore_offset=True, scalar=0.5) sampler = ScaleComposite(ScalingChecker(HigherOrderComposite( ExactSolver()), h=linear, J=quadratic, offset=offset, **comp_parameters)) response = sampler.sample_ising(linear, quadratic, offset=offset, **comp_parameters) self.assertAlmostEqual(response.first.energy, -3.8)
def test_scaling_hubo(self): linear = {'a': -4.0, 'b': -4.0} quadratic = {('a', 'b', 'c'): 3.2} offset = 5 ignored_variables = None ignored_interactions = None ignored_variables, ignored_interactions = _check_params( ignored_variables, ignored_interactions) hnew, jnew, offsetnew = _scaled_hubo(linear, quadratic, offset, None, 2, None, ignored_variables, ignored_interactions, False) sc = 2. hsc = { k: v / sc if k not in ignored_variables else v for k, v in linear.items() } self.assertEqual(hsc, hnew) Jsc = { k: v / sc if k not in ignored_interactions else v for k, v in quadratic.items() } self.assertEqual(Jsc, jnew) self.assertEqual(offsetnew, offset / sc) hnew, jnew, offsetnew = _scaled_hubo(linear, quadratic, offset, None, 2, None, ignored_variables, ignored_interactions, True) sc = 2. hsc = { k: v / sc if k not in ignored_variables else v for k, v in linear.items() } self.assertEqual(hsc, hnew) Jsc = { k: v / sc if k not in ignored_interactions else v for k, v in quadratic.items() } self.assertEqual(Jsc, jnew) self.assertEqual(offsetnew, offset) hnew, jnew, offsetnew = _scaled_hubo(linear, quadratic, offset, None, 1, (-1, 0.4), ignored_variables, ignored_interactions, False) sc = 3.2 / 0.4 hsc = { k: v / sc if k not in ignored_variables else v for k, v in linear.items() } self.assertEqual(hsc, hnew) Jsc = { k: v / sc if k not in ignored_interactions else v for k, v in quadratic.items() } self.assertEqual(Jsc, jnew) self.assertEqual(offsetnew, offset / sc) ignored_variables = ['a', 'b'] ignored_interactions = None ignored_variables, ignored_interactions = _check_params( ignored_variables, ignored_interactions) hnew, jnew, offsetnew = _scaled_hubo(linear, quadratic, offset, None, (-2, 2), None, ignored_variables, ignored_interactions, False) sc = 3.2 / 2. hsc = { k: v / sc if k not in ignored_variables else v for k, v in linear.items() } self.assertEqual(hsc, hnew) Jsc = { k: v / sc if k not in ignored_interactions else v for k, v in quadratic.items() } self.assertEqual(Jsc, jnew) self.assertEqual(offsetnew, offset / sc) ignored_variables = None ignored_interactions = [('a', 'b', 'c')] ignored_variables, ignored_interactions = _check_params( ignored_variables, ignored_interactions) hnew, jnew, offsetnew = _scaled_hubo(linear, quadratic, offset, None, 1, 0.5, ignored_variables, ignored_interactions, False) sc = 4. hsc = { k: v / sc if k not in ignored_variables else v for k, v in linear.items() } self.assertEqual(hsc, hnew) Jsc = { k: v / sc if k not in ignored_interactions else v for k, v in quadratic.items() } self.assertEqual(Jsc, jnew) self.assertEqual(offsetnew, offset / sc)
def test_scaling_bqm(self): linear = {'a': -4.0, 'b': -4.0} quadratic = {('a', 'b'): 3.2} ignored_variables, ignored_interactions = _check_params(None, None) bqm = BinaryQuadraticModel.from_ising(linear, quadratic, offset=5.0) scalar = None quadratic_range = None ignore_offset = False bqm_new = _scaled_bqm(bqm, scalar, 2, quadratic_range, ignored_variables, ignored_interactions, ignore_offset) sc = 2. hsc = { k: v / sc if k not in ignored_variables else v for k, v in linear.items() } Jsc = { k: v / sc if k not in ignored_interactions else v for k, v in quadratic.items() } bqm_scaled = BinaryQuadraticModel.from_ising(hsc, Jsc, offset=5.0 / 2.) self.assertEqual(bqm_scaled, bqm_new) ignored_variables, ignored_interactions = _check_params(None, None) bqm = BinaryQuadraticModel.from_ising(linear, quadratic, offset=5.0) bqm_new = _scaled_bqm(bqm, scalar, 2, quadratic_range, ignored_variables, ignored_interactions, True) sc = 2. hsc = { k: v / sc if k not in ignored_variables else v for k, v in linear.items() } Jsc = { k: v / sc if k not in ignored_interactions else v for k, v in quadratic.items() } bqm_scaled = BinaryQuadraticModel.from_ising(hsc, Jsc, offset=5.0) self.assertEqual(bqm_scaled, bqm_new) bqm_new = _scaled_bqm(bqm, scalar, 1, (-1, 0.4), ignored_variables, ignored_interactions, ignore_offset) sc = 3.2 / 0.4 hsc = { k: v / sc if k not in ignored_variables else v for k, v in linear.items() } Jsc = { k: v / sc if k not in ignored_interactions else v for k, v in quadratic.items() } bqm_scaled = BinaryQuadraticModel.from_ising(hsc, Jsc, offset=5.0 / sc) self.assertEqual(bqm_scaled, bqm_new) ignored_variables = ['a', 'b'] ignored_interactions = None ignored_variables, ignored_interactions = _check_params( ignored_variables, ignored_interactions) bqm = BinaryQuadraticModel.from_ising(linear, quadratic) bqm_new = _scaled_bqm(bqm, scalar, (2, 2), quadratic_range, ignored_variables, ignored_interactions, ignore_offset) sc = 3.2 / 2. hsc = { k: v / sc if k not in ignored_variables else v for k, v in linear.items() } Jsc = { k: v / sc if k not in ignored_interactions else v for k, v in quadratic.items() } bqm_scaled = BinaryQuadraticModel.from_ising(hsc, Jsc, offset=0) self.assertEqual(bqm_scaled, bqm_new) ignored_variables = None ignored_interactions = [('a', 'b')] ignored_variables, ignored_interactions = _check_params( ignored_variables, ignored_interactions) bqm = BinaryQuadraticModel.from_ising(linear, quadratic) bqm_new = _scaled_bqm(bqm, scalar, 1, 0.5, ignored_variables, ignored_interactions, ignore_offset) sc = 4. hsc = { k: v / sc if k not in ignored_variables else v for k, v in linear.items() } Jsc = { k: v / sc if k not in ignored_interactions else v for k, v in quadratic.items() } bqm_scaled = BinaryQuadraticModel.from_ising(hsc, Jsc, offset=0) self.assertEqual(bqm_scaled, bqm_new)