static void set_best(double new_best) {
best = new_best;
- n_max_frags = floor(n / best);
- m_max_frags = floor(m / best);
+ /*
+ * When computing n_max_frags, we want to set a value that will skip
+ * anything that won't provide strictly better solutions. So we
+ * want
+ * frags < n / best
+ * _ _
+ * <=> frags < | n / best |
+ * _ _
+ * <=> frags <= | n / best | - 1
+ */
+ n_max_frags = ceil(n / best) - 1;
+ m_max_frags = ceil(m / best) - 1;
}
/*----- multicore support -----*/
glp_set_obj_coef(prob, X_minimum, 1);
for (i=0; i<n; i++) {
- for (j=0, jbit=1; j<m; j++, jbit<<=1) {
+ FOR_BITS(j,m) {
if (!(adjmatrix[i] & jbit))
continue;
/* x_total_i += x_minimum */