Update to Gurobi 11

dev
Alinson S. Xavier 4 months ago
parent 3775c3f780
commit 5fefb49566

@ -28,4 +28,5 @@ class ExpertBranchPriorityComponent:
for var_idx, var_name in enumerate(var_names): for var_idx, var_name in enumerate(var_names):
if np.isfinite(var_priority[var_idx]): if np.isfinite(var_priority[var_idx]):
var = model.getVarByName(var_name.decode()) var = model.getVarByName(var_name.decode())
var.branchPriority = int(log(1 + var_priority[var_idx])) assert var is not None, f"unknown var: {var_name}"
var.BranchPriority = int(log(1 + var_priority[var_idx]))

@ -105,7 +105,8 @@ def build_stab_model_gurobipy(
model.addConstr(x[i1] + x[i2] <= 1) model.addConstr(x[i1] + x[i2] <= 1)
def cuts_separate(m: GurobiModel) -> List[Hashable]: def cuts_separate(m: GurobiModel) -> List[Hashable]:
x_val = m.inner.cbGetNodeRel(x) x_val_dict = m.inner.cbGetNodeRel(x)
x_val = [x_val_dict[i] for i in nodes]
return _stab_separate(data, x_val) return _stab_separate(data, x_val)
def cuts_enforce(m: GurobiModel, violations: List[Any]) -> None: def cuts_enforce(m: GurobiModel, violations: List[Any]) -> None:

@ -4,10 +4,10 @@
import logging import logging
import json import json
from typing import Dict, Optional, Callable, Any, List from typing import Dict, Optional, Callable, Any, List, Sequence
import gurobipy as gp import gurobipy as gp
from gurobipy import GRB, GurobiError from gurobipy import GRB, GurobiError, Var
import numpy as np import numpy as np
from scipy.sparse import lil_matrix from scipy.sparse import lil_matrix
@ -109,7 +109,11 @@ class GurobiModel(AbstractModel):
assert constrs_sense.shape == (nconstrs,) assert constrs_sense.shape == (nconstrs,)
assert constrs_rhs.shape == (nconstrs,) assert constrs_rhs.shape == (nconstrs,)
gp_vars = [self.inner.getVarByName(var_name.decode()) for var_name in var_names] gp_vars: list[Var] = []
for var_name in var_names:
v = self.inner.getVarByName(var_name.decode())
assert v is not None, f"unknown var: {var_name}"
gp_vars.append(v)
self.inner.addMConstr(constrs_lhs, gp_vars, constrs_sense, constrs_rhs) self.inner.addMConstr(constrs_lhs, gp_vars, constrs_sense, constrs_rhs)
if stats is not None: if stats is not None:
@ -188,9 +192,10 @@ class GurobiModel(AbstractModel):
var_val = var_values[var_idx] var_val = var_values[var_idx]
if np.isfinite(var_val): if np.isfinite(var_val):
var = self.inner.getVarByName(var_name.decode()) var = self.inner.getVarByName(var_name.decode())
var.vtype = "C" assert var is not None, f"unknown var: {var_name}"
var.lb = var_val var.VType = "c"
var.ub = var_val var.LB = var_val
var.UB = var_val
n_fixed += 1 n_fixed += 1
if stats is not None: if stats is not None:
stats["Fixed variables"] = n_fixed stats["Fixed variables"] = n_fixed
@ -213,7 +218,7 @@ class GurobiModel(AbstractModel):
return GurobiModel(self.inner.relax()) return GurobiModel(self.inner.relax())
def set_time_limit(self, time_limit_sec: float) -> None: def set_time_limit(self, time_limit_sec: float) -> None:
self.inner.params.timeLimit = time_limit_sec self.inner.params.TimeLimit = time_limit_sec
def set_warm_starts( def set_warm_starts(
self, self,
@ -228,12 +233,13 @@ class GurobiModel(AbstractModel):
self.inner.numStart = n_starts self.inner.numStart = n_starts
for start_idx in range(n_starts): for start_idx in range(n_starts):
self.inner.params.startNumber = start_idx self.inner.params.StartNumber = start_idx
for var_idx, var_name in enumerate(var_names): for var_idx, var_name in enumerate(var_names):
var_val = var_values[start_idx, var_idx] var_val = var_values[start_idx, var_idx]
if np.isfinite(var_val): if np.isfinite(var_val):
var = self.inner.getVarByName(var_name.decode()) var = self.inner.getVarByName(var_name.decode())
var.start = var_val assert var is not None, f"unknown var: {var_name}"
var.Start = var_val
if stats is not None: if stats is not None:
stats["WS: Count"] = n_starts stats["WS: Count"] = n_starts

Loading…
Cancel
Save