Decision Optimization

Decision Optimization

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

 View Only
  • 1.  Questions about presolve

    Posted Thu June 13, 2013 10:45 AM

    Originally posted by: Zacharie_ALES


    Hello,

    While reading about cut callback I discovered the existence of the presolve model. It seems better to use directly the presolve model rather than translating the variables from one formulation to another each time I want to generate a cut.

    Unfortunately, I am using an API (Java) and I just read the following about the parameter CPX_PARAM_MIPCBREDLP (link):

    "In the C++, Java, and .NET APIs of CPLEX, only the original model is available to callbacks. In other words, this parameter is effective only for certain advanced routines of the Callable Library."

     

    This leads me to 4 questions:

    1 - First do you know if this is still true ?

    2 - If yes, do I have to specify in a callback that I am referring to a variable in the original model or will the association be done automatically ?

    3 - Is it possible to know which row/columns have been removed in the presolve model ?

    4 - Eventually, I don't understand what are the "advanced routines" mentioned in the previous quotation. Could you describe them ? 

     

    Thanks in advance for your help !


    #CPLEXOptimizers
    #DecisionOptimization


  • 2.  Re: Questions about presolve

    Posted Fri June 14, 2013 01:26 AM

    My answers below apply to C++, Java, and C#, in other words, to Concert technology.

    > 1 - First do you know if this is still true ?
    >
    Yes, this is still true and unlikely to change.

    > 2 - If yes, do I have to specify in a callback that I am referring to a variable in the original model or will the association be done automatically ?
    >
    In Concert technology the callbacks expect that you are referring to variables in the original model. Actually, there is no way for you to get the variables of the presolved model so you only can refer to variables of the original model. The callbacks will automatically transform values for original variables into values for the presolved model (this is known as "crushing" information) and vice versa ("uncrushing").

    > 3 - Is it possible to know which row/columns have been removed in the presolve model ?
    >
    Yes. This information is available from function IloCplex.ControlCallback.getFeasibility(). If this function returns Implied for a variable then this variable was removed by presolve.

    > 4 - Eventually, I don't understand what are the "advanced routines" mentioned in the previous quotation. Could you describe them ?
    >
    I don't know if there is a good and short way to describe all routines that are classified "advanced". What the quoted statement tries to say is this: Parameter CPX_PARAM_MIPCBREDLP is not available in C++, Java, C# since in these APIs callbacks always work with the original model. The parameter is available in the callable library but does (of course) affect only callbacks (which are advanced routines).


    #CPLEXOptimizers
    #DecisionOptimization


  • 3.  Re: Questions about presolve

    Posted Fri June 14, 2013 04:26 AM

    Originally posted by: Zacharie_ALES


    Thanks for the quick and complete answer.

    Just one more question : is there an equivalent to  IloCplex.ControlCallback.getFeasibility() to know the constraints removed in the presolve model ?


    #CPLEXOptimizers
    #DecisionOptimization


  • 4.  Re: Questions about presolve

    Posted Mon June 17, 2013 07:25 AM

    No, a getFeasibility()-like function for rows/constraints does not exist. What would you like to do with that information? Maybe this can be achieved in a different way.


    #CPLEXOptimizers
    #DecisionOptimization