主要内容

大型稀疏二次程序,具体问题具体分析

这个例子展示了使用稀疏算法的价值,当你有一个稀疏的问题。的矩阵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) ')

相关的话题