2016-05-15 4 views
0

Я пытаюсь реализовать простую квадратичную программу с использованием API-интерфейса CPLEX Python. Пример файла qpex1, предоставленного CPLEX, обсуждает это. Проблема, как упомянуто в qpex.lp являетсяКвадратичное программирование CPLEX

Maximize 
obj: x1 + 2 x2 + 3 x3 + [ - 33 x1 ^2 + 12 x1 * x2 - 22 x2 ^2 + 23 x2 * x3 
- 11 x3 ^2 ]/2 
Subject To 
c1: - x1 + x2 + x3 <= 20 
c2: x1 - 3 x2 + x3 <= 30 
Bounds 
0 <= x1 <= 40 
End 

Проблема, в то время как реализуется в Python, получает матрицу qmat, который реализует квадратичную часть целевой функции. Матрица:

qmat = [[[0, 1], [-33.0, 6.0]], 
     [[0, 1, 2], [6.0, -22.0, 11.5]], 
     [[1, 2], [11.5, -11.0]]] 

p.objective.set_quadratic(qmat) 

Может кто-нибудь объяснить структуру этой матрицы? Каковы части в структуре данных, которые используются? Каковы компоненты и так далее.

ответ

4

Первый список является набор индексов, второй список набор соответствующих значений, так что qmat матрица:

-33 6 0 
    6 -22 11.5 
    0 11.5 -11 

, что приводит к:

  | -33 6 0 | x1 
x1 x2 x3 | 6 -22 11.5 | x2 = - 33 x1 ^2 + 12 x1 * x2 - 22 x2 ^2 + 23 x2 * x3 - 11 x3 ^2 
     | 0 11.5 -11 | x3