主要内容

大型稀疏二次规划,基于问题

这个例子展示了在处理稀疏问题时使用稀疏算法的价值。的矩阵n行,由你选择n得到一个较大的值,并有几个非零的对角线带。一个完整的矩阵大小n——- - - - - -n可以使用所有可用内存,但稀疏矩阵没有问题。

问题是如何最小化x ' * H * x / 2 + f ' * x

X (1) + X(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*循环移位(H2,1,2) + 6*循环移位(H2,2,2) + 3*循环移位(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;Cons = sum(x) <= 0;qprob。约束=缺点;

解决问题

求解二次规划问题interior-point-convex”算法与稀疏线性代数。为防止求解器过早停止,设置StepTolerance选项0

选择= optimoptions (“quadprog”“算法”“interior-point-convex”...“LinearSolver”“稀疏”“StepTolerance”, 0);[溶胶,fval exitflag、输出λ)=解决(qprob,“选项”、选择);
求满足约束条件的最小值。优化完成是因为目标函数在可行方向上是不递减的,到最优公差的值以内,并且约束满足到约束公差的值以内。> <停止标准细节

检查解决方案

查看与线性不等式约束相关的目标函数值、迭代次数和拉格朗日乘子。

流('目标函数值是%d。\n迭代次数为%d。\n拉格朗日乘数是%d。\n'...fval、output.iterations lambda.Constraints)
目标函数值为-3.133073e+10。迭代次数为7。拉格朗日乘数是1.500050e+04。

计算约束条件,看解是否在边界上。

流('线性不等式约束sum(x)的值为%d.\n'总和(sol.x))
线性不等式约束和(x)的值为7.599738e-09。

解决方案组件的和是零到公差范围内。

解决方案x有三个区域:初始部分,最终部分,和大部分溶液的近似线性部分。绘制三个区域。

次要情节(1,1)情节(sol.x(一60))标题((1)通过x(60)”) subplot(3,1,2) plot(sol.x(61:n-60)) title(“x(61)通过x (n-60) ') subplot(3,1,3) plot(sol.x(n-59:n)) title(“x (n-59) x (n) '

相关的话题