Skip to content

Commit 6f2a50e

Browse files
authored
Merge pull request #3566 from bknueven/issue-3565
Fix bug in `XpressPersistent.update_var`
2 parents dceceb1 + ad32214 commit 6f2a50e

File tree

2 files changed

+26
-1
lines changed

2 files changed

+26
-1
lines changed

Diff for: pyomo/solvers/plugins/solvers/xpress_persistent.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -110,8 +110,8 @@ def update_var(self, var):
110110
qctype = self._xpress_chgcoltype_from_var(var)
111111
lb, ub = self._xpress_lb_ub_from_var(var)
112112

113-
self._solver_model.chgbounds([xpress_var, xpress_var], ['L', 'U'], [lb, ub])
114113
self._solver_model.chgcoltype([xpress_var], [qctype])
114+
self._solver_model.chgbounds([xpress_var, xpress_var], ['L', 'U'], [lb, ub])
115115

116116
def _add_column(self, var, obj_coef, constraints, coefficients):
117117
"""Add a column to the solver's model

Diff for: pyomo/solvers/tests/checks/test_xpress_persistent.py

+25
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,31 @@ def test_basics(self):
128128
del m.z
129129
self.assertEqual(opt.get_xpress_attribute('cols'), 2)
130130

131+
@unittest.skipIf(not xpress_available, "xpress is not available")
132+
def test_vartype_change(self):
133+
# test for issue #3565
134+
m = pyo.ConcreteModel()
135+
m.x = pyo.Var(bounds=(0, 1))
136+
m.o = pyo.Objective(expr=m.x)
137+
138+
opt = pyo.SolverFactory('xpress_persistent')
139+
opt.set_instance(m)
140+
141+
m.x.fix(1)
142+
opt.update_var(m.x)
143+
144+
x_idx = opt._solver_model.getIndex(opt._pyomo_var_to_solver_var_map[m.x])
145+
lb = []
146+
opt._solver_model.getlb(lb, x_idx, x_idx)
147+
self.assertEqual(lb[0], 1)
148+
149+
m.x.domain = pyo.Binary
150+
opt.update_var(m.x)
151+
152+
lb = []
153+
opt._solver_model.getlb(lb, x_idx, x_idx)
154+
self.assertEqual(lb[0], 1)
155+
131156
@unittest.skipIf(not xpress_available, "xpress is not available")
132157
def test_add_remove_qconstraint(self):
133158
m = pyo.ConcreteModel()

0 commit comments

Comments
 (0)