二次规划是求向量的问题
这样<年代pan class="inlineequation">·x≤
interior-point-convexquadprog算法
的interior-point-convex 算法执行以下步骤:
请注意年代trong>
该算法有两条编码路径。当黑森矩阵是1H 是一个普通的(完整的)双精度矩阵,当它取另一个时H 是一个稀疏矩阵。有关稀疏数据类型的详细信息,请参见稀疏矩阵 .通常,对于指定的非零项相对较少的大问题,该算法速度更快H 作为稀疏的.类似地,当您指定时,该算法对于较小或相对密集的问题更快H 作为完整的.
<年代ect我on itemprop="content">
Presolve / Postsolve
该算法首先试图通过去除冗余和简化约束来简化问题。预解步骤中执行的任务包括以下内容:
检查变量是否有相等的上界和下界。如果是,检查可行性,然后修复和删除变量。
检查是否任何线性不等式约束只涉及一个变量。如果是,检查可行性,然后将线性约束更改为边界。
检查是否任何线性等式约束只涉及一个变量。如果是,检查可行性,然后修复和删除变量。
检查是否有线性约束矩阵为零行。如果存在,请检查是否可行,然后删除这些行。
确定边界和线性约束是否一致。
检查是否有变量仅作为线性项出现在目标函数中,而没有出现在任何线性约束中。如果是,检查可行性和有界性,然后将变量固定在适当的边界上。
通过添加松弛变量,将任何线性不等式约束更改为线性等式约束。
如果算法检测到一个不可行的或无界的问题,它将停止并发出适当的退出消息。
gydF4y2Ba算法可能会到达一个单一的可行点,它代表解决方案。
gydF4y2Ba如果算法在预解步骤中没有检测到不可行或无界问题,并且如果预解没有产生解,则算法继续进行下一个步骤。在达到一个停止准则后,算法重建原始问题,撤销任何预解变换。最后一步是后解步骤。
gydF4y2Ba详情见Gould and Toint[63] .
年代ect我on>
生成初始点
起始点x0 其中,算法为:
初始化x0 来的(n, 1) ,在那里n 行数是多少H .
对于有上界的分量乌兰巴托 还有一个下界磅 的组成部分x0 是不是严格在边界内,组件被设置为(ub + lb)/2 .
对于只有一个边界的组件,如果有必要,可以修改该组件,使其严格位于边界内。
采取预测步骤(参见预估 ),对可行性进行了微小的修正,而不是一个完整的预测-校正步骤。这使得起始点更接近中央路径 不需要整个预测-校正步骤的开销。关于中心路径的详细信息,请参见Nocedal和Wright[7] 第397页。
稀疏内点凸算法和全内点凸算法的区别主要在于预测-校正阶段。算法是相似的,但在一些细节上有所不同。基本算法描述请参见Mehrotra
gydF4y2Ba算法首先将线性不等式Ax <= b转化为Ax >= b形式的不等式A和b乘以-1。这与解决方案没有关系,但使问题的形式与一些文献中发现的相同。
稀疏的预估。年代trong>类似于
在这里
是扩展的线性不等式矩阵,它包含了写成线性不等式的边界。<年代pan class="inlineequation"> 是对应的线性不等式向量,包括边界。
年代将不等式约束转换为等式的松弛向量。
z拉格朗日乘子的向量对应于什么
y是与等式约束相关的拉格朗日乘子的向量。
该算法首先从牛顿-拉弗森公式中预测一个步长,然后计算一个校正步长。修正器试图更好地执行非线性约束<年代pan class="inlineequation">年代<年代ub>我年代ub>z
gydF4y2Ba预测器步骤的定义:
r<年代ub>d,对偶残差:
r<年代ub>情商年代ub>,原始等式约束残差:
r<年代ub>我n情商,原始不等式约束残差,包括边界和松弛:
r<年代ub>深圳年代ub>,互补残差:
r<年代ub>深圳年代ub>=
r<年代ub>c,平均互补:
在牛顿阶跃中,变化
然而,完全牛顿步长可能是不可行的,因为正的约束
gydF4y2Ba此外,要在内部保持一个“居中”的位置,而不是试图解决<年代pan class="inlineequation">年代<年代ub>我年代ub>z
年代<年代ub>我年代ub>z
quadprog替换
gydF4y2Ba在计算修正的牛顿步长后,算法执行更多的计算以获得更长的当前步长,并为更好的后续步长做准备。这些多重修正计算可以提高性能和鲁棒性。详情见Gondzio
<年代trong id="bvj25y3-1">完整的预估。年代trong>完整的预测-校正算法没有将边界组合成线性约束,因此它有另一组与边界对应的松弛变量。算法将下界移到零。而且,如果一个变量只有一个上界,算法就会通过对上界的不等式求反,把它变成0的下界。
<年代pan class="inlineequation">
是扩展的线性矩阵,它包括线性不等式和线性等式。<年代pan class="inlineequation">
是对应的线性相等向量。<年代pan class="inlineequation">
还包括用于扩展向量的术语
在哪里
gydF4y2BaKKT的条件是
找到解决方案
在哪里
r<年代ub>d,对偶残差
r<年代ub>p,原始残差
r<年代ub>乌兰巴托年代ub>,上限残差
r<年代ub>vx,下界互补残差
r<年代ub>wt为上界互补残差
算法求解
在哪里
所有矩阵在定义中的逆
gydF4y2Ba获得
gydF4y2Ba来解决
gydF4y2Ba在计算修正的牛顿步长后,算法执行更多的计算以获得更长的当前步长,并为更好的后续步长做准备。这些多重修正计算可以提高性能和鲁棒性。详情见Gondzio
gydF4y2Ba完整的“内点”算法,但也包括二次项。看到
奥尔特曼,安娜和J.冈齐奥。
[2]范德贝,R. J.和T. J.卡朋特。
预测-校正算法迭代直到它达到一个可行的点(满足限制到公差范围内),并且相对步长很小。具体来说,定义
当满足以下所有条件时,算法停止:
在哪里
r<年代ub>c本质上是度量互补残差的大小
quadprog计算一个<年代pan class="emphasis">优值函数年代pan>φ在每次迭代中。价值函数是可行性的衡量标准。
gydF4y2Ba价值函数与问题的KKT条件有关——看
的符号<年代pan class="inlineequation">
而且<年代pan class="inlineequation">
表示线性不等式系数,加上表示稀疏算法边界的项。的符号<年代pan class="inlineequation">
类似地表示线性不等式约束的拉格朗日乘子,包括约束约束。这叫做
gydF4y2Ba价值函数
如果这个价值函数变得太大,
trust-region-reflectivequadprog算法
优化工具箱™求解器中使用的许多方法都是基于<年代pan class="emphasis">信任区域,年代pan>优化中的一个简单而强大的概念。
gydF4y2Ba为了理解信任域优化方法,考虑无约束最小化问题,最小化f (x ),其中函数接受向量参数并返回标量。假设你在某一点上x 在n -空间,你想要改进,即移动到函数值较低的点。基本思想是近似f 用一个更简单的函数问 ,合理地反映了函数的行为f 在一个社区N 围绕这一点x .这个区域是信任区域。试验步骤年代 是通过最小化(或近似最小化)来计算的N .这是信任域子问题,
(6)年代trong>
当前点被更新为x +年代如果<年代pan class="inlineequation">f(x +年代) <f(x )年代pan>;否则,当前点保持不变N ,缩小信任区域,重复试步计算。
gydF4y2Ba定义特定信任区域最小化方法的关键问题f (x )是如何选择和计算近似值问 (定义在当前点x ),如何选择和修改信任区域N ,以及如何准确地求解信赖域子问题。本节主要讨论无约束问题。后面的部分讨论由于变量约束的存在而产生的其他复杂性。
gydF4y2Ba在标准信赖域方法中([48] ),即二次逼近问 是由泰勒近似的前两项定义的F 在x ;附近N 通常在形状上呈球形或椭球形。在数学上,信任域子问题是典型的表述
(7)年代trong>
在哪里g 的梯度f 在目前的情况下x ,H 为海森矩阵(二阶导数的对称矩阵),D 为对角线比例矩阵,Δ为正标量,∥。∥是2范数。好的算法是存在的方程7 (见[48] );的所有特征值的计算H 牛顿过程应用于
这种算法提供了一个精确的解
这种选择背后的哲学
gydF4y2Ba使用信任域思想的无约束最小化的草图现在很容易给出:
给出二维信赖域子问题。
解决
如果<年代pan class="inlineequation">f(
Δ调整。
重复这四个步骤直到收敛为止。信任域维度Δ根据标准规则进行调整。特别是,如果不接受试验步骤,则减少,即,<年代pan class="inlineequation">f(
gydF4y2Ba优化工具箱求解器处理一些重要的特殊情况
gydF4y2Ba采用子空间信赖域法确定搜索方向。然而,在非线性最小化情况下,不是将步骤限制为(可能)一个反射步骤,而是分段
一种常用的解大型对称正定线性方程组的方法<年代pan class="inlineequation">惠普=-
gydF4y2Ba在最小化的情况下,你可以假设黑森矩阵
线性约束使描述无约束最小化的情况复杂化。然而,前面描述的基本思想可以以一种干净有效的方式进行。优化工具箱求解器中的信赖域方法生成严格可行迭代。
gydF4y2Ba一般线性等式约束的最小化问题可以写成
在哪里
gydF4y2Ba用这种方法求解
在哪里<年代pan class="inlineequation">
接近
盒约束问题的形式为
在哪里
gydF4y2Ba尺度修正牛顿阶跃是在考察库恩-塔克必要条件的基础上提出的
在哪里
这个向量
如果<年代pan class="inlineequation">g<年代ub>我年代ub>< 0而且<年代pan class="inlineequation">u<年代ub>我年代ub><∞然后<年代pan class="inlineequation">v<年代ub>我年代ub>=
如果<年代pan class="inlineequation">g<年代ub>我年代ub>≥0而且<年代pan class="inlineequation">l<年代ub>我年代ub>>-∞年代pan>然后<年代pan class="inlineequation">v<年代ub>我年代ub>=
如果<年代pan class="inlineequation">g<年代ub>我年代ub>< 0而且<年代pan class="inlineequation">u<年代ub>我年代ub>=∞然后<年代pan class="inlineequation">v<年代ub>我年代ub>= 1
如果<年代pan class="inlineequation">g<年代ub>我年代ub>≥0而且<年代pan class="inlineequation">l<年代ub>我年代ub>=-∞年代pan>然后<年代pan class="inlineequation">v<年代ub>我年代ub>= 1
非线性系统
gydF4y2Ba缩放修正牛顿阶跃
在
而且
在这里
gydF4y2Ba第二,
有效集quadprog算法
完成预解步骤后,将有效集 算法分两个阶段进行。
阶段1 -获得一个关于所有约束的可行点。
阶段2 -迭代降低目标函数,同时维护一个活动约束列表,并在每次迭代中保持可行性。
的有效集 策略(也称为投影方法)类似于Gill等人的策略,在[18] 而且[17] .
<年代ect我on itemprop="content">
Presolve一步
该算法首先试图通过去除冗余和简化约束来简化问题。预解步骤中执行的任务包括以下内容:
检查变量是否有相等的上界和下界。如果是,检查可行性,然后修复和删除变量。
检查是否任何线性不等式约束只涉及一个变量。如果是,检查可行性,然后将线性约束更改为边界。
检查是否任何线性等式约束只涉及一个变量。如果是,检查可行性,然后修复和删除变量。
检查是否有线性约束矩阵为零行。如果存在,请检查是否可行,然后删除这些行。
确定边界和线性约束是否一致。
检查是否有变量仅作为线性项出现在目标函数中,而没有出现在任何线性约束中。如果是,检查可行性和有界性,然后将变量固定在适当的边界上。
通过添加松弛变量,将任何线性不等式约束更改为线性等式约束。
如果算法检测到一个不可行的或无界的问题,它将停止并发出适当的退出消息。
gydF4y2Ba算法可能会到达一个单一的可行点,它代表解决方案。
gydF4y2Ba如果算法在预解步骤中没有检测到不可行或无界问题,并且如果预解没有产生解,则算法继续进行下一个步骤。在达到一个停止准则后,算法重建原始问题,撤销任何预解变换。最后一步是后解步骤。
gydF4y2Ba详情见Gould and Toint[63] .
年代ect我on>
阶段1算法
在阶段1中,算法试图找到一个点x 它满足所有的约束条件,不考虑目标函数。quadprog 仅当提供的初始点时,才运行阶段1算法x0 是不可行的。
gydF4y2Ba首先,算法试图找到一个在所有等式约束下都可行的点,例如X = Aeq\beq .如果没有解决方案x 方程Aeq*x = beq ,则算法停止。如果有解决办法的话X ,下一步是满足边界和线性不等式。在不设置等式约束的情况下X = x0 ,起始点。
gydF4y2Ba从X ,算法计算M = max(A*X - b, X - ub, lb - X) .如果M <= options。ConstraintTolerance
这一点X 可行,阶段1算法停止。gydF4y2Ba如果M >选项。ConstraintTolerance
时,算法引入一个非负松弛变量
这样
在这里,
gydF4y2Ba为了解决辅助线性规划问题,算法集
就变量而言
在这里,
gydF4y2Ba在第二阶段,一个活跃的集合<年代pan class="inlineequation"> ,这是解点上活动约束(约束边界上的约束)的估计值。
gydF4y2Ba算法更新<年代pan class="inlineequation">
在每次迭代中
gydF4y2Ba算法形成矩阵
在哪里
后发现
gydF4y2Ba把二次函数看成是的函数
对这个方程求导
∇
然后,该算法执行表单中的一步
在哪里
由于目标函数的二次性质,步长只有两种选择
哪个是为不在活动集中的约束定义的,方向在哪里
gydF4y2Ba当活动集包括
如果所有的元素
gydF4y2Ba有时,当求解器完成所有非负拉格朗日乘子时,一阶最优测度高于公差,或约束公差不满足。在这些情况下,求解器试图通过遵循中描述的重新启动过程来达到更好的解决方案
请注意年代trong>
不要试图通过设置较大的值来早期停止算法
偶尔,
[1]吉尔,p.e., W.默里,M. A.桑德斯和M. H.赖特。
当你运行“激活集”算法使用一个暖起始对象作为起点,求解器尝试跳过许多阶段1和阶段2步骤。暖启动对象包含活动约束集,该集合可以是正确的,也可以接近于新问题的正确。因此,求解器可以避免向活动集添加约束的迭代。而且,初始点可能与新问题的解很接近。有关更多信息,请参见
optimwarmstart.