void print() { for (int i = 0; i < n; i++) { int m = e[i]->getVal(); printf("e_%d = %d, ", i, m); } printf("\n"); printf("Stacks = %d\n\n", stacks->getVal()); }
bool propagate() { for (int i = 0; i < new_fixed.size(); i++) { int r = new_fixed[i]/p.m; int c = new_fixed[i]%p.m; if (TEST && r != row) { row = r; printf("Processing %dth row\n", (int) row); } if (r != row) { printf("r = %d, c = %d\n", r, c); for (int i = 0; i < p.n; i++) { for (int j = 0; j < p.m; j++) { if (p.x[i][j]->isFixed()) printf("%d, ", p.x[i][j]->getVal()); else printf("?, "); } printf("\n"); } printf("\n"); } assert(r == row); IntVar *v = p.x[r][c]; for (int j = 0; j < p.m; j++) { if (!fixed[row][j]) continue; if (p.x[row][j]->getVal() != v->getVal()) continue; int s, b; if (j < c) { s = j; b = c; } else { s = c; b = j; } int size1 = (1<<s), size2 = (1<<(b-s-1)), size3 = (1<<(p.m-b-1)); for (int v3 = 0; v3 < size3; v3++) { for (int v2 = 0; v2 < size2; v2++) { for (int v1 = 0; v1 < size1; v1++) { int z = v1 + (1<<s) + (v2<<(s+1)) + (1<<b) + (v3<<(b+1)); counts[z] = counts[z] + 1; if (counts[z] > limits[row+1][set_sizes[z]]) { printf("z = %d %x, counts[z] = %d\n", z, z, (int) counts[z]); printf("row+1 = %d, set_sizes[z] = %d, limit = %d\n", row+1, set_sizes[z], limits[row+1][set_sizes[z]]); return false; } } } } } fixed[r][c] = 1; } bool finished_row = true; for (int j = 0; j < p.m; j++) { if (!p.x[row][j]->isFixed()) { finished_row = false; break; } } if (finished_row) row = row + 1; return true; }
void print() { #if 1 for(int act = 0; act < acts; act++) { printf("["); for(int ss = 0; ss < shifts; ss++) { printf("%d",demand[ss][act]); } printf("]\n"); } #endif printf("Hours worked: %f\n",1.0*cost->getVal()/4); for(int ww = 0; ww < xv.size(); ww++) { printf("["); for (int ii = 0; ii < shifts; ii++ ) { // if(ii) // printf(", "); int val(xv[ww][ii]->getVal()); if(val < acts) { printf("%d",val); } else { switch(val - acts) { #ifdef DISTINCT_REST case G_R: printf("R"); break; case G_B: printf("B"); break; case G_L: printf("L"); break; #else case G_R: printf("R"); break; default: assert(0); break; #endif } } } printf("]\n"); } }