Only relax binary variables; do not clear value of fixed variables

This commit is contained in:
2020-03-01 11:13:17 -06:00
parent c4faa0c708
commit 570ac09286

View File

@@ -44,14 +44,15 @@ class InternalSolver:
self.solver.set_instance(self.model) 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, Binary
original_domains = [] original_domains = []
for (idx, var) in enumerate(self.model.component_data_objects(Var)): for (idx, var) in enumerate(self.model.component_data_objects(Var)):
original_domains += [var.domain] original_domains += [var.domain]
lb, ub = var.bounds lb, ub = var.bounds
var.setlb(lb) if var.domain == Binary:
var.setub(ub) var.domain = Reals
var.domain = Reals var.setlb(lb)
var.setub(ub)
self.solver.update_var(var) self.solver.update_var(var)
# Solve LP relaxation # Solve LP relaxation
@@ -59,7 +60,8 @@ class InternalSolver:
# Restore domains # Restore domains
for (idx, var) in enumerate(self.model.component_data_objects(Var)): for (idx, var) in enumerate(self.model.component_data_objects(Var)):
var.domain = original_domains[idx] if original_domains[idx] == Binary:
var.domain = original_domains[idx]
self.solver.update_var(var) self.solver.update_var(var)
return { return {
@@ -69,6 +71,8 @@ class InternalSolver:
def clear_values(self): def clear_values(self):
for var in self.model.component_objects(Var): for var in self.model.component_objects(Var):
for index in var: for index in var:
if var[index].fixed:
continue
var[index].value = None var[index].value = None
def get_solution(self): def get_solution(self):