具有绑定约束的二次编程:基于问题

此示例显示如何用二次目标函数制定和解决可扩展的绑定受限问题。该示例显示了使用多个算法的解决方案行为。问题可以有任何数量的变量;变量的数量是比例。对于此示例的基于求解版本,请参阅绑定约束的二次最小化

目标函数,作为问题变量数量的函数N, 是

2 σ. 一世 = 1 N X 一世 2 - 2 σ. 一世 = 1 N - 1 X 一世 X 一世 + 1 - 2 X 1 - 2 X N

创造问题

创建一个名为的问题变量X有400个组件。此外,创建一个名为的表达式objec.对于目标函数。除了允许之外,下面将下降0且上方的每个变量绑定在下方0.9 X N 无拘无束。

n = 400;x = Optimvar('X',n,'indowbound',0,'上行',0.9);x(n).lowerbound = -inf;x(n).upperbound = Inf;previme = 1:n-1;nexttime = 2:n;objec = 2 * sum(x。^ 2) -  2 * sum(x(nexttime)。* x(previme)) -  2 * x(1) -  2 * x(结束);

创建名为的优化问题Qprob.。包括问题的目标函数。

qprob = OptimProblem('客观的',objec);

创建指定的选项Quadprog.'信任区域反光'算法和无显示。创建初始点近似居中的界限。

opts = Optimoptions('quadprog''算法''信任区域反光''展示''离开');x0 = 0.5 * x0(n,1);x00 = struct('X',x0);

解决问题并检查解决方案

解决这个问题。

[SOL,QFVAL,QEXitFLAG,QOUTPUT] =解决(QPROB,X00,'选项',选择);

绘制解决方案。

图(sol.x,'b-')xlabel('指数')ylabel('x(索引)'

报告退出标志,迭代次数以及共轭渐变迭代的数量。

fprintf('退出标志=%d,迭代=%d,cg iterations =%d \ n'......Double(qexitflag),qoutput.Iltations,qOutput.Cgerations)
退出标志= 3,迭代= 19,CG迭代= 1636

有很多共轭渐变迭代。

调整效率提高的选项

通过设置来减少共轭渐变迭代的数量子项产算法选择“因子化”。此选项使求解器使用更昂贵的内部解决方案技术,该技术消除了共轭梯度步骤,以便在这种情况下节省时间的净整体节省。

opts.subproblebalgorithm =“因子化”;[sol2,qfval2,qexitflag2,qoutput2] =求解(qprob,x00,'选项',选择);fprintf('退出标志=%d,迭代=%d,cg iterations =%d \ n'......Double(qexitflag2),qoutput2.Irtations,qoutput2.Cgiterations)
退出标志= 3,迭代= 10,CG迭代= 0

迭代次数和共轭梯度迭代的数量减少。

比较解决方案万博 尤文图斯'内点'解决方案

将这些解决方案与使用默认值进万博 尤文图斯行比较'内点'算法。这'内点'算法不使用初始点,因此请勿通过X00.解决

opts = Optimoptions('quadprog''算法''内部point-convex''展示''离开');[sol3,qfval3,qexitflag3,qoutput3] =解决(qprob,'选项',选择);fprintf('退出标志=%d,迭代=%d,cg iterations =%d \ n'......Double(qexitflag3),qoutput3.Irlations,0)
退出标志= 1,迭代= 8,CG迭代= 0
中间=地板(N / 2);fprintf('三种解决方案略有不同万博 尤文图斯。\ n中间组分是%f,%f或%f。\ n'......sol.x(中间),sol2.x(中间),sol3.x(中间))
三种解决方案略有不同万博 尤文图斯。中间组分为0.896278,0.898676或0.857389。
fprintf('溶胶2的相对规范是%f。\ n',符号(Sol.x-sol2.x)/ narm(sol.x)))
溶胶 -  sol2的相对标准为0.001997。
fprintf('sol2  -  sol3的相对规范是%f。\ n',符号(sol2.x-sol3.x)/ narm(sol2.x)))
Sol2  -  Sol3的相对规范是0.035894。
fprintf(['三个客观函数值是%f,%f和%f。\ n'......“”内部点“算法略低于准确。”],qfval,qfval2,qfval3)
三个客观函数值为-1.985000,-1.985000和-1.984963。“内部点”算法略低于准确。

相关话题