Stały termin w programie kwadratowym z CPLEX?
Używam CPLEX 12.5.0.0 przez API C #.
Do tej pory nigdy nie miałem sytuacji, w której cel miałby stały termin - tylko ograniczenia. Z ograniczeniami zawsze byłem w stanie zmienić układ równania, więc stała jest zawsze po jednej stronie, co oznacza każdąILinearNumExpr
nie ma własnego terminu stałego.
Teraz mam problem z kwadratowym programowaniem, którego celem jest następujący typ:
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 [,] jest stałą, symetryczną macierzą kosztów. a [i] są zmiennymi binarnymi.
Tak więc patrząc na lewe połówki 3 linii powyżej, posiadanie razem a [i] i a [j] przyczyni się do c [i, j] do wartości obiektywnej. To jest obecnie wdrażane, testowane i działające.
Chcę zmodyfikować cel, aby, jeśli [i] i a [j] nie były oba równe 1, zamiast nie przyczyniać się do c [i, j] do wartości obiektywnej, odejmie to.
Teraz przejrzałem dokumentację CPLEX (której autorzy są najwyraźniej uczuleni na dostarczanie jasnych wyjaśnień lub przykładów) i wydaje się, że istniejeILinearNumExpr.Constant
właściwość, która pozwala mi ustawić stałą dla danego wyrażenia.
Kiedy próbowałem zmodyfikować mój kod za pomocąIQuadNumExpr
, Zauważyłem, że tego nie ma.Constant
własność.
Czy jest jakiś sposób na dodanie stałych terminów do akwadratowy cel funkcja w CPLEX?