简体   繁体   中英

How to check if a constraint already exists in CPLEX C++?

I have some constraints of the form Sizes[i1] + Sizes[i2] + Sizes[i3]<=1, which I add by

model.add(Sizes[i1] + Sizes[i2] + Sizes[i3]<=1)

for some specific indices i1,i2,i3. Later I want to add for all other index combinations the constraints

model.add(Sizes[k1] + Sizes[k2] + Sizes[k3]>1)

Is there some nice way to do this, eg to check if the constraint already exists in the model?

Maybe I can store the handle which is returned by the IloModel::add function (eg as an ILOExtracableArray or even IloConstraintArray?) but even then I con't know how to check if the contraint already exists. Thank you

I don't think that there is really an easy way to get this back from a cplex model. I have previously had to do something similar in several projects, so I give my two suggestions below.

(1) If you know you always have the same number of things in each constraint, then you can create a structure to hold that information, like:

    class tuple{
      public int index1;
      public int index2;
      public int index3;
    }

and then you can just create one for each constraint you add, and keep them in a list or array or similar.

(2) If you know about the possible values of the indices, then maybe you can create a hash-code or similar from the indices. If done right, this can also solve the issue of symmetry due to permuting the indices - (Sizes[a] + Sizes[b] + Sizes[c]) is the same as (Sizes[b] + Sizes[a] + Sizes[c]).

Then as above, you can keep the hash codes in a list or array for the constraints that you added.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM