大型稀疏二次程序,具体问题具体分析
这个例子展示了使用稀疏算法的价值,当你有一个稀疏的问题。的矩阵n
行,你选择n
一个较大的值,和一些非零对角乐队。一个完整的矩阵的大小n
——- - - - - -n
可以使用所有可用的内存,但一个稀疏矩阵提出了没有问题。
问题是最小化x ' * H * x / 2 + f ' * x
受
x (1) + (2) +…+ x (n) < = 0
,
在哪里f = [1, 2, 3,…; - n)
。H
是一个稀疏对称带状矩阵。
创建稀疏矩阵二次
创建一个对称循环矩阵H
基于向量的变化(2 2 3,6日,14日,6日3]
在主对角线,14。矩阵是n
——- - - - - -n
,在那里n = 30000
。
n = 3 e4;H2 = speye (n);H = 3 * circshift (H2 3 2) + 6 * circshift (H2 2 2) + 2 * circshift (H2, 1、2)…+ 14 * H2 + 2 * circshift (H2, 1、2) + 6 * circshift (H2 2 2) + 3 * circshift (H2 3 2);
查看稀疏矩阵结构。
间谍(H)
创建优化变量和问题
创建一个优化变量x
和问题qprob
。
x = optimvar (“x”n);qprob = optimproblem;
创建目标函数和约束条件。把目标和约束qprob
。
f = 1: n;obj = 1/2 * x ' * H * x - f * x;qprob。目标= obj;缺点(x) =和< = 0;qprob。约束=缺点;
解决问题
解决二次规划问题,使用默认的interior-point-convex”
算法和稀疏线性代数。过早地防止解算器停止,设置StepTolerance
选项0
。
选择= optimoptions (“quadprog”,“算法”,“interior-point-convex”,…“LinearSolver”,“稀疏”,“StepTolerance”,0);[溶胶,fval exitflag、输出λ)=解决(qprob,“选项”、选择);
最低发现满足约束。优化完成,因为目标函数中引入可行的方向,在最优值的宽容,和约束满足约束的值公差内。<停止标准细节>
检查解决方案
把目标函数值,迭代次数和拉格朗日乘子与线性不等式约束。
流(的目标函数值% d。% d \ nThe的迭代次数。\ nThe拉格朗日乘子% d。\ n”,…fval、output.iterations lambda.Constraints)
目标函数值是-3.133073 e + 10。迭代的数量是7。拉格朗日乘数为1.500050 e + 04。
评估约束边界上的解决方案。
流(线性不等式约束的总和(x)有价值% d。\ n”总和(sol.x))
线性不等式约束和e-09 7.599738 (x)是有价值的。
解决方案组件的总和是零公差内。
解决方案x
有三个区域:一个初始部分,最后一个部分,是一个近似的线性部分的解决方案。绘制三个区域。
次要情节(1,1)情节(sol.x(一60))标题((1)通过x (60)”次要情节(3、1、2)情节(sol.x (61: n-60))标题(“x(61)通过x (n-60) '次要情节(3,1,3)情节(sol.x (n-59: n))标题(“x (n-59) x (n) ')