【发布时间】:2014-02-11 19:06:15
【问题描述】:
我有一个权重组合,我在 matlab 中使用 quadprog。 我有 quadprog 优化器的所有输入。我只是在制定公式时遇到了一些麻烦 约束
我希望我的约束具有 0 或 1% 的下限,有没有办法在保持我的目标函数的同时做到这一点
谢谢!
【问题讨论】:
标签: matlab optimization quadprog
我有一个权重组合,我在 matlab 中使用 quadprog。 我有 quadprog 优化器的所有输入。我只是在制定公式时遇到了一些麻烦 约束
我希望我的约束具有 0 或 1% 的下限,有没有办法在保持我的目标函数的同时做到这一点
谢谢!
【问题讨论】:
标签: matlab optimization quadprog
我不确定我是否理解你的问题。
如果你的权重已经用百分比定义了,直接就是quadprog的定义:
x = quadprog(H, f, [], [], [], [], lb, [])
所以H、e和f应该由matlab描述提供:
quadprog(H,f)- 返回一个向量x,它最小化了1/2 * x' * H * x + f' * x。H必须是正定的,问题才有一个有限的最小值。”
而lb 是一个约束向量。例如如果x是一个向量3 x 1,那么lb = [0.01; 0.01; 0.01]在所需百分比的情况下是0.01(1%)
另一方面,假设sum_{i=1}^{n} w_i 不等于1。所以w_i不是用百分比来定义的。
因此,您需要的约束是p_i (percentage)= w_i / (sum w_i) >= 0.01(在下限的情况下是1%)。
注意这里的约束是
w_i >= 0.01 * (sum w_i)
或者
-0.01 * (sum_{j=1}^{i-1} w_j) + 0.99 * w_i - 0.01 * (sum_{j=i+1}^{n} w_j) >= 0
或者
0.01 * (sum_{j=1}^{i-1} w_j) - 0.99 w_i + 0.01 * (sum_{j=i+1}^{n} w_j) <= 0
因此,这是Ax <= b 类型的约束。
所以
A_ij = 0.01 当i 与j 不同时
A_ij = -0.99 当i = j 和b = zeros(n, 1) 时
在这种情况下,您正在使用
x = quadprog(H, f, A, b)
希望对你有所帮助!
丹尼尔
【讨论】: