带约束的二次规划:基于问题的
这个例子展示了如何用二次目标函数来表述和解决一个可扩展的有界约束问题。该示例显示了使用几种算法的解决方案行为。问题可以有任意数量的变量;变量的数量就是尺度。有关此示例的基于求解器的版本,请参见约束条件下的二次极小化.
目标函数,作为问题变量数量的函数n,是
创建问题
创建一个名为x
它有400个分量。另外,创建一个名为objec
对于目标函数。除allow外,每个变量的下限为0,上限为0.9
无界。
N = 400;X = optimvar(“x”n下界的0,“UpperBound”, 0.9);x (n)。LowerBound = -Inf;x (n)。上限= Inf;Prevtime = 1:n-1;Nexttime = 2:n;objec = 2 *总和(x ^ 2) - 2 *总和(x (nexttime)。* x (prevtime)) - 2 * (1) - 2 * x(结束);
创建一个名为qprob
.在问题中包含目标函数。
Qprob =优化问题(“目标”, objec);
属性的选项quadprog
“trust-region-reflective”
算法和无显示。在边界之间创建一个近似居中的初始点。
Opts = optimoptions(“quadprog”,“算法”,“trust-region-reflective”,“显示”,“关闭”);X0 = 0.5*ones(n,1);X00 = struct(“x”, x0);
解决问题并检查解决方案
解决问题。
[sol,qfval,qexitflag,qoutput] = solve(qprob,x00,“选项”、选择);
画出解。
情节(sol.x“b -”)包含(“指数”) ylabel (“x(指数))
报告退出标志、迭代次数和共轭梯度迭代次数。
流('退出标志= %d,迭代= %d, cg迭代= %d\n',...双(qexitflag) qoutput.iterations qoutput.cgiterations)
退出标志= 3,迭代= 19,cg迭代= 1668
有很多共轭梯度迭代。
调整选项以提高效率
方法减少共轭梯度迭代的次数SubproblemAlgorithm
选项“分解”
.这个选项导致求解器使用更昂贵的内部求解技术,消除了共轭梯度步骤,在这种情况下节省了净时间。
选择。SubproblemAlgorithm =“分解”;[sol2,qfval2,qexitflag2,qoutput2] = solve(qprob,x00, qoutput2)“选项”、选择);流('退出标志= %d,迭代= %d, cg迭代= %d\n',...双(qexitflag2) qoutput2.iterations qoutput2.cgiterations)
退出标志= 3,迭代= 10,cg迭代= 0
迭代次数和共轭梯度迭代次数减少。
比较解决方案金宝搏官方网站“内点”
解决方案
将这些解决方案与使用默认值获金宝搏官方网站得的解决方案进行比较“内点”
算法。的“内点”
算法不使用初始点,所以不通过x00
来解决
.
Opts = optimoptions(“quadprog”,“算法”,“interior-point-convex”,“显示”,“关闭”);[sol3,qfval3,qexitflag3,qoutput3] = solve(qprob, qprob, qoutput3)“选项”、选择);流('退出标志= %d,迭代= %d, cg迭代= %d\n',...双(qexitflag3), qoutput3.iterations, 0)
退出标志= 1,迭代= 8,cg迭代= 0
中间=楼层(n/2);流(这三种解决方案略有不同金宝搏官方网站。\n中间的分量是%f, %f或%f。\n',...sol.x(中间),sol2.x(中间),sol3.x(中间)
这三种解决方案略有不金宝搏官方网站同。中间分量是0.896796、0.898676或0.857389。
流(' sol - sol2的相对范数为%f.\n'、规范(sol.x-sol2.x) /规范(sol.x))
sol - sol2的相对范数为0.001445。
流(' sol2 - sol3的相对范数为%f.\n'、规范(sol2.x-sol3.x) /规范(sol2.x))
sol2 - sol3的相对范数为0.035894。
流([三个目标函数值为%f, %f和%f。\n'...“‘内点’算法的准确性稍差。”, qfval qfval2 qfval3)
三个目标函数值分别为-1.985000、-1.985000和-1.984963。“内点”算法稍差一些。