这个例子显示了如何制定,并与二次目标函数解决一个可扩展的边界约束的问题。该示例示出了使用多种算法的溶液行为。这个问题可以有任意数量的变量;变量的数量是规模。在这个例子中的基于求解器版本,请参阅二次最小化与界约束。
目标函数,问题的变量数的函数ñ,是
创建一个名为问题的变量X
有400个组件。此外,创建名为表达式objec
目标函数。由0以上0.9以下结合每个变量,除了允许
是无界的。
N = 400;X = optimvar('X',N,“下界”,0,“上界”,0.9);X(N)= .LowerBound -Inf;X(N)= .UpperBound Inf文件;prevtime = 1:N-1;nexttime = 2:N;objec = 2 *总和(X ^ 2) - 2 *总和(X(nexttime)* X(prevtime)) - 2 *×(1) - 2 * X(端);
创建一个名为优化问题qprob
。包括在问题的目标函数。
qprob = optimproblem('目的',objec);
创建选项指定quadprog
“trust-region-reflective”
算法和无显示。创建大致居中的边界之间的初始点。
OPTS = optimoptions('quadprog','算法',“trust-region-reflective”,“显示”,“关”);x0 = 0.5 *的(n - 1);x00 =结构('X',X0);
解决这个问题。
[溶胶,qfval qexitflag qoutput] =解决(qprob x00,“选项”,选择采用);
画出的解决方案。
图(sol.x,“b -”)包含('指数')ylabel (“×(索引)”)
报告出口标志,迭代的次数,和共轭梯度迭代的次数。
fprintf中('退出标志=%d,迭代=%d,CG迭代=%d \ n',...双(qexitflag),qoutput.iterations,qoutput.cgiterations)
出口标记= 3中,迭代= 19,CG迭代= 1636
有很多共轭梯度迭代。
通过设置SubproblemAlgorithm
选项“因式分解”
。该选项使求解器使用一个更昂贵的内部溶液的技术,其消除共轭梯度步骤,在这种情况下的时间净总节省。
opts.SubproblemAlgorithm =“因式分解”;[SOL2,qfval2,qexitflag2,qoutput2] =解决(qprob,X00,“选项”,选择采用);fprintf中('退出标志=%d,迭代=%d,CG迭代=%d \ n',...双(qexitflag2),qoutput2.iterations,qoutput2.cgiterations)
出口标记= 3中,迭代= 10,CG迭代= 0
迭代和共轭梯度迭代的次数减少。
“内点”
解将这些解决方案与使用缺省值得金宝搏官方网站到的解决方案进行比较“内点”
算法。该“内点”
算法不使用初始点,所以不通过X00
至解决
。
OPTS = optimoptions('quadprog','算法',“内点凸”,“显示”,“关”);[sol3, qfval3 qexitflag3 qoutput3] =解决(qprob,“选项”,选择采用);fprintf中('退出标志=%d,迭代=%d,CG迭代=%d \ n',...双(qexitflag3),qoutput3.iterations,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中(sol - sol2的相对标准为%f.\n'。,范数(sol.x-sol2.x)/常态(sol.x))
溶胶的相对规范 - SOL2是0.001997。
fprintf中('SOL2的相对标准 - SOL3是%F \ n'。,范数(sol2.x-sol3.x)/常态(sol2.x))
SOL2的相对规范 - SOL3是0.035894。
fprintf中(['三个目标函数值是%f、%f和%f.\n'...“‘内部点’算法的精确度略低。”],qfval,qfval2,qfval3)
这三个目标函数值是-1.985000,-1.985000和-1.984963。在“内点”算法准确性稍差。