Decision Optimization

Decision Optimization

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


#Analytics
#DecisionOptimization
#DecisionOptimization
 View Only
  • 1.  Complete simplex basis information. getBasisStatuses() vs writeBasis

    Posted 07/11/18 01:16 PM

    Originally posted by: x3t2h


    Hi,

    as I mentioned in this post https://www.ibm.com/developerworks/community/forums/html/topic?id=142afced-8c19-4ba7-8662-c011b36c985e, I am struggling with correctly passing on a simplex basis from a parent node in a branching tree to its child nodes in C++ with Cplex Concert Technology. Aside from the issues discussed in the linked post, I just wanted to make sure that I am collecting all the requried information. Currently, I am only using the getBasisStatuses() and setBasisStatuses() functions. However, I was wondering if cplex would benefit from also using the setStart() function to pass on the actual solution values, the reduced costs and the slack values or if this additional information would only be used to create a starting basis for the simplex method (which I am already providing). Also, is the information collected by getBasisStatuses() identical to the information that is stored using writeBasis()? If yes and if I only need internal access (within my C++/Cplex model) to the basis, am I correct in assuming that getBasisStatuses() should be preferred over writeBasis() since this way I do not have to create the .bas files?

    Thank you very much for your help.


    #CPLEXOptimizers
    #DecisionOptimization


  • 2.  Re: Complete simplex basis information. getBasisStatuses() vs writeBasis

    Posted 07/12/18 03:12 AM

    Originally posted by: BoJensen


    getBasisStatuses() and setBasisStatuses() is about setting the status keys for the basis i.e CPX_BASIC, CPX_AT_LOWER etc. By using these status keys CPLEX can recalculate the primal and dual solution vectors. The primal and dual solution vectors can also be set with setStart(), which on the other hand does not specify a basis. Only having the solution vectors and not the basis will force CPLEX to guess which ones are basic in presences of degeneracy. So the two methods specify different information and have different use cases. For implementing a B&B, I would use getBasisStatuses() and setBasisStatuses() and let CPLEX recalculate the primal and dual solution values.


    #CPLEXOptimizers
    #DecisionOptimization


  • 3.  Re: Complete simplex basis information. getBasisStatuses() vs writeBasis

    Posted 07/12/18 03:16 AM

    Originally posted by: BoJensen


    Yes you are correct in assuming that getBasisStatuses() should be preferred over writeBasis(). writeBasis() can in your case be used for exporting models and solutions for debugging.


    #CPLEXOptimizers
    #DecisionOptimization


  • 4.  Re: Complete simplex basis information. getBasisStatuses() vs writeBasis

    Posted 07/12/18 03:22 AM

    Originally posted by: BoJensen


    In addition by using only status keys, you avoid storing the full solution vectors, which in your B&B tree will save memory.
     


    #CPLEXOptimizers
    #DecisionOptimization


  • 5.  Re: Complete simplex basis information. getBasisStatuses() vs writeBasis

    Posted 07/12/18 07:05 AM

    Originally posted by: x3t2h


    Thanks a lot. One last question regarding that topic: What information is passed on internally by Cplex between parent and child nodes when I solve a MIP using the built in branch and cut function (dynamic search and adding cuts deactivated)? I am asking since for some reason the built in Cplex MIP solver takes way less time to solve nodes in the branching tree than my own branch and bound algorithm does.


    #CPLEXOptimizers
    #DecisionOptimization


  • 6.  Re: Complete simplex basis information. getBasisStatuses() vs writeBasis

    Posted 07/12/18 08:32 AM

    Originally posted by: BoJensen


    Unfortunately I can not comment on internal details and data structures, but only say there are also many other things going on internally in CPLEX than just passing solution information for nodes.


    #CPLEXOptimizers
    #DecisionOptimization


  • 7.  Re: Complete simplex basis information. getBasisStatuses() vs writeBasis

    Posted 07/12/18 09:25 AM

    Originally posted by: x3t2h


    I see, thank you very much for you help!
     


    #CPLEXOptimizers
    #DecisionOptimization


  • 8.  Re: Complete simplex basis information. getBasisStatuses() vs writeBasis

    Posted 12/19/19 02:53 AM

    Originally posted by: istenc


    Hi,

    I have a similar problem as you had while developing my own branch and bound algorithm.  I am considering to use getBasisStatuses()  to get the basis from the parent node and set it as the basis of the child node by via setBasisStatuses()  method and perform dual simplex. Did this approach work on your application or did you need to pass additional information from the parent node? 

    I think passing the basis status is enough to have a reasonable performance but I appreciate if you can tell your own experience.

    Best,

    İstenç


    #CPLEXOptimizers
    #DecisionOptimization


  • 9.  Re: Complete simplex basis information. getBasisStatuses() vs writeBasis

    Posted 01/08/20 03:39 AM

    You should probably extend the basis status according to the newly added bound constraints. That should be good enough then.


    #CPLEXOptimizers
    #DecisionOptimization


  • 10.  Re: Complete simplex basis information. getBasisStatuses() vs writeBasis

    Posted 01/14/20 07:52 AM

    Originally posted by: istenc


    Thanks a lot for your response.

    Best,

    İstenç


    #CPLEXOptimizers
    #DecisionOptimization