mirror of
https://github.com/ANL-CEEESA/MIPLearn.git
synced 2025-12-06 09:28:51 -06:00
Update to Gurobi 11
This commit is contained in:
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user