[Scip] Ensuring a presolver runs last

Tobias Achterberg achterberg at zib.de
Thu Jan 27 19:27:35 MET 2011


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


More information about the Scip mailing list