@@ -180,18 +180,27 @@ def test_cons_indicator():
180
180
assert c1 .getConshdlrName () == "indicator"
181
181
182
182
def test_cons_indicator_with_matrix_binvar ():
183
+ # to fix #1043
183
184
m = Model ()
184
185
185
186
x = m .addVar (vtype = "B" )
186
- binvar = m .addMatrixVar (1 , vtype = "B" )
187
- # binvar is a matrix variable to fix #1043
188
- m .addConsIndicator (x >= 1 , binvar , activeone = True )
189
- m .addConsIndicator (x <= 0 , binvar , activeone = False )
190
-
191
- m .setObjective (binvar .sum (), "maximize" )
187
+ # binvar is a matrix variable
188
+ binvar1 = m .addMatrixVar (1 , vtype = "B" )
189
+ m .addConsIndicator (x >= 1 , binvar1 , activeone = True )
190
+ m .addConsIndicator (x <= 0 , binvar1 , activeone = False )
191
+
192
+ y = m .addMatrixVar (2 , vtype = "B" )
193
+ # binvar2 is a list of lists
194
+ binvar2 = [[m .addVar (vtype = "B" )], [m .addVar (vtype = "B" )]]
195
+ m .addConsIndicator (y >= 1 , binvar2 , activeone = True )
196
+ m .addConsIndicator (y <= 0 , binvar2 , activeone = False )
197
+
198
+ m .setObjective (binvar1 [0 ] + binvar2 [0 ][0 ] + binvar2 [0 ][1 ], "maximize" )
192
199
m .optimize ()
193
200
194
201
assert m .getVal (x ) == 1
202
+ assert m .getVal (y [0 ]) == 1
203
+ assert m .getVal (y [1 ]) == 1
195
204
196
205
@pytest .mark .xfail (
197
206
reason = "addConsIndicator doesn't behave as expected when binary variable is False. See Issue #717."
0 commit comments