All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
solvereal.cpp
Go to the documentation of this file.
34 // solve and store solution; if we have a starting basis, do not apply preprocessing; if we are solving from
77 // in case of infeasibility or unboundedness, we currently can not unsimplify, but have to solve the original LP again
114 // store regular basis if there is no simplifier and the original problem is not in the solver because of
123 _solver.getBasis(_basisStatusRows.get_ptr(), _basisStatusCols.get_ptr(), _basisStatusRows.size(), _basisStatusCols.size());
162 // preprocessing is always applied to the LP in the solver; hence we have to create a copy of the original LP
185 ///@todo this should not fail even if the basis is invalid (wrong dimension or wrong number of basic
190 // if there is no preprocessing, then the original and the transformed problem are identical and it is more
211 simplificationStatus = _simplifier->simplify(_solver, realParam(SoPlex::EPSILON_ZERO), realParam(SoPlex::FEASTOL), realParam(SoPlex::OPTTOL), keepbounds);
232 /// loads original problem into solver and solves again after it has been solved to optimality with preprocessing
240 // if simplifier is active and LP is solved in presolving or to optimality, then we unsimplify to get the basis
277 _solver.getBasis(_basisStatusRows.get_ptr(), _basisStatusCols.get_ptr(), _basisStatusRows.size(), _basisStatusCols.size());
282 _simplifier->unsimplify(primal, dual, slacks, redCost, _basisStatusRows.get_ptr(), _basisStatusCols.get_ptr());
283 _simplifier->getBasis(_basisStatusRows.get_ptr(), _basisStatusCols.get_ptr(), _basisStatusRows.size(), _basisStatusCols.size());
288 MSG_ERROR( std::cerr << "Caught exception <" << E.what() << "> during unsimplification. Resolving without simplifier and scaler.\n" );
292 MSG_ERROR( std::cerr << "Caught unknown exception during unsimplification. Resolving without simplifier and scaler.\n" );
296 // if the original problem is not in the solver because of scaling, we also need to store the basis
304 _solver.getBasis(_basisStatusRows.get_ptr(), _basisStatusCols.get_ptr(), _basisStatusRows.size(), _basisStatusCols.size());
315 /// stores solution of the real LP; before calling this, the real LP must be loaded in the solver and solved (again)
330 assert(_solver.basis().status() == SPxBasis::UNBOUNDED || _solver.basis().status() == SPxBasis::NO_PROBLEM || status() != SPxSolver::UNBOUNDED);
334 || ((_solver.basis().status() == SPxBasis::PRIMAL || _solver.basis().status() == SPxBasis::UNBOUNDED)
362 assert(_solver.basis().status() == SPxBasis::INFEASIBLE || _solver.basis().status() == SPxBasis::NO_PROBLEM || status() != SPxSolver::INFEASIBLE);
365 || ((_solver.basis().status() == SPxBasis::DUAL || _solver.basis().status() == SPxBasis::INFEASIBLE)
|