Skip to content

Commit c1422b7

Browse files
move qp tests to test_solvers
1 parent 3f7c74f commit c1422b7

File tree

2 files changed

+40
-48
lines changed

2 files changed

+40
-48
lines changed

pyomo/contrib/solver/tests/solvers/test_highs.py

Lines changed: 0 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -109,50 +109,3 @@ def test_fix_and_unfix(self):
109109
self.assertAlmostEqual(m.fx.value, 1, places=5)
110110
self.assertAlmostEqual(m.fy.value, 0, places=5)
111111
self.assertAlmostEqual(r.objective_bound, 0.5, places=5)
112-
113-
def test_qp1(self):
114-
# test issue #3381
115-
m = pyo.ConcreteModel()
116-
117-
m.x1 = pyo.Var(name='x1', domain=pyo.Reals)
118-
m.x2 = pyo.Var(name='x2', domain=pyo.Reals)
119-
120-
# Quadratic Objective function
121-
m.obj = pyo.Objective(expr=m.x1 * m.x1 + m.x2 * m.x2, sense=pyo.minimize)
122-
123-
m.con1 = pyo.Constraint(expr=m.x1 >= 1)
124-
m.con2 = pyo.Constraint(expr=m.x2 >= 1)
125-
126-
results = opt.solve(m)
127-
self.assertAlmostEqual(m.x1.value, 1, places=5)
128-
self.assertAlmostEqual(m.x2.value, 1, places=5)
129-
self.assertEqual(results.objective_bound, 2)
130-
131-
def test_qp2(self):
132-
# test issue #3381
133-
m = pyo.ConcreteModel()
134-
135-
m.x1 = pyo.Var(name='x1', domain=pyo.Reals)
136-
m.x2 = pyo.Var(name='x2', domain=pyo.Reals)
137-
138-
m.p = pyo.Param(initialize=1, mutable=True)
139-
140-
m.obj = pyo.Objective(
141-
expr=m.p * m.x1 * m.x1 + m.x2 * m.x2 - m.x1 * m.x2, sense=pyo.minimize
142-
)
143-
144-
m.con1 = pyo.Constraint(expr=m.x1 >= 1)
145-
m.con2 = pyo.Constraint(expr=m.x2 >= 1)
146-
147-
opt.set_instance(m)
148-
results = opt.solve(m)
149-
self.assertAlmostEqual(m.x1.value, 1, places=5)
150-
self.assertAlmostEqual(m.x2.value, 1, places=5)
151-
self.assertEqual(results.objective_bound, 1)
152-
153-
m.p.value = 2.0
154-
opt.update_parameters()
155-
results = opt.solve(m)
156-
self.assertAlmostEqual(m.x1.value, 1, places=5)
157-
self.assertAlmostEqual(m.x2.value, 1, places=5)
158-
self.assertEqual(results.objective_bound, 2)

pyomo/contrib/solver/tests/solvers/test_solvers.py

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@
5858
]
5959
nlp_solvers = [('ipopt', Ipopt)]
6060
qcp_solvers = [('gurobi', GurobiPersistent), ('ipopt', Ipopt)]
61+
qp_solvers = qcp_solvers + [("highs", Highs)]
6162
miqcqp_solvers = [('gurobi', GurobiPersistent)]
6263
nl_solvers = [('ipopt', Ipopt)]
6364
nl_solvers_set = {i[0] for i in nl_solvers}
@@ -1097,7 +1098,7 @@ def test_mutable_quadratic_coefficient(
10971098
self.assertAlmostEqual(m.y.value, 0.0869525991355825, 4)
10981099

10991100
@parameterized.expand(input=_load_tests(qcp_solvers))
1100-
def test_mutable_quadratic_objective(
1101+
def test_mutable_quadratic_objective_qcp(
11011102
self, name: str, opt_class: Type[SolverBase], use_presolve: bool
11021103
):
11031104
opt: SolverBase = opt_class()
@@ -1128,6 +1129,44 @@ def test_mutable_quadratic_objective(
11281129
self.assertAlmostEqual(m.x.value, 0.6962249634573562, 4)
11291130
self.assertAlmostEqual(m.y.value, 0.09227926676152151, 4)
11301131

1132+
@parameterized.expand(input=_load_tests(qp_solvers))
1133+
def test_mutable_quadratic_objective_qp(
1134+
self, name: str, opt_class: Type[SolverBase], use_presolve: bool
1135+
):
1136+
opt: SolverBase = opt_class()
1137+
if not opt.available():
1138+
raise unittest.SkipTest(f'Solver {opt.name} not available.')
1139+
if any(name.startswith(i) for i in nl_solvers_set):
1140+
if use_presolve:
1141+
opt.config.writer_config.linear_presolve = True
1142+
else:
1143+
opt.config.writer_config.linear_presolve = False
1144+
# test issue #3381
1145+
m = pyo.ConcreteModel()
1146+
1147+
m.x1 = pyo.Var(name='x1', domain=pyo.Reals)
1148+
m.x2 = pyo.Var(name='x2', domain=pyo.Reals)
1149+
1150+
m.p = pyo.Param(initialize=1, mutable=True)
1151+
1152+
m.obj = pyo.Objective(
1153+
expr=m.p * m.x1 * m.x1 + m.x2 * m.x2 - m.x1 * m.x2, sense=pyo.minimize
1154+
)
1155+
1156+
m.con1 = pyo.Constraint(expr=m.x1 >= 1)
1157+
m.con2 = pyo.Constraint(expr=m.x2 >= 1)
1158+
1159+
results = opt.solve(m)
1160+
self.assertAlmostEqual(m.x1.value, 1, places=4)
1161+
self.assertAlmostEqual(m.x2.value, 1, places=4)
1162+
self.assertAlmostEqual(results.incumbent_objective, 1, 4)
1163+
1164+
m.p.value = 2.0
1165+
results = opt.solve(m)
1166+
self.assertAlmostEqual(m.x1.value, 1, places=4)
1167+
self.assertAlmostEqual(m.x2.value, 1, places=4)
1168+
self.assertAlmostEqual(results.incumbent_objective, 2, 4)
1169+
11311170
@parameterized.expand(input=_load_tests(all_solvers))
11321171
def test_fixed_vars(
11331172
self, name: str, opt_class: Type[SolverBase], use_presolve: bool

0 commit comments

Comments
 (0)