Decision Optimization

Decision Optimization

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

 View Only
  • 1.  Bad current bound

    Posted Mon July 22, 2019 01:39 PM

    Originally posted by: Filipe Costa


    Hi all,

    I am using the OPL function staticLex on three objective functions. Looking to the log I can see that the engine is exploring an impossible bound because the value for one of the objective functions violates one constraint (>=0). How is this possible? Other thing, Can I specify the a deterioration tolerance for each of the objective functions?

    Kind Regards,

    Filipe


    #DecisionOptimization
    #OPLusingCPOptimizer


  • 2.  Re: Bad current bound

    Posted Tue July 23, 2019 05:39 AM

    Originally posted by: rdumeur


    Dear Filipe,

    We have a few questions:

    - What do you mean "exploring an impossible bound"? 

    - Could you please send a small model showing the problem? 

    - could you please send the log that you get from the solver?

    - what version of CPO are you using?

    It would help us to help you.

    Cheers,


    #DecisionOptimization
    #OPLusingCPOptimizer


  • 3.  Re: Bad current bound

    Posted Tue July 23, 2019 10:04 AM

    Originally posted by: Filipe Costa


    Hi,

    Looking to the logging file, I see this information:

    Current objective is 7398; 0; 4425
    Current bound is 6842; 3359; -84153 (gap is 7.52% @ crit. 1 of 3)

    The current objective is fine and makes sense, the thing is the current bound (probably I am not interpreting the data correctly). Looking to current bound the last objective function (obj2 in my code) has value -84153, but that is impossible because I add a constraint saying obj2 >= 0.

    Moreover looking to the value for the objective function in the middle (3359) has a huge deterioration compared to the current objective, that why I was also asking if there are anyway to adjust the deterioration tolerance.

    I am using the latest version of CPO.


    #DecisionOptimization
    #OPLusingCPOptimizer


  • 4.  Re: Bad current bound

    Posted Thu July 25, 2019 05:15 AM

    Originally posted by: Philippe_Refalo


    Dear Filipe,

    CP Optimizer does some expression factorization but cannot garantee that all common expression are factorized and replaced by a variable. In your case, I suppose that objective 2 has the form of an expression and a constraint on this expression forces it to be positive. In this case the lower bound 0 may be be propagated to the objective. For instance, consider a model containing min x + y, s.t. x + y >= 0, CP Optimizer does not garantee to give a lower bound of zero after initial propagation. To achive this you need to introduce a new variable, say objVar2, and add the constraint objVar2 == objective_expression_2. You also need to move any constraint on objective_expression_2 to the variable objVar2. This way you will get the lower bound you expect. (In the example above this amounts to add a new variable objVar and to rewrite the model to: min ObjVar, s.t. { objVar == x + y, objVar >= 0}).

    There is no way to adjust the tolerances from CP Optimizer API for indiviual objectives in lexicographic optimization. A possible way to go is to stop optimization each time a solution is found (using SolulionLimit = 1). Then you store the current solution SOL. You now can add bound on objective variables to limit degradattion. You then need to restore SOL as a starting point and optimize again with a SolutionLimit = 2 (because it will find again the previous solution immediately). Of course you can stop optimizing after more solutions.

    I hope this will help.

    Philippe

     


    #DecisionOptimization
    #OPLusingCPOptimizer