#include #include #include #include void doit() { const unsigned int n = 250; // number of vertices const unsigned int n0 = 104; // number of vertices in first partition CoinPackedMatrix *matrix = new CoinPackedMatrix(true, 0.5, 0.0); matrix->setDimensions(n, 0); const double ones[2] = {1, 1}; int idx[2]; unsigned int m = 0; // counter for the number of edges const double p = 0.4; // edge probability for (unsigned int i=0; iappendCol(2, &idx[0], &ones[0]); ++m; } double *row_lb = new double[n]; double *row_ub = new double[n]; double *col_lb = new double[m]; double *col_ub = new double[m]; double *objective = new double[m]; for (unsigned int i=0; imessageHandler()->setLogLevel(0); si->assignProblem(matrix, col_lb, col_ub, objective, row_lb, row_ub); si->setObjSense(-1); // 1 min, -1 max ClpSolve solveOptions; ClpSolve::SolveType method; ClpSolve::PresolveType presolveType; presolveType=ClpSolve::presolveOff; solveOptions.setPresolveType(presolveType,0); method=ClpSolve::usePrimalorSprint; solveOptions.setSolveType(method); solveOptions.setSpecialOption(1,3,100); // sprint si->getModelPtr()->setLogLevel(0); si->getModelPtr()->initialSolve(solveOptions); //si->resolve(); assert(si->isProvenOptimal()); const double *t = si->getColSolution(); bool bad=false; for (unsigned int i=0; i1-(1e-2))) ) { std::cout << t[i] << std::endl; bad=true; } } if (bad) { printf("Odd solution - %d columns\n",m); si->getModelPtr()->allSlackBasis(true); si->getModelPtr()->dual(); for (unsigned int i=0; i1-(1e-2))) ) { std::cout << t[i] << std::endl; } } } delete si; delete matrix; delete[] row_lb; delete[] row_ub; delete[] col_lb; delete[] col_ub; delete[] objective; } int main() { srand48(0); for (unsigned int i=0; i<9999; ++i) doit(); return 0; }