1
$\begingroup$
  1. Assume we have 100% feasible solution for the model with decision variable a[i].
  2. Then we are changing the objective function on something similar to minimize sum(i in…)maxl(0, a[i]-100) and trying to use our feasible solution as a start solution.
  3. Sometimes we are lucky but sometimes we have a message: "No solution found from 1 MIP starts. Retaining values of one MIP start for possible repair" – in my case it means that I’ll nether get any solution because of model complexity. I suppose maxl makes some magic here.

Is there any way to tell CPLEX to use my start solution on every start with maxl in the objective?

P.S.:

  • After analizing LP file I tried to change the model by adding b[i] variable (b[i]==a[i]-100) with corresponding changes in objective (minimize sum(i in…)maxl(0, b[i])) and providing start values for it together with starting values for a[i] – no effect except increasing solving time for succeed warmstarts.
  • I'm using OPL libraries for c#. Fixing all variables from the previous solution by GetStart and SetStart methods gives nothing. I had to use Attach method for some "float" variables to make a model accept the start solution. The list of variables for a successful warmstart was formed after experiments.
  • I have an extra model to avoid numerical instability which fixes the precision of all numeric variables to 10^-3 and provides a feasible solution.
$\endgroup$
5
  • 4
    $\begingroup$ The first thing I would suggest to do is fix all variables in the model to the values in your feasible solution and press solve. If the model turns out to be infeasible, then you know that the solution you assumed was feasible, is not feasible after all. This is probably the most common problem. After that, you could try playing around with the MIP start effort level, see: MIP starts and effort level, see: ibm.com/docs/en/icos/… $\endgroup$ May 29, 2021 at 18:48
  • $\begingroup$ I assume you are using OPL here (which should be stated in the question). I could be wrong, but I don't think maxl() is supposed to be used with variables. The documentation indicates the arguments should be ints or floats; it says nothing about variables and expressions. You might want max() here (if CPLEX knows how to refactor the model with a max operator in the objective). $\endgroup$
    – prubin
    May 29, 2021 at 21:35
  • 1
    $\begingroup$ maxl works fine with decision variables as can be seen in github.com/AlexFleischerParis/zooopl/blob/master/zoomaxl.mod $\endgroup$ May 31, 2021 at 8:35
  • $\begingroup$ How does the solution actually look like if you inspect it? It could be some annoying floating values which are causing numerical instability when being extracted/re-entered into CPLEX. $\endgroup$ May 31, 2021 at 18:30
  • $\begingroup$ I have an extra model to avoid numerical instability which fixes the precision of all numeric variables to 10^-3 $\endgroup$
    – Markov
    Jun 1, 2021 at 8:28

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Browse other questions tagged or ask your own question.