Формулировка квадратичной программы: Matlab

Учитывая эту целевую функцию:

Свести к минимуму:

f = (Ax + By)' * G * (Ax + By)

при соблюдении некоторых равенств и неравенств.

где x и y — векторы с действительным знаком (переменные решения) с элементами p и q соответственно. A размера m * p, B размера m * q, G — симметричная матрица размера m * m.

Мой вопрос заключается в том, как записать f в форме v' * G * v, чтобы его можно было легко использовать в quadprog. Другими словами, как смешать A, B и G?


person Faroq AL-Tam    schedule 22.11.2017    source источник
comment
f уже находится в форме v' * G * v, где v = Ax + By...   -  person Wolfie    schedule 22.11.2017
comment
Да, но мне нужно представить v = Ax + By как один вектор, а не как два вектора x и y.   -  person Faroq AL-Tam    schedule 22.11.2017
comment
Итак, введите v = A*x + B*y?   -  person Wolfie    schedule 22.11.2017
comment
@Wolfie Большинству оптимизаторов требуется единственная переменная решения, то есть один вектор, мне нужно их соединить.   -  person Faroq AL-Tam    schedule 23.11.2017


Ответы (1)


Это выглядит не полностью определенным!

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

Поскольку большинство оптимизаторов работают с одним переменным-вектором, вам необходимо соединить свой.

Поскольку вы не показали G, я предполагаю, что у вас есть один G для x и один для y, назовем его H.

(Примечание: не пользователь Matlab, не принимайте пример синтаксиса как должное!)

  • z = [x y]
  • P = blkdiag(G,H)
    • assuming x and y independent in regards to quadratic-term
    • например нет x0*y1 подобных терминов
  • Решить: для z` P z

Пример:

x = [x0 x1 x2]
y = [y0 y1]
G = [6 2 1; 2 5 2; 1 2 4]
H = [8 2; 2 10]

# G
6 2 1
2 5 2
1 2 4

# H
8 2
2 8

z = [x0 x1 x2 y0 y1]
P = [6 2 1 0 0; 2 5 2 0 0; 1 2 4 0 0; 0 0 0 8 2; 0 0 0 2 8] 

# P
6 2 1 0 0
2 5 2 0 0
1 2 4 0 0
0 0 0 8 2
0 0 0 2 8
person sascha    schedule 22.11.2017