此示例显示如何用二次目标函数制定和解决可扩展的绑定受限问题。该示例显示了使用多个算法的解决方案行为。问题可以有任何数量的变量;变量的数量是比例。对于此示例的基于求解版本,请参阅绑定约束的二次最小化。
目标函数,作为问题变量数量的函数N, 是
创建一个名为的问题变量X
有400个组件。此外,创建一个名为的表达式objec.
对于目标函数。除了允许之外,下面将下降0且上方的每个变量绑定在下方0.9
无拘无束。
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。“内部点”算法略低于准确。