C# API 経由で CPLEX 12.5.0.0 を使用しています。
これまで、一定の条件 (制約のみ) を持つ目標がある状況に遭遇したことはありません。制約を使用して、定数が常に片側に来るように方程式を再配置することができました。つまり、それぞれILinearNumExpr
に定数項がありません。
現在、次のタイプの目的を持つ二次計画問題があります。
MAX Z =
c[1,2] * a[1] * a[2] - c[1,2] * (1 - a[1] * a[2]) +
c[1,3] * a[1] * a[3] - c[1,2] * (1 - a[1] * a[3]) +
c[2,3] * a[2] * a[3] - c[2,2] * (1 - a[2] * a[3])
c[,] は定数の対称コスト行列です。a[i] はバイナリ変数です。
したがって、上記の 3 行の左半分を見ると、a[i] と a[j] の両方を一緒に持つと、c[i,j] が目的値に寄与します。これは、現在実装され、テストされ、機能しているものです。
a[i] と a[j] の両方が 1 に等しくない場合、目的値に c[i,j] を寄与しないのではなく、それを減算するように、目的を変更したいと考えています。
ここで、CPLEX のドキュメント (その作成者は明確な説明や例を提供することに明らかにアレルギーがあるようです) を調べましたがILinearNumExpr.Constant
、特定の式に定数を設定できるプロパティがあるようです。
でコードを変更しようとしたときに、そのプロパティIQuadNumExpr
がないことに気付きました。.Constant
CPLEXの二次目的関数に定数項を追加する方法はありますか?