Beispiel #1
0
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)
Beispiel #2
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
        )
Beispiel #3
0
    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'])
Beispiel #4
0
 def test_relative_gap_of_infinite_lower_bounds(self, ub):
     gap = relative_gap(-np.inf, ub)
     assert gap == np.inf
Beispiel #5
0
 def test_relative_gap_of_infinite_upper_bounds(self, lb):
     gap = relative_gap(lb, np.inf)
     assert gap == np.inf
Beispiel #6
0
 def test_relative_gap_of_finite_numbers(self):
     lb = 100.0
     ub = 100.00001
     gap = relative_gap(lb, ub)
     assert gap < 1e-5