主要内容

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

另请参阅

|

相关的话题