温暖的开始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) *眼(N) + randn (N);H = H + H ';Aeq = [];说真的= [];1磅= 1 (N);乌兰巴托=磅;
创建一个热启动对象quadprog
,从0开始。
选择= optimoptions (“quadprog”,“算法”,“激活集”);x0 = 0 (N, 1);ws = optimwarmstart (x0,选择);
解决问题,时间和结果。
抽搐(ws1、fval1 eflag1 output1,λ₁]= quadprog (H f A、b Aeq,说真的,磅,乌兰巴托,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);
解决这个问题的新目标,从以前的热启动的解决方案。
抽搐(二硫化钨、fval2 eflag2、output2 lambda2] = quadprog (H f A、b Aeq,说真的,磅,乌兰巴托,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