Decision Optimization

Decision Optimization

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


#Analytics
#DecisionOptimization
#DecisionOptimization
 View Only
  • 1.  Dynamic Search

    Posted 10/19/11 08:36 PM

    Originally posted by: JFCote


    Hi Guys,
    I'm solving a problem with a two phases scheme. In the first phase, I'm solving a MIP using Cplex Concert in C++. As soon as it finds a feasible solution, it calls an home made code to solve another problem that is based on the value of the variables of phase 1. So I use the IncumbentCallBack when it finds a feasible phase 1 solution. If the phase 2 problem is infeasible, I'm rejecting it and to avoid having to solve many times to same problem, I'm using the CutCallBack and the BranchCallBack (as suggested in another post) to 'cut' this solution. I can also use some informations from my phase 2 to build up a stronger inequality to cut the phase 1 solution (however right now it is as important as my problem).
    My problem is that using CallBacks severely reduce my performance. I have some infeasible problems in which Cplex tell me in very few seconds that they are infeasible if I'm not using callbacks. If I'm using CallBacks, It goes on and on forever..
    From the documentation, I can read that 'dynamic search' is deactivated when using callbacks.

    Is there a way I can use the dynamic search for my phase 1-phase2 algorithm?

    Thank you very much

    Jean-François
    #CPLEXOptimizers
    #DecisionOptimization


  • 2.  Re: Dynamic Search

    Posted 10/19/11 10:36 PM

    Originally posted by: Eumpfenbach


    Pretty sure you can't. If you could use dynamic search, why would it be removed? I'm sure the experts will weigh in though.

    Can you dualize the problem (it sounds like some kind of decomposition method, so maybe you are trying to solve a linear program in one of your phases). If you have some large number that the dual reaches that tells you the primal is infeasible, maybe that would be quicker.

    just my 2 cents.
    #CPLEXOptimizers
    #DecisionOptimization


  • 3.  Re: Dynamic Search

    Posted 10/20/11 04:30 AM

    Originally posted by: SystemAdmin


    There is no way to get back dynamic search if you use control callbacks.
    First of all, I would try to verify whether it is really dynamic search that causes the difference. To do that, run your code without callbacks and with dynamic search explicitly disabled (set parameter MIPSearch to 1). If that also shows the big difference to the solve with dynamic search enabled then you can be pretty sure that dynamic search is involved.
    A potential solution to your problem may be using a solution limit. I can imagine two ways of doing that:
    1. Set an integer solution limit of 1. This will stop CPLEX as soon as the first solution is found or the problem is proven infeasible. If the problem is infeasible then stop. Otherwise remove the solution limit, install your callbacks and solve again.
    2. Implement your algorithm in a loop instead of using callbacks: set the solution limit to 1. When CPLEX returns with the newly found solution run your phase 2, add the cuts that cut off the solution just found and call IloCplex::solve() again (again with solution limit 1). I am afraid that this approach may show worse performance than what you have right now
    #CPLEXOptimizers
    #DecisionOptimization


  • 4.  Re: Dynamic Search

    Posted 10/25/11 02:40 PM

    Originally posted by: SystemAdmin


    You could also try to check what parameter settings the tuning tool provides, if you force dynamic search to be off. Maybe, some of the performance that you lose due to traditional branch-and-cut can be recovered by parameter settings that are tuned to your problem class...

    Tobias
    #CPLEXOptimizers
    #DecisionOptimization


  • 5.  Re: Dynamic Search

    Posted 10/26/11 09:16 PM

    Originally posted by: JFCote


    Thank you guys

    I tried what you suggested Daniel and I can confirm that disabling Dynamic search and not using callbacks affects the performance for the problem I'm solving. I coded your option 2) and it strangely works better than using callbacks. On overall, I can solve few more problems and most of the other are solved faster.

    @Eumpfenbach
    Solving the dual of my MILP is not funny.. I don't have all the constraints of the polytope. It is however a good idea because there seems to be a structure in the problem that I can exploit. I'll look into it
    Jean-François
    #CPLEXOptimizers
    #DecisionOptimization