Decision Optimization

Decision Optimization

Delivers prescriptive analytics capabilities and decision intelligence to improve decision-making.


#Analytics
#DecisionOptimization
#DecisionOptimization
 View Only
  • 1.  Solution pool generated by CPLEX optimization

    Posted 01/03/16 02:56 PM

    Originally posted by: Deanna1125


    Hi, 

    In this CPLEX technote (http://www-01.ibm.com/support/docview.wss?uid=swg21399968), it says (recent versions of) CPLEX will store all solutions found during the course of the MIP optimization in the solution pool. I am using CPLEX 12.4. I wonder whether all the solutions stored in the solution pool automatically after solving a MIP model to optimality are incumbent solutions, or any valid solutions (i.e. incumbent solutions and those determined to be inferior to the incumbent solution) found by CPLEX along the way of optimizations.

     

    Also, I found that the parameter SolnPoolIntensity only works for populate() method. By doing experiments, I found that no matter which value I set the solnPoolIntensity to, the solution pool returned by only calling solve() (i.e. only do optimization)  stay the same. Is it supposed to be this way? 

    Thanks very much in advance.

     

     


    #CPLEXOptimizers
    #DecisionOptimization


  • 2.  Re: Solution pool generated by CPLEX optimization

    Posted 01/04/16 01:30 AM

    I am not exactly clear what you mean by your first question. There is always only one single incumbent solution: the best solution seen so far. If a better solution is found then the previous incumbent is saved in the solution pool and the better solution is made the new incumbent. So by default the solution pool contains the solutions that were an incumbent solution at some point in the solution process.

    As you can see in the reference documentation for solution pool intensitiy this parameter has no direct effect on calls to solve():

    For MIP optimization, increasing the value of the parameter corresponds to increasing the amount of effort spent setting up the branch and cut tree to prepare for a subsequent call to the populate procedure.

    You will only see an effect if you call popluate() after solve().


    #CPLEXOptimizers
    #DecisionOptimization


  • 3.  Re: Solution pool generated by CPLEX optimization

    Posted 01/04/16 12:45 PM

    Originally posted by: Deanna1125


    Thanks very much for your prompt response, Daniel! Sorry for not being very clear on my first question. I think you answered my second question and almost answered my first question.

    As per the first question, I understand that there is always one incumbent solution (again, sorry for the confusing wording). According to your answer, you mean all the solutions automatically stored in the solution pool by the optimization process were once a time an incumbent solution found by CPLEX during the optimization. But I was curious to know whether CPLEX stores any non-incumbent solutions found during the optimization.  Say, at some point, branch and cut algorithm found a solution that is worse than the incumbent solution at that time, does CPLEX keep it in the pool or just simply discard it?

    One more question about the "SolnPoolGap": http://www-01.ibm.com/support/knowledgecenter/SSSA5P_12.6.0/ilog.odms.cplex.help/CPLEX/Parameters/topics/SolnPoolGap.html says that "solutions that are worse than the incumbent solution by this measure are not kept in the solution pool. For example, if you set this parameter to 0.01, then solutions worse than the incumbent by 1% or more will be discarded."

    Now, based on your answer to my first question (i.e. by default, all solutions in the pool were once an incumbent solutions),  I would guess that CPLEX has to keep previous incumbent solutions until it solves the model to optimality and then go through the pool to discard those whose objective value is worsen than the optimal one by this measure. Unless my conjecture that CPLEX might also include non-incumbent solutions during the optimization is correct, CPLEX don't have any candidate solution to be compared with each previous incumbent. Am I understanding this correctly? 

     


    #CPLEXOptimizers
    #DecisionOptimization


  • 4.  Re: Solution pool generated by CPLEX optimization

    Posted 01/05/16 09:39 AM

    Originally posted by: RWunderling


    Whenever CPLEX runs accross a solution, it tries to add it to the solution pool.  At this time all applicable conditions are tested if the solution is allowed to enter the pool.  Furthermore, whenever the incumbent is updated, the existing solutions in the pool are purged with respect to all applicable conditions.  The solution pool gap is one such condition. 

    Hope this helps,

    Roland


    #CPLEXOptimizers
    #DecisionOptimization


  • 5.  Re: Solution pool generated by CPLEX optimization

    Posted 01/05/16 09:46 PM

    Originally posted by: Deanna1125


    Thanks for your quick reply. Your answer makes a lot of sense to me. But, it is still not clear to me how intensity level affect the solution pool generated by solve() method. From the CPLEX documentation, I only know that increasing the intensity level will help CPLEX generate more solutions. 

    For some reason, I need to generate as diverse set of solutions as possible, now I am using "solve()+intensity=4" combination, which currently can serve my purposes fine. To my understanding/guess, unlike the populate method, increasing the intensity level probably won't force CPLEX to explores those nodes in the B&B tree that would be pruned by the default (i.e. intensity=0) optimality based branch-and-cut algorithm (in other words, the B&B tree structure remain the same); the only thing might change is that CPLEX might relax some "mystery" criteria on whether or not to include some of the non-incumbent solutions it finds during the course of optimization, so that more solutions can be included in the pool. If this is case, why the optimization time increased dramatically after I switch from intensity=3 to intensity=4 when calling solve()? To me, unless CPLEX explore more nodes than "normal", the optimization time should not have increased so much. If calling solve() with high intensity level does direct CPLEX to explore more nodes, then what is actual difference between solve() and populate()? What I only know 

    from the documentation is that populate() will reuse reuse the information computed and stored during MIP optimization only if this parameter has not been increased between calls.

    Any clarifications is really appreciated!!

     


    #CPLEXOptimizers
    #DecisionOptimization


  • 6.  Re: Solution pool generated by CPLEX optimization

    Posted 01/05/16 09:10 PM

    Originally posted by: Deanna1125


    It turns out we were wrong about the impact of SolnPoolIntensity parameter on the MIP optimization (i.e. solve() method). In fact, the second sentence of the first paragraph of reference doc for solution pool intensity says "This parameter applies both to MIP optimization and to the populate procedure.". Also, it turned out my previous experiments was incorrect about the SolnSolnIntensity due to some silly mistakes. 

     


    #CPLEXOptimizers
    #DecisionOptimization