[SCIP] Time limit

Stefan Vigerske svigerske at gams.com
Mon Oct 4 11:48:15 CEST 2021


Hi,

SCIP passes the timelimit on to Ipopt, but Ipopt cannot pass on a 
timelimit to MUMPS (which seems to be the linear solver that is used by 
your Ipopt installation), because MUMPS doesn't have such a 
functionality. So if the timelimit is execeeded during the linear system 
solve in MUMPS, then there is nothing stopping SCIP before MUMPS returns.
Try using a better linear solver for Ipopt 
(https://coin-or.github.io/Ipopt/index.html#PREREQUISITES). The HSL 
codes and Pardiso are usually good.

Stefan


On 9/29/21 12:53, Marco Correia wrote:
> Thanks Ambros. With a debugger I can see that the solver spends the 8
> seconds somewhere inside Ipopt. Here is a typical stack trace during that
> period:
> 
> libopenblas.so.0!blas_memory_alloc (Unknown Source:0)
> libblas.so.3!dtrsv_ (Unknown Source:0)
> libscip.so.7.0!dmumps_302_ (Unknown Source:0)
> libscip.so.7.0!dmumps_248_ (Unknown Source:0)
> libscip.so.7.0!dmumps_245_ (Unknown Source:0)
> libscip.so.7.0!dmumps_301_ (Unknown Source:0)
> libscip.so.7.0!dmumps_ (Unknown Source:0)
> libscip.so.7.0!dmumps_f77_ (Unknown Source:0)
> libscip.so.7.0!dmumps_c (Unknown Source:0)
> libscip.so.7.0!Ipopt::MumpsSolverInterface::Solve(int, double*) (Unknown
> Source:0)
> libscip.so.7.0!Ipopt::TSymLinearSolver::MultiSolve(Ipopt::SymMatrix const&,
> std::vector<Ipopt::SmartPtr<Ipopt::Vector const>,
> std::allocator<Ipopt::SmartPtr<Ipopt::Vector const> > >&,
> std::vector<Ipopt::SmartPtr<Ipopt::Vector>,
> std::allocator<Ipopt::SmartPtr<Ipopt::Vector> > >&, bool, int) (Unknown
> Source:0)
> libscip.so.7.0!Ipopt::StdAugSystemSolver::MultiSolve(Ipopt::SymMatrix
> const*, double, Ipopt::Vector const*, double, Ipopt::Vector const*, double,
> Ipopt::Matrix const*, Ipopt::Vector const*, double, Ipopt::Matrix const*,
> Ipopt::Vector const*, double, std::vector<Ipopt::SmartPtr<Ipopt::Vector
> const>, std::allocator<Ipopt::SmartPtr<Ipopt::Vector const> > >&,
> std::vector<Ipopt::SmartPtr<Ipopt::Vector const>,
> std::allocator<Ipopt::SmartPtr<Ipopt::Vector const> > >&,
> std::vector<Ipopt::SmartPtr<Ipopt::Vector const>,
> std::allocator<Ipopt::SmartPtr<Ipopt::Vector const> > >&,
> std::vector<Ipopt::SmartPtr<Ipopt::Vector const>,
> std::allocator<Ipopt::SmartPtr<Ipopt::Vector const> > >&,
> std::vector<Ipopt::SmartPtr<Ipopt::Vector>,
> std::allocator<Ipopt::SmartPtr<Ipopt::Vector> > >&,
> std::vector<Ipopt::SmartPtr<Ipopt::Vector>,
> std::allocator<Ipopt::SmartPtr<Ipopt::Vector> > >&,
> std::vector<Ipopt::SmartPtr<Ipopt::Vector>,
> std::allocator<Ipopt::SmartPtr<Ipopt::Vector> > >&,
> std::vector<Ipopt::SmartPtr<Ipopt::Vector>,
> std::allocator<Ipopt::SmartPtr<Ipopt::Vector> > >&, bool, int) (Unknown
> Source:0)
> libscip.so.7.0!Ipopt::AugSystemSolver::Solve(Ipopt::SymMatrix const*,
> double, Ipopt::Vector const*, double, Ipopt::Vector const*, double,
> Ipopt::Matrix const*, Ipopt::Vector const*, double, Ipopt::Matrix const*,
> Ipopt::Vector const*, double, Ipopt::Vector const&, Ipopt::Vector const&,
> Ipopt::Vector const&, Ipopt::Vector const&, Ipopt::Vector&, Ipopt::Vector&,
> Ipopt::Vector&, Ipopt::Vector&, bool, int) (Unknown Source:0)
> libscip.so.7.0!Ipopt::PDFullSpaceSolver::SolveOnce(bool, bool,
> Ipopt::SymMatrix const&, Ipopt::Matrix const&, Ipopt::Matrix const&,
> Ipopt::Matrix const&, Ipopt::Matrix const&, Ipopt::Matrix const&,
> Ipopt::Matrix const&, Ipopt::Vector const&, Ipopt::Vector const&,
> Ipopt::Vector const&, Ipopt::Vector const&, Ipopt::Vector const&,
> Ipopt::Vector const&, Ipopt::Vector const&, Ipopt::Vector const&,
> Ipopt::Vector const&, Ipopt::Vector const&, double, double,
> Ipopt::IteratesVector const&, Ipopt::IteratesVector&) (Unknown Source:0)
> libscip.so.7.0!Ipopt::PDFullSpaceSolver::Solve(double, double,
> Ipopt::IteratesVector const&, Ipopt::IteratesVector&, bool, bool) (Unknown
> Source:0)
> libscip.so.7.0!Ipopt::QualityFunctionMuOracle::CalculateMu(double, double,
> double&) (Unknown Source:0)
> libscip.so.7.0!Ipopt::AdaptiveMuUpdate::UpdateBarrierParameter() (Unknown
> Source:0)
> libscip.so.7.0!Ipopt::IpoptAlgorithm::UpdateBarrierParameter() (Unknown
> Source:0)
> libscip.so.7.0!Ipopt::IpoptAlgorithm::Optimize(bool) (Unknown Source:0)
> libscip.so.7.0!Ipopt::IpoptApplication::call_optimize() (Unknown Source:0)
> libscip.so.7.0!Ipopt::IpoptApplication::OptimizeNLP(Ipopt::SmartPtr<Ipopt::NLP>
> const&, Ipopt::SmartPtr<Ipopt::AlgorithmBuilder>&) (Unknown Source:0)
> libscip.so.7.0!Ipopt::IpoptApplication::OptimizeNLP(Ipopt::SmartPtr<Ipopt::NLP>
> const&) (Unknown Source:0)
> libscip.so.7.0!Ipopt::IpoptApplication::OptimizeTNLP(Ipopt::SmartPtr<Ipopt::TNLP>
> const&) (Unknown Source:0)
> libscip.so.7.0![Unknown/Just-In-Time compiled code] (Unknown Source:0)
> libscip.so.7.0!SCIPnlpiSolve (Unknown Source:0)
> libscip.so.7.0![Unknown/Just-In-Time compiled code] (Unknown Source:0)
> libscip.so.7.0!SCIPsolve (Unknown Source:0)
> miplib::ScipSolver::solve(miplib::ScipSolver * const this)
> (/home/marco/projects/gnosis/repo/gp-v2-solver-lib/deps/miplib/miplib/scip/solver.cpp:352)
> miplib::Solver::solve(miplib::Solver * const this)
> (/home/marco/projects/gnosis/repo/gp-v2-solver-lib/deps/miplib/miplib/solver.cpp:134)
> QUCPSolver::solve(QUCPSolver * const this)
> (/home/marco/projects/gnosis/repo/gp-v2-solver-lib/src/solvers/qucp_solver/QUCPSolver.cpp:619)
> solve_scaled_ucp(const BatchAuction & scaled_batch_auction, const
> QUCPSolverParameters & solver_parameters, double max_price, const
> std::chrono::time_point<std::chrono::_V2::steady_clock,
> std::chrono::duration<long, std::ratio<1, 1000000000> > > & start_time)
> (/home/marco/projects/gnosis/repo/gp-v2-solver-lib/src/solvers/qucp_solver/solve.cpp:128)
> solve(const BatchAuction & batch_auction, const QUCPSolverParameters &
> solver_parameters, const
> std::chrono::time_point<std::chrono::_V2::steady_clock,
> std::chrono::duration<long, std::ratio<1, 1000000000> > > & start_time)
> (/home/marco/projects/gnosis/repo/gp-v2-solver-lib/src/solvers/qucp_solver/solve.cpp:190)
> main(int argc, char ** argv)
> (/home/marco/projects/gnosis/repo/gp-v2-solver-lib/src/solvers/qucp_solver/cli.cpp:52)
> 
> On Wed, Sep 29, 2021 at 10:57 AM Ambros Gleixner <gleixner at zib.de> wrote:
> 
>> Hi Marco,
>>
>> But I agree that 18 vs 10 s is a bit odd.  You can look at the
>> statistics and check whether there is one plugin that took a long time,
>> then probably there we should include more regular checks.  If you have
>> any insight like this, then please report this as a bug.
>>
>> Best,
>> Ambros
>>
>>
>> Am 28.09.21 um 21:05 schrieb Marc Pfetsch:
>>>
>>>
>>> Hi Marco,
>>>
>>> the time limit is only checked from time to time. Thus, it might be that
>>> SCIP runs slightly longer than the time limit. This behavior is
>>> independent of whether SCIP found a solution or not.
>>>
>>> Best
>>>
>>> Marc
>>>
>>> On 28/09/2021 10.32, Marco Correia wrote:
>>>> Hi,
>>>>
>>>> It appears sometimes SCIP has a very relaxed interpretation of the
>>>> "limits/time" parameter. For example, I just run an instance with
>>>> "limits/time = 10s" and SCIP tool 18s.
>>>>
>>>> Not sure if relevant, but this is a quadratic problem, and has lazy
>>>> constraints (time in lazy constraint generation is negligible though,
>>>> in this particular instance it was 0.01s).
>>>>
>>>> I am expecting that SCIP honors the timelimit parameter, even if it
>>>> can't find any solution. Maybe this assumption is wrong?
>>>>
>>>> Thanks
>>>> Marco
>>>>
>>>> _______________________________________________
>>>> Scip mailing list
>>>> Scip at zib.de
>>>> https://listserv.zib.de/mailman/listinfo/scip
>>>>
>>> _______________________________________________
>>> Scip mailing list
>>> Scip at zib.de
>>> https://listserv.zib.de/mailman/listinfo/scip
>> _______________________________________________
>> Scip mailing list
>> Scip at zib.de
>> https://listserv.zib.de/mailman/listinfo/scip
>>
> 
> 
> _______________________________________________
> Scip mailing list
> Scip at zib.de
> https://listserv.zib.de/mailman/listinfo/scip
> 



More information about the Scip mailing list