0

Sizes [i1] + Sizes [i2] + Sizes [i3]<=1という形式の制約がいくつかあります。

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

一部の特定のインデックスi1、i2、i3の場合。後で、他のすべてのインデックスの組み合わせに制約を追加したい

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

これを行うための良い方法はありますか?たとえば、制約がモデルにすでに存在するかどうかを確認する方法はありますか?

IloModel :: add関数によって返されるハンドルを保存できるかもしれませんが(たとえば、ILOExtracableArrayまたはIloConstraintArrayとして?)、それでも、制約がすでに存在するかどうかを確認する方法がわかりません。ありがとうございました

4

1 に答える 1

1

cplex モデルからこれを取り戻す簡単な方法があるとは思えません。以前、いくつかのプロジェクトで似たようなことをしなければならなかったので、以下に 2 つの提案をします。

(1) 各制約に常に同じ数のものが含まれていることがわかっている場合は、次のように、その情報を保持する構造を作成できます。

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

次に、追加する制約ごとに1つ作成し、それらをリストまたは配列などに保持できます。

(2) インデックスの可能な値について知っている場合は、インデックスからハッシュコードなどを作成できる可能性があります。正しく行われた場合、これはインデックスの並べ替えによる対称性の問題も解決できます - (Sizes[a] + Sizes[b] + Sizes[c]) は (Sizes[b] + Sizes[a] + Sizes [c])。

次に、上記のように、追加した制約のリストまたは配列にハッシュ コードを保持できます。

于 2013-03-11T17:56:58.540 に答える