关于w,我想最小化w'Hw,其中w是向量,H是矩阵。
并且具有以下约束,| w1 | + | w2 | + | w3 | < 3,即。权重向量的l1范数小于3.
我怎样才能在matlab中做到这一点?
由于
答案 0 :(得分:2)
您正在尝试使用线性约束(也称为quadratic programming)来解决二次最小化问题。
你对你的矩阵H一无所知 - 特别是它是半正的吗?我真的希望这种情况是这样的,因为这通常适用于通常会出现二次规划问题的问题域。
如果H确实是半正的,那么你的唯一约束是| w1 | + | w2 | + | w3 | < 3,然后,正如Richie Cotton已经指出的那样,最小值在w = 0时是微不足道的。也许你有一些额外的限制?
如果你确实有其他约束条件,但H仍然是半正定的,那么这类问题就存在有效的求解器。在MATLAB中,看一下quadprog。
您必须重新制定单个非线性约束| w1 | + | w2 | + | w3 | < 3作为一系列线性约束。
在一维情况下,约束| w1 | < 1变成两个线性约束:
w1 < 1
-w1 < 1.
在二维情况下,约束| w1 | + | w2 | &LT; 1变为四个线性约束:
w1+w2 < 1
w1-w2 < 1
-w1+w2 < 1
-w1-w2 < 1
我会将扩展名留给您三维。
答案 1 :(得分:1)
您需要使用优化工具箱,特别是fmincon:
使用fun来建立w'Hw,并且你想要使用nonlcon设置的c(eq) = (|w1|+|w2|+|w3| - 3)
&lt; 0(在文档中)。
答案 2 :(得分:0)
我建议您查看matlab文档中的fminsearch函数。
答案 3 :(得分:0)
Rasman,下面是我正在使用的fmincon代码:
function PortfolioWeights = GMVPC1Type2(SCM)
w0 = [0.1 0.1 0.1 0.1 0.1];
n = length(w0);
options = optimset('Display','final-detailed');
PortfolioWeights = fmincon(@myobj2,w0,[],[],ones(1,n),1,[],[],@myconstraint1,options)
function f = myobj2(w)
w = [w(1);w(2);w(3);w(4);w(5)];
f = w'*SCM*w;
end
end
-----------------------------------------------------------------------------
function [c ceq] = myconstraint1(w)
c = abs(w(1))+abs(w(2))+abs(w(3))+abs(w(4))+abs(w(5))-1
ceq = [];
end
------------------------------------------------------------------------------
我添加了options = optimset('Display','final-detailed');正如你的建议。我收到以下消息:
Optimization stopped because the predicted change in the objective function,
6.115031e-009, is less than options.TolFun = 1.000000e-006, and the maximum constraint
violation, 0.000000e+000, is less than options.TolCon = 1.000000e-006.
Optimization Metric Options
abs(steplength*directional derivative) = 6.12e-009 TolFun = 1e-006 (default)
max(constraint violation) = 0.00e+000 TolCon = 1e-006 (default)
Active inequalities (to within options.TolCon = 1e-006):
lower upper ineqlin ineqnonlin
1
PortfolioWeights =
0.2000 0.2000 0.2000 0.2000 0.2000
我使用的矩阵是:
0.000257165759136336 8.48196702102889e-05 9.27141501220362e-05 0.000111360154790061 0.000155196440517440
8.48196702102889e-05 0.000277377166669392 0.000101880007672550 0.000107375764193076 0.000117042329431538
9.27141501220362e-05 0.000101880007672550 0.000300697293925817 0.000112004860252653 0.000134354417344316
0.000111360154790061 0.000107375764193076 0.000112004860252653 0.000311028738698100 0.000147296211557256
0.000155196440517440 0.000117042329431538 0.000134354417344316 0.000147296211557256 0.000376418027192374