主要内容

温暖的开始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

另请参阅

|

相关的话题