def test_linear_constraints_handling(self): """test linear constraints handling""" q_p = QuadraticProgram() q_p.binary_var('x') q_p.binary_var('y') q_p.binary_var('z') q_p.linear_constraint({'x': 1}, '==', 1) q_p.linear_constraint({'y': 1}, '<=', 1) q_p.linear_constraint({'z': 1}, '>=', 1) self.assertEqual(q_p.get_num_linear_constraints(), 3) lin = q_p.linear_constraints self.assertEqual(len(lin), 3) self.assertDictEqual(lin[0].linear.to_dict(), {0: 1}) self.assertDictEqual(lin[0].linear.to_dict(use_name=True), {'x': 1}) self.assertListEqual(lin[0].linear.to_array().tolist(), [1, 0, 0]) self.assertEqual(lin[0].sense, Constraint.Sense.EQ) self.assertEqual(lin[0].rhs, 1) self.assertEqual(lin[0].name, 'c0') self.assertEqual(q_p.get_linear_constraint(0).name, 'c0') self.assertEqual(q_p.get_linear_constraint('c0').name, 'c0') self.assertDictEqual(lin[1].linear.to_dict(), {1: 1}) self.assertDictEqual(lin[1].linear.to_dict(use_name=True), {'y': 1}) self.assertListEqual(lin[1].linear.to_array().tolist(), [0, 1, 0]) self.assertEqual(lin[1].sense, Constraint.Sense.LE) self.assertEqual(lin[1].rhs, 1) self.assertEqual(lin[1].name, 'c1') self.assertEqual(q_p.get_linear_constraint(1).name, 'c1') self.assertEqual(q_p.get_linear_constraint('c1').name, 'c1') self.assertDictEqual(lin[2].linear.to_dict(), {2: 1}) self.assertDictEqual(lin[2].linear.to_dict(use_name=True), {'z': 1}) self.assertListEqual(lin[2].linear.to_array().tolist(), [0, 0, 1]) self.assertEqual(lin[2].sense, Constraint.Sense.GE) self.assertEqual(lin[2].rhs, 1) self.assertEqual(lin[2].name, 'c2') self.assertEqual(q_p.get_linear_constraint(2).name, 'c2') self.assertEqual(q_p.get_linear_constraint('c2').name, 'c2') with self.assertRaises(QiskitOptimizationError): q_p.linear_constraint(name='c0') with self.assertRaises(QiskitOptimizationError): q_p.linear_constraint(name='c1') with self.assertRaises(QiskitOptimizationError): q_p.linear_constraint(name='c2') with self.assertRaises(IndexError): q_p.get_linear_constraint(4) with self.assertRaises(KeyError): q_p.get_linear_constraint('c3') q_p.remove_linear_constraint('c1') lin = q_p.linear_constraints self.assertEqual(len(lin), 2) self.assertDictEqual(lin[1].linear.to_dict(), {2: 1}) self.assertDictEqual(lin[1].linear.to_dict(use_name=True), {'z': 1}) self.assertListEqual(lin[1].linear.to_array().tolist(), [0, 0, 1]) self.assertEqual(lin[1].sense, Constraint.Sense.GE) self.assertEqual(lin[1].rhs, 1) self.assertEqual(lin[1].name, 'c2') self.assertEqual(q_p.get_linear_constraint(1).name, 'c2') self.assertEqual(q_p.get_linear_constraint('c2').name, 'c2') with self.assertRaises(KeyError): q_p.remove_linear_constraint('c1') with self.assertRaises(IndexError): q_p.remove_linear_constraint(9) q_p.linear_constraint(sense='E') self.assertEqual(q_p.linear_constraints[-1].sense, Constraint.Sense.EQ) q_p.linear_constraint(sense='G') self.assertEqual(q_p.linear_constraints[-1].sense, Constraint.Sense.GE) q_p.linear_constraint(sense='L') self.assertEqual(q_p.linear_constraints[-1].sense, Constraint.Sense.LE) q_p.linear_constraint(sense='EQ') self.assertEqual(q_p.linear_constraints[-1].sense, Constraint.Sense.EQ) q_p.linear_constraint(sense='GE') self.assertEqual(q_p.linear_constraints[-1].sense, Constraint.Sense.GE) q_p.linear_constraint(sense='LE') self.assertEqual(q_p.linear_constraints[-1].sense, Constraint.Sense.LE) q_p.linear_constraint(sense='=') self.assertEqual(q_p.linear_constraints[-1].sense, Constraint.Sense.EQ) q_p.linear_constraint(sense='>') self.assertEqual(q_p.linear_constraints[-1].sense, Constraint.Sense.GE) q_p.linear_constraint(sense='<') with self.assertRaises(QiskitOptimizationError): q_p.linear_constraint(sense='=>')
def test_init(self): """ test init. """ quadratic_program = QuadraticProgram() for _ in range(5): quadratic_program.continuous_var() self.assertEqual(quadratic_program.get_num_linear_constraints(), 0) coefficients = np.array(range(5)) # equality constraints quadratic_program.linear_constraint(sense='==') self.assertEqual(quadratic_program.get_num_linear_constraints(), 1) self.assertEqual(quadratic_program.linear_constraints[0].name, 'c0') self.assertEqual( len(quadratic_program.linear_constraints[0].linear.to_dict()), 0) self.assertEqual(quadratic_program.linear_constraints[0].sense, Constraint.Sense.EQ) self.assertEqual(quadratic_program.linear_constraints[0].rhs, 0.0) self.assertEqual(quadratic_program.linear_constraints[0], quadratic_program.get_linear_constraint('c0')) self.assertEqual(quadratic_program.linear_constraints[0], quadratic_program.get_linear_constraint(0)) with self.assertRaises(QiskitOptimizationError): quadratic_program.linear_constraint(name='c0') quadratic_program.linear_constraint(coefficients, '==', 1.0, 'c1') self.assertEqual(quadratic_program.get_num_linear_constraints(), 2) self.assertEqual(quadratic_program.linear_constraints[1].name, 'c1') self.assertTrue( (quadratic_program.linear_constraints[1].linear.to_array() == coefficients).all()) self.assertEqual(quadratic_program.linear_constraints[1].sense, Constraint.Sense.EQ) self.assertEqual(quadratic_program.linear_constraints[1].rhs, 1.0) self.assertEqual(quadratic_program.linear_constraints[1], quadratic_program.get_linear_constraint('c1')) self.assertEqual(quadratic_program.linear_constraints[1], quadratic_program.get_linear_constraint(1)) # geq constraints quadratic_program.linear_constraint(sense='>=') self.assertEqual(quadratic_program.get_num_linear_constraints(), 3) self.assertEqual(quadratic_program.linear_constraints[2].name, 'c2') self.assertEqual( len(quadratic_program.linear_constraints[2].linear.to_dict()), 0) self.assertEqual(quadratic_program.linear_constraints[2].sense, Constraint.Sense.GE) self.assertEqual(quadratic_program.linear_constraints[2].rhs, 0.0) self.assertEqual(quadratic_program.linear_constraints[2], quadratic_program.get_linear_constraint('c2')) self.assertEqual(quadratic_program.linear_constraints[2], quadratic_program.get_linear_constraint(2)) with self.assertRaises(QiskitOptimizationError): quadratic_program.linear_constraint(name='c2', sense='>=') quadratic_program.linear_constraint(coefficients, '>=', 1.0, 'c3') self.assertEqual(quadratic_program.get_num_linear_constraints(), 4) self.assertEqual(quadratic_program.linear_constraints[3].name, 'c3') self.assertTrue( (quadratic_program.linear_constraints[3].linear.to_array() == coefficients).all()) self.assertEqual(quadratic_program.linear_constraints[3].sense, Constraint.Sense.GE) self.assertEqual(quadratic_program.linear_constraints[3].rhs, 1.0) self.assertEqual(quadratic_program.linear_constraints[3], quadratic_program.get_linear_constraint('c3')) self.assertEqual(quadratic_program.linear_constraints[3], quadratic_program.get_linear_constraint(3)) # leq constraints quadratic_program.linear_constraint(sense='<=') self.assertEqual(quadratic_program.get_num_linear_constraints(), 5) self.assertEqual(quadratic_program.linear_constraints[4].name, 'c4') self.assertEqual( len(quadratic_program.linear_constraints[4].linear.to_dict()), 0) self.assertEqual(quadratic_program.linear_constraints[4].sense, Constraint.Sense.LE) self.assertEqual(quadratic_program.linear_constraints[4].rhs, 0.0) self.assertEqual(quadratic_program.linear_constraints[4], quadratic_program.get_linear_constraint('c4')) self.assertEqual(quadratic_program.linear_constraints[4], quadratic_program.get_linear_constraint(4)) with self.assertRaises(QiskitOptimizationError): quadratic_program.linear_constraint(name='c4', sense='<=') quadratic_program.linear_constraint(coefficients, '<=', 1.0, 'c5') self.assertEqual(quadratic_program.get_num_linear_constraints(), 6) self.assertEqual(quadratic_program.linear_constraints[5].name, 'c5') self.assertTrue( (quadratic_program.linear_constraints[5].linear.to_array() == coefficients).all()) self.assertEqual(quadratic_program.linear_constraints[5].sense, Constraint.Sense.LE) self.assertEqual(quadratic_program.linear_constraints[5].rhs, 1.0) self.assertEqual(quadratic_program.linear_constraints[5], quadratic_program.get_linear_constraint('c5')) self.assertEqual(quadratic_program.linear_constraints[5], quadratic_program.get_linear_constraint(5))