温暖的开始Quadprog
此示例显示了温暖的起始对象如何在一个大,密集的二次问题中提高溶液的速度。创建一个规模问题n
变量和10n
线性不平等约束。放n
到1000。
RNG默认%可再现性n = 1000;RNG默认a = randn([[10*n,n]);b = 5*一个(大小(a,1),1);f = sqrt(n)*rand(n,1);h =(4 + n/10)*眼睛(n) + randn(n);h = h + h';aeq = [];beq = [];lb = -ones(n,1);ub = -lb;
创建一个温暖的起始对象Quadprog
,从零开始。
opts = optimoptions('四元,,,,'算法',,,,“主动集”);x0 =零(n,1);ws = optimwarmstart(x0,opts);
解决问题,并计时结果。
TIC [WS1,FVAL1,EFLAG1,OUTPUT1,LAMBDA1] = QUADPROG(H,F,A,B,AEQ,BEQ,LB,UB,WS);
最低限度发现满足约束。之所以完成优化,是因为目标函数在可行的方向,最优性公差值之内不折叠,并且在约束公差的值之内满足了约束。<停止标准详细信息>
TOC
经过的时间为9.221035秒。
该解决方案具有几个主动线性不等式约束,没有主动界限。
NNZ(lambda1.ineqlin)
ANS = 211
nnz(lambda1.lower)
ans = 0
NNZ(lambda1.upper)
ans = 0
求解器需要数百个迭代才能收敛。
output1.Iterations
ANS = 216
更改一个随机目标以两倍的原始值。
idx = randi(n);f(idx)= 2*f(idx);
从先前的热门解决方案开始,通过新目标解决问题。
tic [WS2,fval2,eflag2,output2,lambda2] = quadprog(h,f,a,a,b,aeq,beq,beq,lb,ub,ws1);
最低限度发现满足约束。之所以完成优化,是因为目标函数在可行的方向,最优性公差值之内不折叠,并且在约束公差的值之内满足了约束。<停止标准详细信息>
TOC
经过的时间为1.490214秒。
求解器需要更少的时间来解决新问题。
新解决方案具有大约相同数量的活动约束。
NNZ(lambda2.ineqlin)
ANS = 214
nnz(lambda2.lower)
ans = 0
NNZ(lambda2.upper)
ans = 0
新解决方案接近先前的解决方案。
norm(WS2.X -WS1.X)
ANS = 0.0987
规范(WS2.x)
ANS = 2.4229
速度的差异很大程度上是由于求解器所做的迭代较少。
output2.Iterations
ANS = 29