Exemplo n.º 1
0
    def test_typical(self):
        dqm = dimod.DQM()
        u = dqm.add_variable(4)
        v = dqm.add_variable(3)
        dqm.set_quadratic(u, v, {(0, 2): -1, (2, 1): 1})
        dqm.set_linear(u, [0, 1, 2, 3])
        dqm.offset = 5

        cqm = CQM.from_discrete_quadratic_model(dqm)

        self.assertEqual(cqm.variables, [(0, 0), (0, 1), (0, 2), (0, 3),
                                         (1, 0), (1, 1), (1, 2)])

        self.assertEqual(
            cqm.objective.linear, {
                (0, 0): 0,
                (0, 1): 1,
                (0, 2): 2,
                (0, 3): 3,
                (1, 1): 0,
                (1, 2): 0,
                (1, 0): 0
            })
        self.assertEqual(cqm.objective.quadratic, {
            ((1, 1), (0, 2)): 1.0,
            ((1, 2), (0, 0)): -1.0
        })
        self.assertEqual(cqm.objective.offset, dqm.offset)

        # keys of constraints are the variables of DQM
        self.assertEqual(set(cqm.constraints), set(dqm.variables))
Exemplo n.º 2
0
    def test_empty(self):
        dqm = dimod.DiscreteQuadraticModel()

        cqm = CQM.from_discrete_quadratic_model(dqm)

        self.assertEqual(len(cqm.variables), 0)
        self.assertEqual(len(cqm.constraints), 0)
Exemplo n.º 3
0
    def test_case_label(self):
        dqm = dimod.CaseLabelDQM()
        u = dqm.add_variable({'red', 'green', 'blue'}, shared_labels=True)
        v = dqm.add_variable(['blue', 'yellow', 'brown'],
                             label='v',
                             shared_labels=True)
        dqm.set_linear_case(u, 'red', 1)
        dqm.set_linear_case(v, 'yellow', 2)
        dqm.set_quadratic_case(u, 'green', v, 'blue', -0.5)
        dqm.set_quadratic_case(u, 'blue', v, 'brown', -0.5)

        cqm = CQM.from_discrete_quadratic_model(dqm)

        self.assertEqual(
            cqm.objective.linear, {
                (0, 'blue'): 0.0,
                (0, 'red'): 1.0,
                (0, 'green'): 0.0,
                ('v', 'blue'): 0.0,
                ('v', 'brown'): 0.0,
                ('v', 'yellow'): 2.0
            })
        self.assertEqual(
            cqm.objective.quadratic, {
                (('v', 'blue'), (0, 'green')): -0.5,
                (('v', 'brown'), (0, 'blue')): -0.5
            })
        self.assertEqual(cqm.objective.offset, 0)
        self.assertTrue(
            all(
                cqm.objective.vartype(v) is dimod.BINARY
                for v in cqm.objective.variables))

        self.assertEqual(set(cqm.constraints), set(dqm.variables))