quadprog
这个例子展示了一个热启动对象如何在一个大的、密集的二次问题中提高求解速度。制造出一个大规模的问题N
变量和10 n
线性不等式约束。集N
到1000年。
rng默认的%的再现性N = 1000;rng默认的一个= randn ((10 * N, N));b = 5 *的(大小(A, 1), 1);兰德(f =√N * N, 1);H = (4+N/10)*eye(N) + randn(N);H = H + H';Aeq = [];说真的= [];1磅= 1 (N);乌兰巴托=磅;
为。创建一个热启动对象quadprog
从零开始。
选择= optimoptions (“quadprog”,“算法”,“激活集”);x0 = 0 (N, 1);ws = optimwarmstart (x0,选择);
解决问题,找出结果的时间。
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 =兰迪(N);(idx) = 2 * f (idx);
用新的目标解决问题,从以前的暖开始解决。
tic [ws2,fval2,eflag2,output2,lambda2] = quadprog(H,f,A,b,Aeq,beq,lb,ub,ws1);
找到满足约束条件的最小值。优化完成是因为目标函数在可行方向上不减小到最优性公差的值内,约束条件满足到约束公差的值内。> <停止标准细节
toc
运行时间为1.490214秒。
求解者解决新问题的时间要短得多。
新的解决方案有相同数量的主动约束。
nnz (lambda2.ineqlin)
ans = 214
nnz (lambda2.lower)
ans = 0
nnz (lambda2.upper)
ans = 0
新的解决方案接近先前的解决方案。
规范(二硫化钨。X - ws1.X)
ans = 0.0987
规范(ws2.X)
ans = 2.4229
速度上的差异很大程度上是由于求解器需要更少的迭代。
output2.iterations
ans = 29