static void prep(void) {
adjall = ~((~(AdjWord)0) << m);
adjmatrix = xalloc_adjmatrix();
+ glp_term_out(GLP_OFF);
}
static AdjWord one_adj_bit(int bitnum) {
}
static void optimise(void) {
+ glp_prob *prob = 0;
int i, j, totalfrags;
for (i=0, totalfrags=0; i<n; i++) {
printf("%"PRADJ" ", adjmatrix[i]);
double maxminsize = (double)m / frags;
if (maxminsize < best) {
- printf(" too fine\n");
- return;
+ printf(" too fine ");
+ goto out;
}
}
* which we build up as we go.
*/
- glp_prob *prob = glp_create_prob();
+ prob = glp_create_prob();
int Y_totals_i = glp_add_rows(prob, n);
int Y_totals_j = glp_add_rows(prob, m);
int X_minimum = glp_add_cols(prob, 1);
+ {
int next_matrix_entry = 1; /* wtf GLPK! */
int matrix_entries_size = next_matrix_entry + n + m + totalfrags*2;
double matrix_entries[matrix_entries_size];
printf(" simplex=%d", r);
#define OKERR(e) \
- case e: printf(" " #e "\n"); goto out;
+ case e: printf(" " #e ); goto out;
#define BADERR(e) \
- case e: printf(" " #e " CRASHING\n"); exit(-1);
+ case e: printf(" " #e " CRASHING"); exit(-1);
#define DEFAULT \
- default: printf(" ! CRASHING\n"); exit(-1);
+ default: printf(" ! CRASHING"); exit(-1);
switch (r) {
OKERR(GLP_ESING);
double got = glp_get_obj_val(prob);
printf(" %g", got);
- if (got <= best) {
- printf("\n");
+ if (got <= best)
goto out;
- }
best = got;
best_adjmatrix = xalloc_adjmatrix();
memcpy(best_adjmatrix, adjmatrix, sizeof(*adjmatrix)*n);
- printf(" <--\n");
+ printf(" BEST \n");
return;
+ }
out:
- glp_delete_prob(prob);
+ if (prob)
+ glp_delete_prob(prob);
+ printf("\r");
}
static void iterate_recurse(int i, AdjWord min) {
m = atoi(argv[2]);
prep();
iterate();
+ printf("\n");
if (ferror(stdout) || fclose(stdout)) { perror("stdout"); exit(-1); }
return 0;
}