[Scip] Ensuring a presolver runs last

michael.winkler@zib.de michael.winkler at zib.de
Fri Jan 28 01:47:55 MET 2011


After Tobias and Gregor answered the question how to collect data after
presolving I would like to add how to run your presolver as the last one.

As suggested set PRESOL_DELAY to TRUE and choose to lowest value for
PRESOL_PRIORITY, negativ values mean that you get called after all
constraint handlers presolving. (In the SCIP interactive shell you can see
the presolver priorities by entering "display presolvers", by default
probing with -100000 should be the lowest value, so choose for example
-500000.)
As a result after all not delayed presolvers didn't found "enough"
reductions all delayed presolvers start to run ordered by decreasing
priorities. But if any delayed presolver found "enough" reductions you get
called again. You can try to avoid running multiple times by checking the
parameters give to your SCIP_DECL_PRESOLEXEC callback method (see
type_presol.c), like "nnewfixedvars", which with bigger values than zero
mostly lead to another presolving round.

I would like to add that setting "presolving maxrounds" to 1 normally
leads to one presolving round with not delayed and one with delayed
preolvers. The resulting "(2 rounds)" displayed at the end of presolving
only states the round in which the presolving has stopped.

Best, Michael

> If I understand you correctly, you want to collect some data after
> presolving has finished
> and the presolved model is well-defined. I guess you need this data for
> your cut
> separation or constraint handlers or heuristics or whathaveyou...
>
> In this case, the INITSOL callback is more appropriate, and you you should
> do this in the
> plugin that actually needs the information. If the information is shared
> by multiple
> plugins than it is probably the cleanest solution to call the method to
> collect the data
> from each of the plugin's INITSOL callbacks, but of course only if it does
> not yet exist.
> Then, you can safely remove a plugin without having to worry that some
> other plugin
> suddenly misses its data.
>
>
> Tobias
>
>
> Gregor Hendel wrote:
>> Am 27.01.2011 17:44, schrieb Martin Bergner:
>>
>> Hi Martin,
>>
>> have you already tried to implement your data collection in the
>> presolexitpre-callback within your presolver-plugin? This callback is
>> supposed to be called after all presolvers have finished and hence
>> you should get the data you want.
>>
>> Best, gregor
>>> Hi all,
>>>
>>> I want to ensure that the presolver I use runs as the "last" presolver.
>>> The reason for this is that it is extremely expensive and I want to
>>> profit from SCIP's other presolvers. I thought I can achieve that by
>>> giving it an extremely low priority (lower then any of the presolvers
>>> included in scip) and setting PRESOL_DELAY to TRUE in order that it
>>> gets
>>> delayed if other presolver found reductions.
>>>
>>> However, I discovered that SCIP runs other presolver after my presolver
>>> has run. This is not what I want, since my presolver actually doesn't
>>> do
>>> anything, it justs collects information. The collected information is
>>> useless once SCIP performs some kind of presolving and I would have to
>>> do the rather expensive collection again.
>>>
>>> It doesn't matter whether I return SCIP_DIDNOTFIND or SCIP_SUCCESS,
>>> whether I set presolving/maxrounds = 1. SCIP always runs 2 rounds and
>>> my
>>> presolver is not the last. What did I forget?
>>>
>>> Can I at least find out that SCIP wants to do something after my
>>> presolver so that I can delay it by myself? I need to be sure however,
>>> that SCIP really runs my presolver again. On most of the instances,
>>> this
>>> behaviour does not occur, but there are some where it does. It has been
>>> present with SCIP 1.2.* as well and I'm currently using 2.0.1.
>>>
>>> Regards,
>>> Martin
>>>
>>> _______________________________________________
>>> Scip mailing list
>>> Scip at zib.de
>>> http://listserv.zib.de/mailman/listinfo/scip
>>
>> _______________________________________________
>> Scip mailing list
>> Scip at zib.de
>> http://listserv.zib.de/mailman/listinfo/scip
> _______________________________________________
> Scip mailing list
> Scip at zib.de
> http://listserv.zib.de/mailman/listinfo/scip
>



More information about the Scip mailing list