二次规划是寻找向量的问题
以致<年代pan class="inlineequation">A·x≤
内点凸Quadprog.算法
的内点凸 算法执行以下步骤:
请注意
该算法有两条代码路径。当Hessian矩阵H 是不是一个普通的(全)双精度矩阵,它取另一个什么时候H 是稀疏矩阵。有关稀疏数据类型的详细信息,请参阅稀疏矩阵 (MATLAB)。一般来说,当您指定时,算法对于非零项相对较少的大问题会更快H 作为稀疏的. 类似地,当您指定H 作为满的.
<年代ect我on itemprop="content">
预计/ postsolve.
该算法首先试图通过去除冗余和简化约束来简化问题。在预解步骤中执行的任务包括:
检查是否有任何变量有相同的上界和下界。如果是,检查可行性,然后修复和删除变量。
检查线性不等式约束是否只包含一个变量。如果是,检查可行性,然后将线性约束改为一个界。
检查是否任何线性等式约束只涉及一个变量。如果是,检查可行性,然后修复并删除变量。
检查任何线性约束矩阵是否有零行。如果有,请检查可行性,然后删除行。
确定界限和线性约束是否一致。
检查是否有变量只出现在目标函数的线性项中而不出现在任何线性约束中。如果是,检查可行性和有界性,然后将变量固定在适当的界限。
通过添加松弛变量,将线性不等式约束变为线性等式约束。
如果算法检测到不可行或无界问题,它将停止并发出相应的退出消息。
gydF4y2Ba该算法可能会到达一个单一的可行点,这代表了解决方案。
gydF4y2Ba如果算法在解算步骤中没有检测到不可行或无界问题,并且解算过程没有产生解,则算法继续其下一步。在达到停止准则后,该算法重建原始问题,撤消任何解前转换。最后一步是postsolve步骤。
gydF4y2Ba有关详细信息,请参见古尔德和托因[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全部'内点'算法,但也包括二次项。看见
[1] 奥特曼、安娜和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优点函数
如果这个价值函数变得太大,
信赖域反射Quadprog.算法
最优化工具箱™求解器中使用的许多方法都基于<年代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 为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">
预溶台阶
该算法首先试图通过去除冗余和简化约束来简化问题。在预解步骤中执行的任务包括:
检查是否有任何变量有相同的上界和下界。如果是,检查可行性,然后修复和删除变量。
检查线性不等式约束是否只包含一个变量。如果是,检查可行性,然后将线性约束改为一个界。
检查是否任何线性等式约束只涉及一个变量。如果是,检查可行性,然后修复并删除变量。
检查任何线性约束矩阵是否有零行。如果有,请检查可行性,然后删除行。
确定界限和线性约束是否一致。
检查是否有变量只出现在目标函数的线性项中而不出现在任何线性约束中。如果是,检查可行性和有界性,然后将变量固定在适当的界限。
通过添加松弛变量,将线性不等式约束变为线性等式约束。
如果算法检测到不可行或无界问题,它将停止并发出相应的退出消息。
gydF4y2Ba该算法可能会到达一个单一的可行点,这代表了解决方案。
gydF4y2Ba如果算法在解算步骤中没有检测到不可行或无界问题,并且解算过程没有产生解,则算法继续其下一步。在达到停止准则后,该算法重建原始问题,撤消任何解前转换。最后一步是postsolve步骤。
gydF4y2Ba有关详细信息,请参见古尔德和托因[63] .
年代ect我on>
第一阶段的算法
在第1阶段,算法试图找到一个点x 满足所有约束条件,不考虑目标函数。Quadprog. 仅在提供的初始点时运行阶段1算法x0 是不可行的。
gydF4y2Ba首先,算法试图找到一个相对于所有等式约束可行的点,例如X = Aeq \说真的 .如果there is no solutionx方程组Aeq*x=beq ,然后算法停止。如果有解决方案X ,下一步是满足边界和线性不等式。在没有相等约束集的情况下X = x0 ,初始点。
gydF4y2Ba从X ,算法计算M = max(A*X - b, X - ub, lb - X) .如果M<=选项。约束公差 ,然后是重点X 是可行的,第1阶段算法停止。
gydF4y2Ba如果M >选项。ConstraintTolerance
,算法引入一个非负松弛变量γ. 对于辅助线性规划问题
以致
在这里ρ 是ConstraintTolerance 选项乘以其中最大元素的绝对值一个 和Aeq . 如果算法发现γ. = 0和一个点x 满足方程和不等式,然后x 是一个可行的阶段1点。如果辅助线性规划问题没有解x 具有γ. = 0,则阶段1问题不可行。
gydF4y2Ba为了解决辅助线性规划问题,给出了算法集γ. <年代ub>0=米+1,套x <年代ub>0=X ,并将活动集初始化为固定变量(如果有)和所有相等约束。该算法重新构造了线性规划变量p 补偿x 从目前来看x <年代ub>0,即<年代pan class="inlineequation">x=x <年代ub>0+p年代pan>.该算法通过与第2阶段解决二次规划问题相同的迭代来解决线性规划问题,并使用适当修改的Hessian。
年代ect我on>
第二阶段的算法
用变量表示d ,问题是
(17)年代trong>
在这里一个<年代ub>我年代ub> 指的是我 第四排米 -经过-n 矩阵一个 .
gydF4y2Ba在阶段2中,一个活动集<年代pan class="inlineequation">
,它是对解决点上的主动约束(约束边界上的约束)的估计。
gydF4y2Ba该算法更新<年代pan class="inlineequation">
在每一次迭代k ,构成搜索方向的基础d<年代ub>k .相等约束始终保持在活动集中<年代pan class="inlineequation">
.搜索方向d<年代ub>k ,并使目标函数最小化,同时保持在任何主动约束边界上。该算法形成可行子空间d<年代ub>k 根据Z<年代ub>k 其列与活动集的估计值正交<年代pan class="inlineequation">
(即,<年代pan class="inlineequation">
).因此,由列的任意组合的线性和构成的搜索方向Z<年代ub>k ,保证保持在活动约束的边界上。
gydF4y2Ba该算法形成矩阵Z<年代ub>k 从上<年代pan class="inlineequation">米- - - - - -l 年代pan>矩阵QR分解的列<年代pan class="inlineequation">
,在那里l 是活动约束和约束的数量l < m .也就是说,Z<年代ub>k 是由
(18)年代trong>
哪里
发现后Z<年代ub>k 时,算法寻找新的搜索方向d<年代ub>k 这最小化问 (d ),d<年代ub>k是在主动约束的零空间中。也就是说,d<年代ub>k 是列向量的线性组合吗Z<年代ub>k :<年代pan class="inlineequation">
为向量p .
gydF4y2Ba将二次函数视为p 被取代了d<年代ub>k ,给予
(19)年代trong>
对这个方程求微分p 收益率
(20)年代trong>
∇问 (p )年代pan>被称为二次函数的投影梯度因为它是在子空间中投影的梯度由Z<年代ub>k .这个词<年代pan class="inlineequation">
叫做投影黑森。假设投影的Hessian矩阵<年代pan class="inlineequation">
是半正定的,函数的最小值问 (p )在所定义的子空间中Z<年代ub>k 发生在<年代pan class="inlineequation">∇问 (p ) = 0,这是线性方程组的解
(21)年代trong>
然后,该算法采用以下形式的步骤
哪里
由于目标函数的二次性质,步长只有两种选择α. 存在于每次迭代。统一的一步d<年代ub>k 函数的最小值的精确步是否限制在零空间<年代pan class="inlineequation">
.如果the algorithm can take such a step without violating the constraints, then this step is the solution to the quadratic program (方程18).否则,继续前进d<年代ub>k 到最近的约束小于1,并且该算法在下一次迭代时在活动集中包含一个新的约束。在任何方向上到约束边界的距离d<年代ub>k 是由
它是为不在活动集合中的约束定义的,方向在哪里d<年代ub>k 朝向约束边界,即,<年代pan class="inlineequation">
.
gydF4y2Ba当活动集包括n 独立约束,无最小值位置,算法计算拉格朗日乘子λ.<年代ub>k ,满足非奇异线性方程组
(22)年代trong>
如果所有元素λ.<年代ub>k 是积极的,x<年代ub>k 二次规划问题的最优解是什么方程1 .但是,如果λ.<年代ub>k 如果为负,且组件不符合相等约束,则最小化不完整。该算法删除与最负乘数对应的元素,并开始新的迭代。
gydF4y2Ba有时,当解算器完成所有非负拉格朗日乘数时,一阶最优性度量值高于公差,或者不满足约束公差。在这些情况下,解算器会按照中所述的重新启动过程尝试获得更好的解决方案[1] .在这个过程中,求解器丢弃当前的主动约束集,稍微放松约束,并构造一组新的主动约束集,同时试图以避免循环(反复返回到相同的状态)的方式来解决问题。如果有必要,求解器可以多次执行重新启动过程。
请注意
不要试图通过设置较大的ConstraintTolerance 和最佳耐受性 选项。通常,求解器迭代时不检查这些值,直到它到达一个可能的停止点,然后才检查公差是否满足。
偶尔,活动集 当问题是无界的时,算法可能很难检测。如果方向为无界,则可能发生此问题v 是二次项的方向v 'Hv = 0.为了数值稳定性和实现Cholesky分解活动集 算法增加一个小的,严格凸项的二次目标。这个小项使目标函数的界限远离-INF. . 在这种情况下活动集 算法达到迭代限制,而不是报告解决方案是无界限的。换句话说,算法停止退出标志0 代替 -3. .
参考
吉尔,体育博士,W.默里,M. A.桑德斯和M. H.赖特。一种实用的线性约束优化反循环算法。 数学。程序设计45(1),1989年8月,第437-474页。