鉴于此目标函数:
最小化:
f = (Ax + By)' * G * (Ax + By)
受到一些平等和不平等的影响 .
其中 x 和 y 分别是具有 p 和 q 元素的实值向量(决策变量) . A 大小 m * p , B 大小 m * q ,G是大小为 m * m 的对称矩阵 .
x
y
p
q
A
m * p
B
m * q
m * m
我的问题是如何以 v' * G * v 的形式编写 f ,以便它可以很容易地在quadprog中使用 . 换句话说,如何混合A,B和G?
v' * G * v
f
这看起来不完整!
无论出于何种原因,您似乎想要根据两个变量组件进行建模 . 现在您没有指定它们如何相互作用 .
由于大多数优化器都在单个变量向量上工作,因此需要连接自己的变量 .
因为你没有显示 G ,我假设你有一个 G 为 x ,一个为 y ,让我们称之为 H .
G
H
(备注:不是matlab用户;不要将示例语法视为理所当然!)
z = [x y]
P = blkdiag(G,H)
假设x和y独立于二次项
例如没有 x0*y1 之类的条款
x0*y1
解决:for z P z`
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
1 回答
这看起来不完整!
无论出于何种原因,您似乎想要根据两个变量组件进行建模 . 现在您没有指定它们如何相互作用 .
由于大多数优化器都在单个变量向量上工作,因此需要连接自己的变量 .
因为你没有显示
G
,我假设你有一个G
为x
,一个为y
,让我们称之为H
.(备注:不是matlab用户;不要将示例语法视为理所当然!)
z = [x y]
P = blkdiag(G,H)
假设x和y独立于二次项
例如没有
x0*y1
之类的条款解决:for
z
P z`例: