mirror of
https://github.com/ANL-CEEESA/MIPLearn.git
synced 2025-12-06 09:28:51 -06:00
Improve solve_lp performance
This commit is contained in:
@@ -20,26 +20,26 @@ class InternalSolver:
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
def solve_lp(self, tee=False):
|
def solve_lp(self, tee=False):
|
||||||
|
self.solver.set_instance(self.model)
|
||||||
|
|
||||||
# Relax domain
|
# Relax domain
|
||||||
from pyomo.core.base.set_types import Reals
|
from pyomo.core.base.set_types import Reals
|
||||||
original_domain = {}
|
original_domains = []
|
||||||
for var in self.model.component_data_objects(Var):
|
for (idx, var) in enumerate(self.model.component_data_objects(Var)):
|
||||||
original_domain[str(var)] = var.domain
|
original_domains += [var.domain]
|
||||||
lb, ub = var.bounds
|
lb, ub = var.bounds
|
||||||
var.setlb(lb)
|
var.setlb(lb)
|
||||||
var.setub(ub)
|
var.setub(ub)
|
||||||
var.domain = Reals
|
var.domain = Reals
|
||||||
|
self.solver.update_var(var)
|
||||||
|
|
||||||
# Solve LP relaxation
|
# Solve LP relaxation
|
||||||
self.solver.set_instance(self.model)
|
|
||||||
results = self.solver.solve(tee=tee)
|
results = self.solver.solve(tee=tee)
|
||||||
|
|
||||||
# Restore domains
|
# Restore domains
|
||||||
for var in self.model.component_data_objects(Var):
|
for (idx, var) in enumerate(self.model.component_data_objects(Var)):
|
||||||
var.domain = original_domain[str(var)]
|
var.domain = original_domains[idx]
|
||||||
|
self.solver.update_var(var)
|
||||||
# Reload original model
|
|
||||||
self.solver.set_instance(self.model)
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
"Optimal value": results["Problem"][0]["Lower bound"],
|
"Optimal value": results["Problem"][0]["Lower bound"],
|
||||||
|
|||||||
Reference in New Issue
Block a user