[Clp] warmstarting problems

rm zuckerberg rmzuckerberg at gmail.com
Thu Aug 27 00:36:30 EDT 2020


Hello.

I have an algorithm that generates lp's sequentially in such a way that
each lp's optimal solution is feasible - and often near optimal - for the
next lp to be generated. As there are typically many lp's generated, it is
very desirable to be able to warmstart each lp with the previous one's
solution.

I have been using the setColSolution() function to populate the warm start,
and then solving with primal using the initialSolve() function.

While this usually works well, I've found that with a number of the more
numerically challenging problems, it often takes dramatically longer to
solve with the warmstart than it does to solve from scratch - even though
the values pass gets a near optimal solution almost right away.

Here is an lp (mps is in IEEE hex format)
https://1drv.ms/u/s!AuXES_soqYA6gsAR9IBKZSi1Z82KCA?e=y8t6nX

and here is a warmstart vector (in binary and in text)
https://1drv.ms/u/s!AuXES_soqYA6gsAQWp-V8GtrmWVpTw?e=eWNhN4
https://1drv.ms/t/s!AuXES_soqYA6gsATvj-8ChVN2fuKXg?e=RdOyIS

and here is the output log (for the warmstarted version with presolve)
https://1drv.ms/u/s!AuXES_soqYA6gsASU-UfwVfpXo7U3w?e=7vpbOi

In this case with the warmstart, both with and without presolve I stopped
the run after over an hour without a solution (despite being near optimal
from the warmstart after 3 seconds), while from scratch it takes about 2.5
minutes with presolve and 3.3 without.

These warmstarted solutions are typically not basic, but - while I'm not
posting any examples here - I observed the same thing to happen even when I
supplied a starting basis.

It may be that this is hit or miss, as sometimes turning on presolve speeds
it up a lot, and sometimes it slows it down a lot, and sometimes there is
different behavior for different solve function calls. For example, for
this problem and warmstart (in binary and in text)
https://1drv.ms/u/s!AuXES_soqYA6gsAWWWSp-0iB2IN-jw?e=Aau8Hr
https://1drv.ms/u/s!AuXES_soqYA6gsAUYqgIYROEpGxkXg?e=apXJDa
https://1drv.ms/t/s!AuXES_soqYA6gsAVsr5_oIx85LEuGQ?e=YqV4br

using the function calls:

ClpPresolve presolveInfo;
ClpSimplex* presolvedModel = presolveInfo.presolvedModel(model);
presolvedModel->primal(1);
presolveInfo.postsolve(true);
model.primal(1);

I stopped the run after 27000 seconds with no solution, while using
initialSolve() and the warmstart as above it took around 4.5 minutes to
solve. From scratch it took just under 2 minutes with presolve and just
over 1 without.

Are there any settings that I could use that may assist with this?

I'm running on Windows 10 and compiling Clp 1.17.6 with Visual Studio 2019.

Thanks very much!

Mark Zuckerberg
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://list.coin-or.org/pipermail/clp/attachments/20200827/dfff21b5/attachment.html>


More information about the Clp mailing list