[Coin-discuss] Correct use of CglPreProcess with CbcModel?

John J Forrest jjforre at us.ibm.com
Thu Mar 30 06:21:39 EST 2006


James,

Could not find a memory leak in preprocessing but did find a major one in
CbcModel so try again.

Dual solution after branch and bound not very useful anyway.  Preferred
method for primal solution is CbcModel::bestSolution()

John Forrest


                                                                           
             "James Gibbons"                                               
             <James.Gibbons at no                                             
             ttingham.ac.uk>                                            To 
             Sent by:                  <coin-discuss at list.coin-or.org>     
             coin-discuss-boun                                          cc 
             ces at list.coin-or.                                             
             org                                                   Subject 
                                       Re: [Coin-discuss] Correct use of   
                                       CglPreProcess with CbcModel?        
             03/29/06 09:14 AM                                             
                                                                           
                                                                           
             Please respond to                                             
             Discussions about                                             
                open source                                                
               software for                                                
                Operations                                                 
                 Research                                                  
             <coin-discuss at lis                                             
              t.coin-or.org>                                               
                                                                           
                                                                           




Hi John,

I've tried the second way, i.e using:

//strategy and branching
    CbcStrategyDefault strategy(false,10);
    //Set up pre-processing to find sos if wanted
    if (preprocess_) strategy.setupPreProcessing(2);
    model.setStrategy(strategy);

Unfortunately, I still get a memory leak, at roughly the same rate as
before. To check there isn't something wrong elsewhere in my code I've
tried running with everything except the global solve function. Under this
scenario there is no memory leak, which I guess confirms that the problem
is in CbcModel somewhere.

Incidently, using this second approach am I right in thinking that to get
the solution from the CbcModel object (model) back into my original
solver0_  (OsiClpSolverInterface) I have to use:

solver0_->setColSolution(model.getColSolution());
solver0_->setRowPrice(model.getRowPrice());

i.e. it doesn't happen automatically as with CglPreProcess?

Thanks,
James

James,

Try the second way of using CglPreProcess as given in sample2.cpp.  This
uses CbcStrategy and passes that in to Cbcmodel.  So CbcModel handles
copies of solvers.  If that has a memory leak tell me and I will fix.

John Forrest



"James Gibbons" <James.Gibbons at nottingham.ac.uk>
Sent by: coin-discuss-bounces at list.coin-or.org
03/28/2006 08:46 AM
Please respond to
Discussions about open source software for Operations Research
<coin-discuss at list.coin-or.org>


To
<coin-discuss at list.coin-or.org>
cc

Subject
[Coin-discuss] Correct use of CglPreProcess with CbcModel?






Hi,

I'm having some problems using CglPreProcess and CbcModel together. My
code involves modifying a matrix, solving and changing the many times. My
code works but it leaks memory until eventually all memory is exhausted.
The essentials of the code are at the end of this message (note though
that in my application the LP solve and global solver are in different
functions, and heuristics and cuts are used). To my naive eye it looks
like I need to delete solver1 as preProcess returns a new solver instance,
but this causes a crash. I'm happy to go about things in a different way
if anyone can recommend an alternative. However, CglPreProcess does reduce
the time to find a solution for me so I'd like to keep using it,

Thanks,
James

//code as follows

solver0_(new OsiClpSolverInterface());
solver0_->readLp(filename_.c_str(),1e-08);

for(int i=0;i<numRuns;++i) {

                 //LP solve function
                 solver0_->intitalSolve();

                 //Global solve function
                 CglPreProcess pinfo1;
                 OsiSolverInterface *solver1 =
pinfo1.preProcess(*solver0_,false,15);
                 CbcModel model(*solver1);

                 //add cuts and heuristics to model

                 model.branchAndBound();
                 model.deleteObjects();          //is this necessary?
                 pinfo1.postProcess(*model.solver());
                 //delete solver1;               //causes crash

                 //my update matrix function
                 updateMatrix();
}

delete solver0_;


This message has been checked for viruses but the contents of an attachment
may still contain software viruses, which could damage your computer
system:
you are advised to perform your own checks. Email communications with the
University of Nottingham may be monitored as permitted by UK legislation.


_______________________________________________
Coin-discuss mailing list
Coin-discuss at list.coin-or.org
http://list.coin-or.org/mailman/listinfo/coin-discuss





More information about the Coin-discuss mailing list