Skip to content

Commit 13d4a68

Browse files
BUG: small patch to _VarArray while inputting a matrix with length > 1 (#1060)
* Fix _VarArray size initialization logic * Add test for knapsack constraint with matrix variables --------- Co-authored-by: João Dionísio <57299939+Joao-Dionisio@users.noreply.github.com>
1 parent 0c58aaf commit 13d4a68

File tree

2 files changed

+13
-2
lines changed

2 files changed

+13
-2
lines changed

src/pyscipopt/scip.pxi

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2509,8 +2509,8 @@ cdef class _VarArray:
25092509
else:
25102510
raise TypeError(f"Expected Variable or list of Variable, got {type(vars)}.")
25112511

2512-
if vars:
2513-
self.size = len(vars)
2512+
self.size = len(vars)
2513+
if self.size:
25142514
self.ptr = <SCIP_VAR**> malloc(self.size * sizeof(SCIP_VAR*))
25152515
for i, var in enumerate(vars):
25162516
if not isinstance(var, Variable):

tests/test_cons.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,17 @@ def test_cons_indicator_with_matrix_binvar():
210210

211211
assert m.isEQ(m.getVal(x), 1)
212212

213+
def test_cons_knapsack_with_matrix_vars():
214+
# test matrix variable vars #1043
215+
m = Model()
216+
vars = m.addMatrixVar(3, vtype="B")
217+
m.addConsKnapsack(vars, [1, 2, 3], 5)
218+
219+
m.setObjective(vars.sum(), "maximize")
220+
m.optimize()
221+
222+
assert (m.getVal(vars) == [0, 1, 1]).all()
223+
213224
@pytest.mark.xfail(
214225
reason="addConsIndicator doesn't behave as expected when binary variable is False. See Issue #717."
215226
)

0 commit comments

Comments
 (0)