Improve solve_lp performance

pull/1/head
Alinson S. Xavier 6 years ago
parent d2a2de9183
commit b1f674fcc6
No known key found for this signature in database
GPG Key ID: A796166E4E218E02

@ -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"],

Loading…
Cancel
Save