Ejemplo n.º 1
0
    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)
Ejemplo n.º 2
0
 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)
Ejemplo n.º 3
0
 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)
Ejemplo n.º 4
0
    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)
Ejemplo n.º 5
0
    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)
Ejemplo n.º 6
0
    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)
Ejemplo n.º 7
0
    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)