@@ -179,9 +179,9 @@ def __init__(self, model: mip.Model, name: str, sense: str):
179
179
self ._name : str = name
180
180
self ._var_name : List [str ] = []
181
181
self ._var_col : Dict [str , int ] = {}
182
+ self ._var_type : List [str ] = []
182
183
self ._cons_name : List [str ] = []
183
184
self ._cons_col : Dict [str , int ] = {}
184
- self ._num_int : int = 0
185
185
186
186
# Also store solution (when available)
187
187
self ._x = []
@@ -259,11 +259,11 @@ def add_var(
259
259
status = self ._lib .Highs_changeColIntegrality (
260
260
self ._model , col , self ._lib .kHighsVarTypeInteger
261
261
)
262
- self ._num_int += 1
263
262
264
- # store name
263
+ # store name & type
265
264
self ._var_name .append (name )
266
265
self ._var_col [name ] = col
266
+ self ._var_type .append (var_type )
267
267
268
268
def add_constr (self : "SolverHighs" , lin_expr : "mip.LinExpr" , name : str = "" ):
269
269
row : int = self .num_rows ()
@@ -347,7 +347,7 @@ def relax(self: "SolverHighs"):
347
347
status = self ._lib .Highs_changeColsIntegralityByRange (
348
348
self ._model , 0 , n - 1 , integrality
349
349
)
350
- self ._num_int = 0
350
+ self ._var_type = [ mip . CONTINUOUS ] * len ( self . _var_type )
351
351
352
352
def generate_cuts (
353
353
self ,
@@ -509,8 +509,7 @@ def num_nz(self: "SolverHighs") -> int:
509
509
return self ._lib .Highs_getNumNz (self ._model )
510
510
511
511
def num_int (self : "SolverHighs" ) -> int :
512
- # Can't be queried easily from C API, so we do our own book keeping :-/
513
- return self ._num_int
512
+ return sum (vt != mip .CONTINUOUS for vt in self ._var_type )
514
513
515
514
def get_emphasis (self : "SolverHighs" ) -> mip .SearchEmphasis :
516
515
raise NotImplementedError ()
@@ -723,12 +722,14 @@ def var_set_obj(self: "SolverHighs", var: "mip.Var", value: numbers.Real):
723
722
status = self ._lib .Highs_changeColCost (self ._model , var .idx , value )
724
723
725
724
def var_get_var_type (self : "SolverHighs" , var : "mip.Var" ) -> str :
726
- # TODO: store var type separately?
727
- raise NotImplementedError ()
725
+ return self ._var_type [var .idx ]
728
726
729
727
def var_set_var_type (self : "SolverHighs" , var : "mip.Var" , value : str ):
730
- # TODO: store var type separately?
731
- raise NotImplementedError ()
728
+ if value != mip .CONTINUOUS :
729
+ status = self ._lib .Highs_changeColIntegrality (
730
+ self ._model , var .idx , self ._lib .kHighsVarTypeInteger
731
+ )
732
+ self ._var_type [var .idx ] = value
732
733
733
734
def var_get_column (self : "SolverHighs" , var : "mip.Var" ) -> "Column" :
734
735
# TODO
0 commit comments