-#ifdef DUMP_MIQP
-static void pi_dump_miqp(problem_instance_t *pi) {
- int i;
- matrix_elem_t *e;
- FILE *out = ffopen(pi->co->name, "miqp", "wt");
-
- DBG((dbg, LEVEL_1, "Dumping miqp...\n"));
-
- pi->bigM = 42;
- fprintf(out, "NAME %s\n", pi->co->name);
- fprintf(out, "ROWS\n");
- fprintf(out, " N obj\n");
- for (i=0; i<pi->A_dim; ++i)
- fprintf(out, " E cA%d\n", i);
- for (i=0; i<pi->B_dim; ++i)
- fprintf(out, " L cB%d\n", i);
-
- fprintf(out, "COLUMNS\n");
- /* the x vars come first */
- /* mark them as binaries */
- fprintf(out, " MARKI0\t'MARKER'\t'INTORG'\n");
- for (i=0; i<pi->x_dim; ++i) {
- /* participation in objective */
- fprintf(out, " x%d_%d\tobj\t%d\n", pi->x[i].n, pi->x[i].c, -pi->bigM);
- /* in A */
- matrix_foreach_in_col(pi->A, i, e)
- fprintf(out, " x%d_%d\tcA%d\t%d\n", pi->x[i].n, pi->x[i].c, e->row, e->val);
- /* in B */
- matrix_foreach_in_col(pi->B, i, e)
- fprintf(out, " x%d_%d\tcB%d\t%d\n", pi->x[i].n, pi->x[i].c, e->row, e->val);
- }
- fprintf(out, " MARKI1\t'MARKER'\t'INTEND'\n"); /* end of marking */
-
- fprintf(out, "RHS\n");
- for (i=0; i<pi->A_dim; ++i)
- fprintf(out, " rhs\tcA%d\t%d\n", i, 1);
- for (i=0; i<pi->B_dim; ++i)
- fprintf(out, " rhs\tcB%d\t%d\n", i, 1);
-
- fprintf(out, "QMATRIX\n"); /* 1/2 (Q + Q^T) */
- /* the diag entries */
- for (i=0; i<pi->x_dim; ++i) {
- int val = matrix_get(pi->Q, i, i) + pi->bigM;
- fprintf(out, " x%d_%d\tx%d_%d\t%d\n", pi->x[i].n, pi->x[i].c, pi->x[i].n, pi->x[i].c, val);
- }
- /* the off-diag entries */
- for (i=0; i<matrix_get_rowcount(pi->Q); ++i)
- matrix_foreach_in_row(pi->Q, i, e) {
- int val;
- if (e->col >= e->row)
- break;
- val = e->val + matrix_get(pi->Q, e->col, e->row); /* the transposed entry */
- fprintf(out, " x%d_%d\tx%d_%d\t%d\n", pi->x[i].n, pi->x[i].c, pi->x[e->col].n, pi->x[e->col].c, val);
- fprintf(out, " x%d_%d\tx%d_%d\t%d\n", pi->x[e->col].n, pi->x[e->col].c, pi->x[i].n, pi->x[i].c, val);