|
18 | 18 | import numpy as np
|
19 | 19 | import pyomo.environ as pe
|
20 | 20 | from coramin.relaxations.iterators import relaxation_data_objects
|
| 21 | +from galini.branch_and_cut.branching import BILINEAR_RELAXATIONS_TYPES |
21 | 22 | from galini.math import is_close
|
22 | 23 | from galini.pyomo import safe_set_bounds
|
23 | 24 | from galini.pyomo.util import update_solver_options
|
@@ -72,13 +73,14 @@ def perform_obbt_on_model(solver, model, linear_model, upper_bound, timelimit, r
|
72 | 73 | # collect variables in nonlinear constraints
|
73 | 74 | nonlinear_variables = ComponentSet()
|
74 | 75 | for relaxation in relaxation_data_objects(linear_model, active=True, descend_into=True):
|
75 |
| - for var in relaxation.get_rhs_vars(): |
76 |
| - # Coramin will complain about variables that are fixed |
77 |
| - if not var.has_lb() or not var.has_ub(): |
78 |
| - nonlinear_variables.add(var) |
79 |
| - else: |
80 |
| - if not np.abs(var.ub - var.lb) < mc.epsilon: |
| 76 | + if not isinstance(relaxation, BILINEAR_RELAXATIONS_TYPES): |
| 77 | + for var in relaxation.get_rhs_vars(): |
| 78 | + # Coramin will complain about variables that are fixed |
| 79 | + if not var.has_lb() or not var.has_ub(): |
81 | 80 | nonlinear_variables.add(var)
|
| 81 | + else: |
| 82 | + if not np.abs(var.ub - var.lb) < mc.epsilon: |
| 83 | + nonlinear_variables.add(var) |
82 | 84 |
|
83 | 85 | time_left = timelimit - seconds_elapsed_since(obbt_start_time)
|
84 | 86 | nonlinear_variables = list(nonlinear_variables)
|
@@ -140,6 +142,8 @@ def perform_obbt_on_model(solver, model, linear_model, upper_bound, timelimit, r
|
140 | 142 |
|
141 | 143 | for var, new_lb, new_ub in zip(nonlinear_variables, *result):
|
142 | 144 | original_var = model.find_component(var.getname(fully_qualified=True))
|
| 145 | + if original_var is None: |
| 146 | + continue |
143 | 147 | new_lb = best_lower_bound(var, new_lb, var.lb, eps)
|
144 | 148 | new_ub = best_upper_bound(var, new_ub, var.ub, eps)
|
145 | 149 | if np.abs(new_ub - new_lb) < eps:
|
|
0 commit comments