def update_solution_bound(galini, tree, delta_t): """Increment the lower and upper bound and their integrals.""" update_gauge(galini, 'branch_and_bound.lower_bound', tree.lower_bound) update_gauge(galini, 'branch_and_bound.upper_bound', tree.upper_bound) # Compute relative gap gap = relative_gap(tree.lower_bound, tree.upper_bound, galini.mc) gap = np.min([gap, 1.0]) update_gauge(galini, 'branch_and_bound.relative_gap', gap, initial_value=1.0) update_counter(galini, 'branch_and_bound.relative_gap_integral', gap * delta_t, initial_value=0.0)
def _has_converged(self, state): rel_gap = relative_gap(state.lower_bound, state.upper_bound) abs_gap = absolute_gap(state.lower_bound, state.upper_bound) bounds_close = is_close( state.lower_bound, state.upper_bound, rtol=self.relative_tolerance, atol=self.tolerance, ) if self.galini.paranoid_mode: assert (state.lower_bound <= state.upper_bound or bounds_close) return ( rel_gap <= self.relative_tolerance or abs_gap <= self.tolerance )
def has_converged(self, state): rel_gap = relative_gap(state.lower_bound, state.upper_bound, self.galini.mc) abs_gap = absolute_gap(state.lower_bound, state.upper_bound, self.galini.mc) bounds_close = is_close( state.lower_bound, state.upper_bound, rtol=self.bab_config['relative_gap'], atol=self.bab_config['absolute_gap'], ) if self.galini.paranoid_mode: assert (state.lower_bound <= state.upper_bound or bounds_close) return (rel_gap <= self.bab_config['relative_gap'] or abs_gap <= self.bab_config['absolute_gap'])
def test_relative_gap_of_infinite_lower_bounds(self, ub): gap = relative_gap(-np.inf, ub) assert gap == np.inf
def test_relative_gap_of_infinite_upper_bounds(self, lb): gap = relative_gap(lb, np.inf) assert gap == np.inf
def test_relative_gap_of_finite_numbers(self): lb = 100.0 ub = 100.00001 gap = relative_gap(lb, ub) assert gap < 1e-5