线性规划是寻找向量的问题
这样一个或多个以下持有:
A·x≤
AEQ·X.=
L≤
这个'内点'
算法非常相似“内点遗产”
算法。这些算法具有相同的总体轮廓:
预解,意思是将问题简化并转化为标准形式。
生成初始点。初始点的选择对于高效求解内点算法尤为重要,并且此步骤可能非常耗时。
用于求解KKT方程的预测-校正迭代。此步骤通常最耗时。
该算法首先尝试通过消除冗余和简化约束来简化问题。在预解步骤中执行的任务可以包括以下内容:
检查是否有任何变量的上下限相等。如果是,请检查可行性,然后修复并删除这些变量。
检查是否有任何线性不等式约束涉及只有一个变量。如果是这样,请检查可行性,然后将线性约束更改为绑定。
检查是否有任何线性平等约束涉及一个变量。如果是这样,请检查可行性,然后修复并删除变量。
检查任何线性约束矩阵是否有零行。如果是,请检查可行性,然后删除行。
确定边界和线性约束是否一致。
检查是否有任何变量在目标函数中仅作为线性项出现,而不在任何线性约束中出现。如果是,请检查可行性和有界性,然后将变量固定在适当的边界上。
通过添加松弛变量,将任何线性不等式约束更改为线性等式约束。
如果算法检测到不可行或无界问题,它将停止并发出相应的退出消息。
该算法可能到达单个可行点,表示解决方案。
如果该算法在预定步骤中没有检测到不可行或无界问题,并且如果预定寄存器没有产生解决方案,则该算法继续下次步骤。达到停止标准后,算法重建原始问题,撤消任何预定变换。这一步骤是Postsolve步骤。
为简单起见,如果问题未在预解步骤中解决,则该算法将所有有限下界移到零。
要设置初始点,
初始化
将所有有界组件转换为下限为0.如果组件
对于只有一个绑定的组件,如果需要,在必要时修改组件以严格地在绑定内部。
放置
类似于
现在假设所有变量至少有一个有限界。如果必要,通过改变和否定成分,这一假设意味着
是包含线性不等式和线性等式的扩展线性矩阵。
哪里
T是将上限转换为相位的松弛的矢量。
该系统的拉格朗日涉及以下向量:
Y,与线性等式相关的拉格朗日乘数
v,与下限(正性约束)相关的拉格朗日乘数
W,与上界关联的拉格朗日乘数
拉格朗日函数是
因此,该系统的KKT条件为:
这个兰姆达
。
该算法首先根据牛顿-拉斐逊公式预测一个步长,然后计算一个校正步长。校正器试图减少非线性互补方程中的残差
(1) |
哪里
RD双残差
RP,原始残留
R乌兰巴托,上界残差
Rvx下界互补残差
RWT。,上界互补残差
迭代显示报告这些数量:
解决
(2) |
哪里
定义中的所有矩阵逆
推导
等式2是对称的,但它不是正定的,因为——
第二组行
第一组行是
替代
给予
(3) |
通常,求牛顿步的最有效方法是解
有关更多算法的详细信息,请参阅Mehrotra
在计算校正后的牛顿步长后,该算法将执行更多的计算,以获得更长的当前步长,并为更好的后续步骤做好准备。这些多次校正计算可以提高性能和鲁棒性。有关详细信息,请参阅Gondzio
预测-校正算法基本上与完整算法相同'内部point-convex'
版本,二次项除外。请参阅
预测-校正算法迭代,直到达到可行点(满足公差范围内的约束)且相对步长较小。具体来说,定义
当所有这些条件都满足时,算法停止:
哪里
RC本质上衡量互补残差的大小
该算法首先应用一系列
(4) |
上界约束隐式包含在约束矩阵中
(5) |
这被称为
(6) |
哪里
(7) |
哪里
这个兰姆达
。
二次方程式
xTZ+
该算法是一个简单的算法
该算法是
这是牛顿方向,然后是所谓的
哪里
其中,步长参数
v+= [
满足
[
在求解前面的预测器/校正器方向时,该算法在修改的Cholesky因子的基础上计算(稀疏)直接因子分解低密度脂蛋白
函数参考页。)
然后,该算法循环,直到迭代收敛。主要停止标准为:
哪里
分别是原始残差、对偶残差和上界可行性(
是原始目标值和双重目标值之间的差异,以及
原始不可行性的度量是
该算法首先尝试通过消除冗余和简化约束来简化问题。在预解步骤中执行的任务可以包括以下内容:
检查是否有任何变量的上下限相等。如果是,请检查可行性,然后修复并删除这些变量。
检查是否有任何线性不等式约束涉及只有一个变量。如果是这样,请检查可行性,然后将线性约束更改为绑定。
检查是否有任何线性平等约束涉及一个变量。如果是这样,请检查可行性,然后修复并删除变量。
检查任何线性约束矩阵是否有零行。如果是,请检查可行性,然后删除行。
确定边界和线性约束是否一致。
检查是否有任何变量在目标函数中仅作为线性项出现,而不在任何线性约束中出现。如果是,请检查可行性和有界性,然后将变量固定在适当的边界上。
通过添加松弛变量,将任何线性不等式约束更改为线性等式约束。
如果算法检测到不可行或无界问题,它将停止并发出相应的退出消息。
该算法可能到达单个可行点,表示解决方案。
如果该算法在预定步骤中没有检测到不可行或无界问题,并且如果预定寄存器没有产生解决方案,则该算法继续下次步骤。达到停止标准后,算法重建原始问题,撤消任何预定变换。这一步骤是Postsolve步骤。
为简单起见,该算法将所有下界移到零。
而这些预处理步骤可以大大加快算法的迭代部分,如果
在高层次上'双重simplex'
该算法本质上是在计算机上执行单纯形算法
该算法从预处理开始,如中所述
A.和
可以在原始可行性方面定义+作用
原始不可行性的度量是
如上所述
这个兰姆达
。
对偶不可行性的度量是
这是众所周知的(例如,参见
帮助缓解退化(见Nocedal和Wright
对偶单纯形算法的第一阶段是寻找对偶可行点。该算法通过求解一个辅助线性规划问题来实现这一点。
在第二阶段,解算器重复选择一个输入变量和一个离开变量。算法根据Forrest和Goldfarb建议的技术选择一个离开变量
解算器迭代,试图保持对偶可行性,同时减少原始不可行性,直到减少的扰动问题的解既是原始可行的,也是对偶可行的。该算法消除了引入的扰动。如果(扰动问题的)解对于未扰动(原始)问题是对偶不可行的,则解算器使用原始单纯形或第一阶段算法恢复对偶可行性。最后,解算器展开预处理步骤,将解决方案返回到原始问题。
本节定义条款
(注意
如果
[1] 安徒生,E.D.和K.D.安徒生。
[2] Applegate,D. L.,R.,R. Bixby,V.Chvátal和W. J. Cook,
[3] 福里斯特、J.J.和D.戈德法布。
[4] 线性规划的原始-对偶方法中的多重中心校正https://www.maths.ed.ac.uk/~gondzio/software/correctors.ps.
。
[5] 科伯斯坦,A。
[6] Mehrotra,S。“关于基于双重内部点法的实施。”
[7] Nocedal,J.和S.J.Wright。