二次规划就是求向量的问题
这样<年代pan class="inlineequation">·x≤
interior-point-convexquadprog算法
的interior-point-convex 算法执行如下步骤:
请注意年代trong>
该算法有两个代码路径。Hessian矩阵取1H 是不是一个普通的(全)双精度矩阵,它取另一个什么时候H 为稀疏矩阵。关于稀疏数据类型的详细信息请参见稀疏矩阵 .一般来说,当您指定时,算法对于非零项相对较少的大问题会更快H 作为稀疏的.类似地,当您指定小的或相对密集的问题时,算法会更快H 作为完整的.
<年代ect我on itemprop="content">
Presolve / Postsolve
该算法首先试图通过去除冗余和简化约束来简化问题。在预解步骤中执行的任务包括:
检查是否有任何变量有相同的上界和下界。如果是,检查可行性,然后修复和删除变量。
检查线性不等式约束是否只包含一个变量。如果是,检查可行性,然后将线性约束改为一个界。
检查是否任何线性等式约束只涉及一个变量。如果是,检查可行性,然后修复并删除变量。
检查任何线性约束矩阵是否有零行。如果是,检查是否可行,然后删除行。
确定边界和线性约束是否一致。
检查是否有变量只出现在目标函数的线性项中而不出现在任何线性约束中。如果是,检查可行性和有界性,然后将变量固定在适当的界限。
通过添加松弛变量,将线性不等式约束变为线性等式约束。
如果算法检测到一个不可行的或无界的问题,它会停止并发出适当的退出消息。
gydF4y2Ba算法可能会到达一个代表解的可行点。
gydF4y2Ba如果算法在解算步骤中没有检测到不可行或无界问题,并且解算过程没有产生解,则算法继续其下一步。在达到停止准则后,该算法重建原始问题,撤消任何解前转换。最后一步是postsolve步骤。
gydF4y2Ba详情请参见Gould和Toint[63] .
年代ect我on>
生成初始点
起始点x0 算法为:
初始化x0 来的(n, 1) ,在那里n 行数是多少H .
对于两个都有上界的组件乌兰巴托 还有一个下界磅 ,如果是x0 是否严格地在边界内,组件被设置为(乌兰巴托+磅)/ 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完整的“内点”算法,但也包括二次项。看到
Altman, Anna和J. gonzio。
范德贝,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 -space,如果您想要改进,即移动到一个函数值较低的点。基本思想是近似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 为Hessian矩阵(二阶导数的对称矩阵),D 为对角线缩放矩阵,Δ为正标量,∥。∥是2-范数。有很好的求解算法方程7 (见[48] );这种算法通常涉及到的所有特征值的计算H 牛顿过程应用于
这样的算法提供了一个精确的解决方案
这种选择背后的哲学
gydF4y2Ba使用信任区域思想的无约束最小化的草图现在很容易给出:
构建二维信任域子问题。
解决
如果<年代pan class="inlineequation">f(
Δ调整。
这四个步骤重复,直到收敛。信任区域维度Δ根据标准规则进行调整。特别是,如果试验步骤不被接受,它就会减少,即:<年代pan class="inlineequation">f(
gydF4y2Ba最优化工具箱求解器处理一些重要的特殊情况
gydF4y2Ba采用子空间信赖域方法确定搜索方向。然而,不像在非线性极小化的情况下,将这一步(可能)限制为一个反射步骤,而是分段地
求解大型、对称、正定线性方程组的一种流行方法<年代pan class="inlineequation">惠普=-
gydF4y2Ba在最小化的情况下,你可以假设Hessian矩阵
线性约束使描述的无约束极小化情况复杂化。然而,前面描述的基本思想可以以一种干净有效的方式进行。最优化工具箱求解器中的信任区域方法生成严格可行的迭代。
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如果算法在解算步骤中没有检测到不可行或无界问题,并且解算过程没有产生解,则算法继续其下一步。在达到停止准则后,该算法重建原始问题,撤消任何解前转换。最后一步是postsolve步骤。
gydF4y2Ba详情请参见Gould和Toint[63] .
年代ect我on>
第一阶段的算法
在第1阶段,算法试图找到一个点x 满足所有约束条件,不考虑目标函数。quadprog 仅在提供的初始点时运行阶段1算法x0 是不可行的。
gydF4y2Ba首先,算法试图找到一个相对于所有等式约束可行的点,例如X = Aeq \说真的 .如果没有解决办法x 的方程Aeq * x =说真的 ,算法就会停止。如果有解决办法的话X ,下一步是满足边界和线性不等式。在没有相等约束集的情况下X = x0 ,起始点。
gydF4y2Ba从X ,算法计算M = max(A*X - b, X - ub, lb - X) .如果M < =选项。ConstraintTolerance
,然后是重点X 是可行的,阶段1算法停止。gydF4y2Ba如果M >选项。ConstraintTolerance
,算法引入一个非负松弛变量
这样
在这里,
gydF4y2Ba为了解决辅助线性规划问题,给出了算法集
用变量表示
在这里,
gydF4y2Ba在阶段2中,一个活动集<年代pan class="inlineequation"> ,它是对解决点上的主动约束(约束边界上的约束)的估计。
gydF4y2Ba该算法更新<年代pan class="inlineequation">
在每一次迭代
gydF4y2Ba算法形成矩阵
在哪里
后发现
gydF4y2Ba把二次方程看成是
对这个方程求微分
∇
然后算法对表单进行一步操作
在哪里
由于目标函数的二次性质,步长只有两种选择
它是为不在活动集合中的约束定义的,方向在哪里
gydF4y2Ba当活动集包括
如果所有的元素
gydF4y2Ba有时,当解算器用完所有非负的拉格朗日乘子后,一阶最优测度超过公差,或不满足约束公差。在这些情况下,解算器试图通过遵循中描述的重新启动过程来获得更好的解决方案
请注意年代trong>
不要试图通过设置较大的?值来尽早停止算法
偶尔,
吉尔,体育博士,W.默里,M. A.桑德斯和M. H.赖特。
当你运行“激活集”以热启动对象作为起始点的算法,求解器尝试跳过许多阶段1和阶段2的步骤。热启动对象包含约束的活动集,该集对于新问题可以是正确的或接近正确的。因此,求解器可以避免向活动集添加约束的迭代。而且,初始点可能接近新问题的解决方案。有关更多信息,请参见
optimwarmstart.