线性规划的问题是找到一个向量
使以下一项或多项有效:
·x≤
Aeq·x=
l≤
的“内点”
算法非常类似于<一个href="//www.tianjin-qmedu.com/help/optim/ug/quadratic-programming-algorithms.html" class="a">interior-point-convex quadprog算法。它还与“interior-point-legacy”
算法。这些算法有相同的大纲:
解决,意思简化和转换问题到一个标准形式。
生成初始点。初始点的选择对于高效求解内点算法尤为重要,这一步骤非常耗时。
预测校正迭代求解KKT方程。这一步通常是最耗时的。
该算法首先试图通过去除冗余和简化约束来简化问题。在预解步骤中执行的任务包括:
检查是否有任何变量有相同的上界和下界。如果是,检查可行性,然后修复和删除变量。
检查任何线性不等式约束是否只涉及一个变量。如果是,请检查可行性,然后将线性约束更改为一个界。
检查任何线性等式约束是否只涉及一个变量。如果是,请检查可行性,然后修复并删除该变量。
检查任何线性约束矩阵是否有零行。如果是,检查是否可行,然后删除行。
确定边界和线性约束是否一致。
检查是否有变量只出现在目标函数的线性项中而不出现在任何线性约束中。如果是,检查可行性和有界性,然后将变量固定在适当的界限。
通过添加松弛变量,将线性不等式约束变为线性等式约束。
如果算法检测到一个不可行的或无界的问题,它会停止并发出适当的退出消息。
该算法可能会到达一个单一的可行点,这代表了解决方案。
如果算法在预解步骤中未检测到不可行或无界问题,并且如果预解未生成解决方案,则算法将继续其下一步骤。在达到停止标准后,该算法重建原始问题,撤消任何预解变换。最后一步是后求解步骤。
为简单起见,如果问题没有在预解步骤中解决,算法将所有的有限下界移到零。
为了设置初始点,
初始化
将所有有界组件转换为下限为0。如果组件
对于只有一个边界的组件,如有必要,请修改该组件,使其严格位于边界内。
把
类似于
现在假设所有变量至少有一个有限界。如果有必要,通过移动和否定组件,这个假设意味着所有
是扩展的线性矩阵,它包括线性不等式和线性等式。<年代p一个ncl一个年代年代="inlineequation">
是相应的线性等式向量。<年代p一个ncl一个年代年代="inlineequation">
还包括用于扩展向量的术语
在哪里
t是将上界转换为等式的松弛向量。
该系统的拉格朗日函数包括以下向量:
y,与线性等式相关的拉格朗日乘数
v,与下界(正性约束)相关的拉格朗日乘数
w,与上界相关的拉格朗日乘数
拉格朗日是
因此,该系统的KKT条件为
的λ
.
该算法首先根据牛顿-拉夫森公式预测步长,然后计算出校正步长。校正器试图减少非线性互补方程中的残差<年代p一个ncl一个年代年代="inlineequation">年代<年代ub>我z<年代ub>我= 0.牛顿-拉夫森阶跃是
(1) |
在哪里
r<年代ub>d,对偶残差
r<年代ub>p,原始残差
r<年代ub>乌兰巴托,上界残差
r<年代ub>vx,下界互补残差
r<年代ub>wt,上界互补残差
迭代显示报告这些数量:
来解决<一个href="//www.tianjin-qmedu.com/help/optim/ug/linear-programming-algorithms.html" class="intrnllnk">方程式1,首先将其转换为对称矩阵形式
(2) |
在哪里
定义中的所有矩阵逆
获得<一个href="//www.tianjin-qmedu.com/help/optim/ug/linear-programming-algorithms.html" class="intrnllnk">方程式2从<一个href="//www.tianjin-qmedu.com/help/optim/ug/linear-programming-algorithms.html" class="intrnllnk">方程式1,注意第二行<一个href="//www.tianjin-qmedu.com/help/optim/ug/linear-programming-algorithms.html" class="intrnllnk">方程式2与的第二个矩阵行相同<一个href="//www.tianjin-qmedu.com/help/optim/ug/linear-programming-algorithms.html" class="intrnllnk">方程式1.第一行<一个href="//www.tianjin-qmedu.com/help/optim/ug/linear-programming-algorithms.html" class="intrnllnk">方程式2来自于求解最后两行的<一个href="//www.tianjin-qmedu.com/help/optim/ug/linear-programming-algorithms.html" class="intrnllnk">方程式1对于Δ
方程式2是对称的,但它不是正定的,因为-
第二组<一个href="//www.tianjin-qmedu.com/help/optim/ug/linear-programming-algorithms.html" class="intrnllnk">方程式2是
第一组行是
替换
给了
(3) |
通常,求牛顿步的最有效方法是解<一个href="//www.tianjin-qmedu.com/help/optim/ug/linear-programming-algorithms.html" class="intrnllnk">方程式3对于Δ
有关更多算法详细信息,请参阅Mehrotra<一个href="//www.tianjin-qmedu.com/help/optim/ug/linear-programming-algorithms.html" class="intrnllnk">[6].
在计算正确的牛顿步后,算法执行更多的计算,以获得更长的当前步,并为更好的后续步骤做准备。这些多重校正计算可以提高性能和鲁棒性。详情请参见Gondzio<一个href="//www.tianjin-qmedu.com/help/optim/ug/linear-programming-algorithms.html" class="intrnllnk">[4].
预测-校正算法与完整的基本相同“内点凸”
版本,除了二次项。看到<一个href="//www.tianjin-qmedu.com/help/optim/ug/quadratic-programming-algorithms.html" class="a">全预测校正器.
预测-校正算法迭代,直到它到达一个可行的点(满足约束到公差范围内),并且相对步长较小。具体来说,定义
当这些条件都满足时,算法停止:
在哪里
r<年代ub>c本质上度量了互补残差的大小
内点遗留方法是基于<一个cl一个年代年代="indexterm" name="d123e33143">利普索尔(<一个href="//www.tianjin-qmedu.com/help/optim/ug/selected-bibliography.html" class="a">[52],是。的变体<一个cl一个年代年代="indexterm" name="d123e33148">Mehrotra预估校正算法(<一个href="//www.tianjin-qmedu.com/help/optim/ug/selected-bibliography.html" class="a">[47]),一个<一个cl一个年代年代="indexterm" name="d123e33153">内点方法。
算法首先应用一系列<一个cl一个年代年代="indexterm" name="d123e33162">预处理步骤(见<一个href="//www.tianjin-qmedu.com/help/optim/ug/linear-programming-algorithms.html" class="intrnllnk">预处理).预处理后,问题有形式
(4) |
上界约束隐式包含在约束矩阵中
(5) |
它被称为<年代p一个ncl一个年代年代="emphasis">原始的问题:
(6) |
在哪里
(7) |
在哪里
的λ
.
二次方程<年代p一个ncl一个年代年代="inlineequation">x<年代ub>我z<年代ub>我= 0和<年代p一个ncl一个年代年代="inlineequation">年代<年代ub>我w<年代ub>我= 0被称为“<年代p一个ncl一个年代年代="emphasis">互补性线性规划的条件;其他(线性)方程称为<一个cl一个年代年代="indexterm" name="d123e33269">可行性条件。数量
x<年代up>Tz+
是<年代p一个ncl一个年代年代="emphasis">二元性的差距的互补部分的残差
算法是<年代p一个ncl一个年代年代="emphasis">非算法,即原始程序和对偶程序同时求解。它可以被认为是一种牛顿方法,应用于线性二次方程组<年代p一个ncl一个年代年代="inlineequation">F(
这个算法是<一个cl一个年代年代="indexterm" name="d123e33328">由Mehrotra提出的预测-校正算法。考虑一个迭代<年代p一个ncl一个年代年代="inlineequation">v= (
也就是牛顿方向;那么所谓的<年代p一个ncl一个年代年代="emphasis">校正器方向
在哪里<年代p一个ncl一个年代年代="inlineequation">μ> 0被称为<年代p一个ncl一个年代年代="emphasis">定心参数,必须谨慎选择。<年代p一个ncl一个年代年代="inlineequation">
是一个0-1向量,其中的向量对应于
步长参数在哪里
v<年代up>+= (
满足
[
在求解上述预测/校正方向时,该算法对的Cholesky因子进行修正,计算一个(稀疏)直接分解<年代p一个ncl一个年代年代="inlineequation">一个?<年代up>T.如果低密度脂蛋白
函数引用页面。)
算法然后循环,直到迭代收敛。主要的停止标准是:
在哪里
分别为原残差、对偶残差和上界可行性(<年代p一个ncl一个年代年代="inlineequation">{
原始目标值和二元目标值的区别,和<年代p一个ncl一个年代年代="emphasis">托尔是一些宽容。的总和<一个cl一个年代年代="indexterm" name="d123e33485">停止标准测量在最优条件中的总相对误差<一个href="//www.tianjin-qmedu.com/help/optim/ug/linear-programming-algorithms.html" class="intrnllnk">方程式7.
原始不可行性的衡量是<年代p一个ncl一个年代年代="inlineequation">||
该算法首先试图通过去除冗余和简化约束来简化问题。在预解步骤中执行的任务包括:
检查是否有任何变量有相同的上界和下界。如果是,检查可行性,然后修复和删除变量。
检查任何线性不等式约束是否只涉及一个变量。如果是,请检查可行性,然后将线性约束更改为一个界。
检查任何线性等式约束是否只涉及一个变量。如果是,请检查可行性,然后修复并删除该变量。
检查任何线性约束矩阵是否有零行。如果是,检查是否可行,然后删除行。
确定边界和线性约束是否一致。
检查是否有变量只出现在目标函数的线性项中而不出现在任何线性约束中。如果是,检查可行性和有界性,然后将变量固定在适当的界限。
通过添加松弛变量,将线性不等式约束变为线性等式约束。
如果算法检测到一个不可行的或无界的问题,它会停止并发出适当的退出消息。
该算法可能会到达一个单一的可行点,这代表了解决方案。
如果算法在预解步骤中未检测到不可行或无界问题,并且如果预解未生成解决方案,则算法将继续其下一步骤。在达到停止标准后,该算法重建原始问题,撤消任何预解变换。最后一步是后求解步骤。
为简单起见,该算法将所有下界都移到零。
而这些预处理步骤可以大大加快算法的迭代部分,如果<一个cl一个年代年代="indexterm" name="d123e33534">需要拉格朗日乘数,由于算法中计算的乘数是针对变换后的问题,而不是原始问题,所以必须撤消预处理步骤。因此,如果乘数是<年代p一个ncl一个年代年代="emphasis">不如果请求返回,则不会计算此转换,并可能在计算上节省一些时间。
在高水平上“对偶单纯形”
算法本质上是执行一个单纯形算法
该算法首先进行预处理,如<一个href="//www.tianjin-qmedu.com/help/optim/ug/linear-programming-algorithms.html" class="intrnllnk">预处理.详情请参见Andersen和Andersen<一个href="//www.tianjin-qmedu.com/help/optim/ug/linear-programming-algorithms.html" class="intrnllnk">[1]还有Nocedal和Wright<一个href="//www.tianjin-qmedu.com/help/optim/ug/linear-programming-algorithms.html" class="intrnllnk">[7]这种预处理将原来的线性规划问题简化为<一个href="//www.tianjin-qmedu.com/help/optim/ug/linear-programming-algorithms.html" class="intrnllnk">方程式4:
一个和
最初的可行性可以定义为<年代up>+函数
原始不可行性的衡量是
如中所述<一个href="//www.tianjin-qmedu.com/help/optim/ug/linear-programming-algorithms.html" class="intrnllnk">方程式6在美国,对偶问题是求向量
的λ
.
双重不可行性的度量是
这是众所周知的(例如,见<一个href="//www.tianjin-qmedu.com/help/optim/ug/linear-programming-algorithms.html" class="intrnllnk">[7]),对偶问题的任何有限解都给出原问题的解,原问题的任何有限解都给出对偶问题的解。此外,如果原始问题或对偶问题中的一个是无界的,那么另一个问题是不可行的。如果原始问题或对偶问题中有一个是不可行的,那么另一个问题要么是不可行的,要么是无界的。因此,这两个问题在获得有限解(如果存在)方面是等价的。由于原始问题和对偶问题在数学上是等价的,但计算步骤不同,因此通过对偶问题的求解可以更好地解决原始问题。
帮助缓解退化(参见Nocedal和Wright<一个href="//www.tianjin-qmedu.com/help/optim/ug/linear-programming-algorithms.html" class="intrnllnk">[7](第366页),对偶单纯形算法首先扰动目标函数。
对偶单纯形算法的第1阶段是寻找对偶可行点。该算法通过求解一个辅助线性规划问题来实现这一点。
在阶段2中,求解器重复选择一个进入变量和一个离开变量。算法根据Forrest和Goldfarb提出的技术选择离开变量<一个href="//www.tianjin-qmedu.com/help/optim/ug/linear-programming-algorithms.html" class="intrnllnk">[3]称为双最陡边定价。该算法利用Koberstein提出的Harris比率变异检验来选择进入变量<一个href="//www.tianjin-qmedu.com/help/optim/ug/linear-programming-algorithms.html" class="intrnllnk">[5].为了帮助缓解退化,该算法可以在阶段2引入额外的扰动。
求解器迭代,试图在降低原不可行性的同时保持对偶可行性,直到简化的扰动问题的解既是原可行的,也是对偶可行的。该算法解开了它所引入的扰动。如果扰动问题的解对未扰动问题是对偶不可行的,则求解器使用原始单纯形或阶段1算法恢复对偶可行性。最后,求解器展开预处理步骤,将解返回到原始问题。
本节定义了术语<年代p一个ncl一个年代年代="emphasis">基础,<年代p一个ncl一个年代年代="emphasis">nonbasis,<年代p一个ncl一个年代年代="emphasis">基本可行解万博 尤文图斯一个线性规划问题。该定义假定问题以下列标准形式给出:
(注意,
如果
安徒生,E. D.和K. D.安徒生。
[2] 阿普盖特,D.L.,R.E.比克斯比,V.Chvátal和W.J.库克,
Forrest, J. J.和D. Goldfarb。
[4] Gondzio, J. <线性规划的原始对偶方法中的多重中心性校正>https://www.maths.ed.ac.uk/~gondzio/software/correctors.ps
.
[5] Koberstein,。
[6] 关于原始-对偶内点法的实现
Nocedal, J.和S. J. Wright。