int changeCbcSolver (CoinParam *param) { assert (param != 0) ; CbcGenParam *genParam = dynamic_cast<CbcGenParam *>(param) ; assert (genParam != 0) ; CbcGenCtlBlk *ctlBlk = genParam->obj() ; assert (ctlBlk != 0) ; CoinMessageHandler *msghandler = ctlBlk->messageHandler() ; /* Setup to return nonfatal/fatal error (1/-1) by default. */ int retval ; if (CoinParamUtils::isInteractive()) { retval = 1 ; } else { retval = -1 ; } /* Try to locate the solver specified by the user. */ const std::string solverName = genParam->kwdVal() ; OsiSolverInterface *protoOsi = solvers[solverName] ; if (protoOsi == 0) { std::cerr << "Can't find solver \"" << solverName << "\" in the solvers vector." << std::endl ; return (retval) ; } ctlBlk->dfltSolver_ = protoOsi ; /* We have a solver. */ ctlBlk->message(CBCGEN_NEW_SOLVER) << solverName << CoinMessageEol ; CbcModel *model = ctlBlk->model_ ; assert (model != 0) ; OsiSolverInterface *newOsi = protoOsi->clone() ; model->assignSolver(newOsi) ; return (0) ; }