@@ -70,9 +70,10 @@ void strong_branch_helper(i_t start,
7070 iter,
7171 child_edge_norms);
7272
73- f_t obj = std::numeric_limits<f_t >::infinity ();
73+ f_t obj = std::numeric_limits<f_t >::quiet_NaN ();
7474 if (status == dual::status_t ::DUAL_UNBOUNDED) {
7575 // LP was infeasible
76+ obj = std::numeric_limits<f_t >::infinity ();
7677 } else if (status == dual::status_t ::OPTIMAL || status == dual::status_t ::ITERATION_LIMIT) {
7778 obj = compute_objective (child_problem, solution.x );
7879 } else {
@@ -227,11 +228,17 @@ void pseudo_costs_t<i_t, f_t>::initialized(i_t& num_initialized_down,
227228 for (i_t j = 0 ; j < n; j++) {
228229 if (pseudo_cost_num_down[j] > 0 ) {
229230 num_initialized_down++;
230- pseudo_cost_down_avg += pseudo_cost_sum_down[j] / pseudo_cost_num_down[j];
231+ if (std::isfinite (pseudo_cost_sum_down[j])) {
232+ pseudo_cost_down_avg += pseudo_cost_sum_down[j] / pseudo_cost_num_down[j];
233+ }
231234 }
235+
232236 if (pseudo_cost_num_up[j] > 0 ) {
233237 num_initialized_up++;
234- pseudo_cost_up_avg += pseudo_cost_sum_up[j] / pseudo_cost_num_up[j];
238+
239+ if (std::isfinite (pseudo_cost_sum_up[j])) {
240+ pseudo_cost_up_avg += pseudo_cost_sum_up[j] / pseudo_cost_num_up[j];
241+ }
235242 }
236243 }
237244 if (num_initialized_down > 0 ) {
@@ -317,14 +324,16 @@ void pseudo_costs_t<i_t, f_t>::update_pseudo_costs_from_strong_branching(
317324 for (i_t k = 0 ; k < fractional.size (); k++) {
318325 const i_t j = fractional[k];
319326 for (i_t branch = 0 ; branch < 2 ; branch++) {
320- const f_t frac = branch == 0 ? root_soln[j] - std::floor (root_soln[j])
321- : std::ceil (root_soln[j]) - root_soln[j];
322327 if (branch == 0 ) {
323328 f_t change_in_obj = strong_branch_down[k];
329+ if (std::isnan (change_in_obj)) { continue ; }
330+ f_t frac = root_soln[j] - std::floor (root_soln[j]);
324331 pseudo_cost_sum_down[j] += change_in_obj / frac;
325332 pseudo_cost_num_down[j]++;
326333 } else {
327334 f_t change_in_obj = strong_branch_up[k];
335+ if (std::isnan (change_in_obj)) { continue ; }
336+ f_t frac = std::ceil (root_soln[j]) - root_soln[j];
328337 pseudo_cost_sum_up[j] += change_in_obj / frac;
329338 pseudo_cost_num_up[j]++;
330339 }
0 commit comments