与绑定约束二次规划:具体问题具体分析
这个例子展示了如何制定和解决一个可伸缩的bound-constrained问题二次目标函数。这个例子显示了使用一些算法解决方案的行为。这个问题可以有任意数量的变量;变量的数量规模。solver-based版本的这个例子中,看到的二次与绑定约束最小化。
目标函数,函数变量的数量问题n,是
创建问题
创建一个问题变量命名x
400组件。同时,创建一个表达式指定objec
目标函数。绑定每个变量低于0和0.9以上,除了允许
是无限的。
n = 400;x = optimvar (“x”n下界的0,“UpperBound”,0.9);x (n)。下界=无穷;x (n)。UpperBound =正;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”
算法和不显示。创建一个初始点大约集中之间的界限。
选择= optimoptions (“quadprog”,“算法”,“trust-region-reflective”,“显示”,“关闭”);x0 = 0.5 *的(n - 1);x00 =结构(“x”,x0);
解决问题并研究解决方案
解决这个问题。
[溶胶,qfval qexitflag qoutput] =解决(qprob x00,“选项”、选择);
策划解决方案。
情节(sol.x“b -”)包含(“指数”)ylabel (“x(指数))
报告出口标志,迭代次数,共轭梯度迭代的数量。
流('退出标志= % d,迭代= % d, cg迭代= % d \ n ',…双(qexitflag) qoutput.iterations qoutput.cgiterations)
出口标志= 3,迭代= 19日cg迭代= 1607
有很多共轭梯度迭代。
调整选项,提高效率
减少共轭梯度迭代通过设置SubproblemAlgorithm
选项“分解”
。这个选项使解算器使用更贵的内部解决方案技术,消除了共轭梯度的步骤,为净总节省时间。
选择。SubproblemAlgorithm =“分解”;[sol2, qfval2 qexitflag2 qoutput2] =解决(qprob x00,“选项”、选择);流('退出标志= % d,迭代= % d, cg迭代= % d \ n ',…双(qexitflag2) qoutput2.iterations qoutput2.cgiterations)
出口标志= 3,迭代= 10,cg迭代= 0
共轭梯度迭代的迭代次数和降低了。
比较解决方案和金宝搏官方网站“内点”
解决方案
比较这些解决方案获得使用默认金宝搏官方网站“内点”
算法。的“内点”
算法不使用一个初始点,所以没有通过x00
来解决
。
选择= optimoptions (“quadprog”,“算法”,“interior-point-convex”,“显示”,“关闭”);[sol3, qfval3 qexitflag3 qoutput3] =解决(qprob,“选项”、选择);流('退出标志= % d,迭代= % d, cg迭代= % d \ n ',…双(qexitflag3), qoutput3.iterations, 0)
出口标志= 1,迭代= 8,cg迭代= 0
中间=地板(n / 2);流(的三个解决方案略有不同金宝搏官方网站。\ nThe中间组件是% f, f %或% f。\ n”,…sol.x(中间),sol2.x(中间),sol3.x(中间)
这三个方案都略有不同金宝搏官方网站。中间组件是0.895703、0.898676或0.857389。
流(相对规范的sol - sol2 % f。\ n”、规范(sol.x-sol2.x) /规范(sol.x))
相对规范的sol - sol2是0.002359。
流(相对规范的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。的内点算法是不那么准确的。