def test_absolute_gap_of_finite_numbers(self, lb, expected_gap): ub = lb + expected_gap gap = absolute_gap(lb, ub) if np.isclose(ub, 0.0): relative_error = np.abs(expected_gap - gap) / 1e-5 else: relative_error = np.abs(expected_gap - gap) / np.abs(ub) assert relative_error < 1e-5
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_absolute_gap_of_infinite_lower_bounds(self, ub): gap = absolute_gap(-np.inf, ub) assert gap == np.inf
def test_absolute_gap_of_infinite_upper_bounds(self, lb): gap = absolute_gap(lb, np.inf) assert gap == np.inf