Skip to content

Commit e48b827

Browse files
committed
store var_type in wrapper, try to keep synchronized
1 parent fdeaf06 commit e48b827

File tree

1 file changed

+11
-10
lines changed

1 file changed

+11
-10
lines changed

mip/highs.py

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -179,9 +179,9 @@ def __init__(self, model: mip.Model, name: str, sense: str):
179179
self._name: str = name
180180
self._var_name: List[str] = []
181181
self._var_col: Dict[str, int] = {}
182+
self._var_type: List[str] = []
182183
self._cons_name: List[str] = []
183184
self._cons_col: Dict[str, int] = {}
184-
self._num_int: int = 0
185185

186186
# Also store solution (when available)
187187
self._x = []
@@ -259,11 +259,11 @@ def add_var(
259259
status = self._lib.Highs_changeColIntegrality(
260260
self._model, col, self._lib.kHighsVarTypeInteger
261261
)
262-
self._num_int += 1
263262

264-
# store name
263+
# store name & type
265264
self._var_name.append(name)
266265
self._var_col[name] = col
266+
self._var_type.append(var_type)
267267

268268
def add_constr(self: "SolverHighs", lin_expr: "mip.LinExpr", name: str = ""):
269269
row: int = self.num_rows()
@@ -347,7 +347,7 @@ def relax(self: "SolverHighs"):
347347
status = self._lib.Highs_changeColsIntegralityByRange(
348348
self._model, 0, n - 1, integrality
349349
)
350-
self._num_int = 0
350+
self._var_type = [mip.CONTINUOUS] * len(self._var_type)
351351

352352
def generate_cuts(
353353
self,
@@ -509,8 +509,7 @@ def num_nz(self: "SolverHighs") -> int:
509509
return self._lib.Highs_getNumNz(self._model)
510510

511511
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)
514513

515514
def get_emphasis(self: "SolverHighs") -> mip.SearchEmphasis:
516515
raise NotImplementedError()
@@ -723,12 +722,14 @@ def var_set_obj(self: "SolverHighs", var: "mip.Var", value: numbers.Real):
723722
status = self._lib.Highs_changeColCost(self._model, var.idx, value)
724723

725724
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]
728726

729727
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
732733

733734
def var_get_column(self: "SolverHighs", var: "mip.Var") -> "Column":
734735
# TODO

0 commit comments

Comments
 (0)