Konstante Zielsetzung für quadratisches Programm mit CPLEX?

Ich verwende CPLEX 12.5.0.0 über die C # -API.

Bis jetzt hatte ich noch nie eine Situation mit einem Ziel mit einer konstanten Laufzeit - nur Einschränkungen. Mit Einschränkungen war ich immer in der Lage, die Gleichung neu zu ordnen, sodass die Konstante immer auf einer Seite ist und jede bedeutetILinearNumExpr hat keine konstante Laufzeit für sich.

Jetzt habe ich ein quadratisches Programmierproblem mit einem Ziel des folgenden Typs:

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 [,] ist eine konstante symmetrische Kostenmatrix. a [i] sind binäre Variablen.

Wenn Sie also die linken Hälften der drei obigen Zeilen betrachten und sowohl a [i] als auch a [j] zusammen haben, tragen Sie c [i, j] zum Zielwert bei. Dies ist, was derzeit implementiert, getestet und funktioniert.

Ich möchte das Ziel so modifizieren, dass es subtrahiert wird, wenn a [i] und a [j] nicht beide gleich 1 sind, anstatt c [i, j] nicht zum Zielwert beizutragen.

Jetzt habe ich die CPLEX-Dokumentation nachgeschlagen (deren Autoren anscheinend allergisch sind, klare Erklärungen oder Beispiele zu liefern), und es scheint eine zu gebenILinearNumExpr.Constant Eigenschaft, mit der ich eine Konstante für einen bestimmten Ausdruck festlegen kann.

Als ich versuchte, meinen Code mit zu ändernIQuadNumExprMir ist aufgefallen, dass es das nicht gibt.Constant Eigentum.

Gibt es eine Möglichkeit, konstante Terme zu a hinzuzufügen?quadratisches Ziel Funktion in CPLEX?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage