主要内容

线性规划算法

线性规划的定义

线性规划是求向量的问题x它使线性函数最小化f<年代up>Tx受线性约束的:

最小值 x f T x

使下列一项或多项成立:

·xb
Aeq·x说真的
lx≤u.

内点linprog算法

linprog“内点”算法非常类似<一个href="//www.tatmou.com/de/de/help/optim/ug/quadratic-programming-algorithms.html" class="a">内点凸四元算法.它还与linprog“interior-point-legacy”算法。这些算法有相同的概要:

  1. 预解,即将问题简化并转化为标准形式。

  2. 生成一个初始点。初始点的选择对于有效地求解内点算法尤为重要,而这一步可能会耗费大量时间。

  3. 预测-校正迭代解KKT方程。这一步通常是最耗时的。

Presolve

该算法首先试图通过去除冗余和简化约束来简化问题。预解步骤中执行的任务包括以下内容:

  • 检查变量是否有相等的上界和下界。如果是,检查可行性,然后修复和删除变量。

  • 检查是否任何线性不等式约束只涉及一个变量。如果是,检查可行性,然后将线性约束更改为边界。

  • 检查是否任何线性等式约束只涉及一个变量。如果是,检查可行性,然后修复和删除变量。

  • 检查是否有线性约束矩阵为零行。如果存在,请检查是否可行,然后删除这些行。

  • 确定边界和线性约束是否一致。

  • 检查是否有变量仅作为线性项出现在目标函数中,而没有出现在任何线性约束中。如果是,检查可行性和有界性,然后将变量固定在适当的边界上。

  • 通过添加松弛变量,将任何线性不等式约束更改为线性等式约束。

如果算法检测到一个不可行的或无界的问题,它将停止并发出适当的退出消息。

算法可能会到达一个单一的可行点,它代表解决方案。

如果算法在预解步骤中没有检测到不可行或无界问题,并且如果预解没有产生解,则算法继续进行下一个步骤。在达到一个停止准则后,算法重建原始问题,撤销任何预解变换。最后一步是后解步骤。

为了简单起见,如果问题没有在预解步骤中解决,该算法将所有有限下界移至零。

生成初始点

要设置起始点,x0时,算法执行如下操作。

  1. 初始化x0来的(n, 1),在那里n目标函数的元素个数是向量吗f.

  2. 将所有有界组件转换为下界为0。如果组件我有一个有限的上界吗u(我),然后X0 (i) = u/2.

  3. 对于只有一个边界的组件,如果有必要,可以修改该组件,使其严格位于边界内。

  4. x0靠近中心路径,采取一个预测-校正步骤,然后修改结果位置和松弛变量,使其处于任何边界内。关于中心路径的详细信息,请参见Nocedal和Wright<一个href="//www.tatmou.com/de/de/help/optim/ug/linear-programming-algorithms.html" class="intrnllnk">[7]第397页。

预估

类似于fmincon内点算法,内点算法试图找到一个点<一个href="//www.tatmou.com/de/de/help/optim/ug/first-order-optimality-measure.html" class="a">Karush-Kuhn-Tucker(马)条件。为了描述线性规划问题的这些方程,考虑预处理后线性规划问题的标准形式:

最小值 x f T x { 一个 ¯ x b ¯ x + t u x t 0.

  • 现在假设所有变量至少有一个有限界。如果有必要,通过移动和否定组件,这个假设意味着所有x组件的下界为0。

  • 一个 ¯ 是扩展的线性矩阵,它包括线性不等式和线性等式。<年代p一个ncl一个年代年代="inlineequation"> b ¯ 是对应的线性相等向量。<年代p一个ncl一个年代年代="inlineequation"> 一个 ¯ 还包括用于扩展向量的术语x有松弛变量年代把不平等约束转化为平等约束:

    一个 ¯ x 一个 e 0 一个 x 0 年代

    在哪里x0意思是原始的x向量。

  • t是将上界转换为等式的松弛向量。

该方程组的拉格朗日量包含以下向量:

  • y,与线性等式相关的拉格朗日乘子

  • v,与下界(正性约束)相关的拉格朗日乘数

  • w,与上界相关的拉格朗日乘子

拉格朗日是

l f T x y T 一个 ¯ x b ¯ v T x w T u x t

因此,该系统的KKT条件为

f 一个 ¯ T y v + w 0 一个 ¯ x b ¯ x + t u v x 0 w t 0 x v w t 0.

linprog算法对返回的拉格朗日乘法器使用了与本文讨论给出的不同的符号约定。本讨论使用了与大多数文献相同的符号。看到<一个href="//www.tatmou.com/de/de/help/optim/ug/linprog.html">λ

该算法首先从牛顿-拉弗森公式中预测一个步长,然后计算一个校正步长。该校正器试图减少非线性互补方程中的残差<年代p一个ncl一个年代年代="inlineequation">年代<年代ub>我z<年代ub>我= 0.牛顿-拉弗森步骤是

0 一个 ¯ T 0 一个 ¯ 0 0 0 0 0 0 0 V 0 0 X 0 0 0 W 0 T Δ x Δ y Δ t Δ v Δ w f 一个 ¯ T y v + w 一个 ¯ x b ¯ u x t V X W T r d r p r u b r v x r w t (1)

在哪里X,V,W,T对角矩阵是否对应于这些向量x,v,w,t分别。方程最右边的残差向量为:

  • r<年代ub>d,对偶残差

  • r<年代ub>p,原始残差

  • r<年代ub>乌兰巴托,上限残差

  • r<年代ub>vx,下界互补残差

  • r<年代ub>wt为上界互补残差

迭代显示报告这些量:

原始的不可行性 r p 1 + r u b 1 双不可行性 r d

来解决<一个href="//www.tatmou.com/de/de/help/optim/ug/linear-programming-algorithms.html" class="intrnllnk">方程1,首先将其转换为对称矩阵形式

D 一个 ¯ T 一个 ¯ 0 Δ x Δ y R r p (2)

在哪里

D X 1 V + T 1 W R r d X 1 r v x + T 1 r w t + T 1 W r u b

所有矩阵在定义中的逆D而且R很容易计算,因为矩阵是对角线的。

获得<一个href="//www.tatmou.com/de/de/help/optim/ug/linear-programming-algorithms.html" class="intrnllnk">方程2从<一个href="//www.tatmou.com/de/de/help/optim/ug/linear-programming-algorithms.html" class="intrnllnk">方程1,注意第二行<一个href="//www.tatmou.com/de/de/help/optim/ug/linear-programming-algorithms.html" class="intrnllnk">方程2和矩阵的第二行一样吗<一个href="//www.tatmou.com/de/de/help/optim/ug/linear-programming-algorithms.html" class="intrnllnk">方程1.的第一行<一个href="//www.tatmou.com/de/de/help/optim/ug/linear-programming-algorithms.html" class="intrnllnk">方程2来自于解最后两行<一个href="//www.tatmou.com/de/de/help/optim/ug/linear-programming-algorithms.html" class="intrnllnk">方程1对于Δv和Δw,然后求解Δt.

方程2是对称的,但它不是正定的,因为-D术语。因此,你不能用Cholesky因式分解来解它。再多走几步就会得到一个不同的正定方程,因此可以用Cholesky因式分解有效地求解。

第二组行<一个href="//www.tatmou.com/de/de/help/optim/ug/linear-programming-algorithms.html" class="intrnllnk">方程2是

一个 ¯ Δ x r p

第一组行是

D Δ x + 一个 ¯ T Δ y R

替换

Δ x D 1 一个 ¯ T Δ y + D 1 R

给了

一个 ¯ D 1 一个 ¯ T Δ y 一个 ¯ D 1 R r p (3)

通常,求牛顿阶的最有效方法是解<一个href="//www.tatmou.com/de/de/help/optim/ug/linear-programming-algorithms.html" class="intrnllnk">方程3对于Δy使用Cholesky分解。Cholesky分解是可能的,因为矩阵乘以Δy显然是对称的,在没有简并的情况下,是正定的。之后,求牛顿步,反向代入求Δx,Δt,Δv、Δw.然而,当<年代p一个ncl一个年代年代="inlineequation"> 一个 ¯ 有密集的圆柱,可以更有效地解决吗<一个href="//www.tatmou.com/de/de/help/optim/ug/linear-programming-algorithms.html" class="intrnllnk">方程2代替。的linprog内点算法根据柱的密度选择求解算法。

更多算法细节,请参见Mehrotra<一个href="//www.tatmou.com/de/de/help/optim/ug/linear-programming-algorithms.html" class="intrnllnk">[6].

在计算修正的牛顿步长后,算法执行更多的计算以获得更长的当前步长,并为更好的后续步长做准备。这些多重修正计算可以提高性能和鲁棒性。详情见Gondzio<一个href="//www.tatmou.com/de/de/help/optim/ug/linear-programming-algorithms.html" class="intrnllnk">[4].

预测-校正算法与完整算法基本相同quadprog“interior-point-convex”除了二次项。看到<一个href="//www.tatmou.com/de/de/help/optim/ug/quadratic-programming-algorithms.html" class="a">完整的预估.

停止条件

预测-校正算法迭代直到它达到一个可行的点(满足限制到公差范围内),并且相对步长很小。具体来说,定义

ρ 马克斯 1 一个 ¯ f b ¯

当满足以下所有条件时,算法停止:

r p 1 + r u b 1 ρ TolCon r d ρ TolFun r c TolFun,

在哪里

r c 马克斯 最小值 | x v | | x | | v | 最小值 | t w | | t | | w |

r<年代ub>c本质上是度量互补残差的大小十五而且太瓦,它们在解处都是0的向量。

内点遗留线性规划

简介

内点遗留方法是基于<一个cl一个年代年代="indexterm" name="d123e34759">LIPSOL (<一个href="//www.tatmou.com/de/de/help/optim/ug/selected-bibliography.html" class="a">[52]),是<一个cl一个年代年代="indexterm" name="d123e34764">梅赫罗特拉预测-校正算法(<一个href="//www.tatmou.com/de/de/help/optim/ug/selected-bibliography.html" class="a">[47]),一个<一个cl一个年代年代="indexterm" name="d123e34769">原对偶内点法。

主要算法

该算法首先应用了一系列的<一个cl一个年代年代="indexterm" name="d123e34778">预处理步骤(参见<一个href="//www.tatmou.com/de/de/help/optim/ug/linear-programming-algorithms.html" class="intrnllnk">预处理).经过预处理,问题有了形式

最小值 x f T x 这样 { 一个 x b 0 x u (4)

上界约束隐式地包含在约束矩阵中一个.加上原始松弛变量年代,<一个href="//www.tatmou.com/de/de/help/optim/ug/linear-programming-algorithms.html" class="intrnllnk">方程4就变成了

最小值 x f T x 这样 { 一个 x b x + 年代 u x 0 年代 0. (5)

这被称为<年代p一个ncl一个年代年代="emphasis">原始的问题:x由原始变量和组成年代由原始松弛变量组成。的<年代p一个ncl一个年代年代="emphasis">问题是

马克斯 b T y u T w 这样 { 一个 T y w + z f z 0 w 0 (6)

在哪里y而且w由二元变量和组成z由两条长裤组成。的<一个cl一个年代年代="indexterm" name="d123e34826">这个线性规划的最优性条件,即原始<一个href="//www.tatmou.com/de/de/help/optim/ug/linear-programming-algorithms.html" class="intrnllnk">方程5和双核<一个href="//www.tatmou.com/de/de/help/optim/ug/linear-programming-algorithms.html" class="intrnllnk">方程6,都是

F x y z 年代 w 一个 x b x + 年代 u 一个 T y w + z f x z 年代 w 0 x 0 z 0 年代 0 w 0 (7)

在哪里x<年代ub>我z<年代ub>我而且年代<年代ub>我w<年代ub>我表示按组件的乘法。

linprog算法对返回的拉格朗日乘法器使用了与本文讨论给出的不同的符号约定。本讨论使用了与大多数文献相同的符号。看到<一个href="//www.tatmou.com/de/de/help/optim/ug/linprog.html">λ

二次方程<年代p一个ncl一个年代年代="inlineequation">x<年代ub>我z<年代ub>我= 0而且<年代p一个ncl一个年代年代="inlineequation">年代<年代ub>我w<年代ub>我= 0被称为<年代p一个ncl一个年代年代="emphasis">互补线性规划的条件;另一个(线性)方程称为<一个cl一个年代年代="indexterm" name="d123e34885">可行性条件。的数量

x<年代up>Tz+年代<年代up>Tw

是<年代p一个ncl一个年代年代="emphasis">二元性的差距的互补部分的残差F当<年代p一个ncl一个年代年代="inlineequation">(x, z,年代,w)≥0.

这个算法是<年代p一个ncl一个年代年代="emphasis">非算法这意味着原程序和对偶程序同时求解。它可以被认为是一类牛顿方法,应用于线性二次系统<年代p一个ncl一个年代年代="inlineequation">Fx, y, z,年代,w) = 0在<一个href="//www.tatmou.com/de/de/help/optim/ug/linear-programming-algorithms.html" class="intrnllnk">方程7,同时保持迭代x,z,w,年代正的,因此称为内点方法。(迭代在严格的内部区域,由不等式约束表示<一个href="//www.tatmou.com/de/de/help/optim/ug/linear-programming-algorithms.html" class="intrnllnk">方程5.)

算法的一种变体<一个cl一个年代年代="indexterm" name="d123e34944">Mehrotra提出的预测校正算法。考虑迭代<年代p一个ncl一个年代年代="inlineequation">v= (x, y, z,年代;w],在那里<年代p一个ncl一个年代年代="inlineequation">[x, z,年代;w> 0首先计算所谓的<年代p一个ncl一个年代年代="emphasis">预测方向

Δ v p F T v 1 F v

也就是牛顿方向;然后所谓的<年代p一个ncl一个年代年代="emphasis">校正器方向

Δ v c F T v 1 F v + Δ v p μ e

在哪里<年代p一个ncl一个年代年代="inlineequation">μ> 0叫做<年代p一个ncl一个年代年代="emphasis">定心参数,必须仔细选择。<年代p一个ncl一个年代年代="inlineequation"> e 0 - 1向量是否与二次方程中的1相对应F(v),即扰动只作用于互补条件(均为二次条件),而不作用于可行性条件(均为线性条件)。这两个方向结合了一个步长参数<年代p一个ncl一个年代年代="inlineequation">α> 0和更新v来获取新的迭代v+

v + v + α Δ v p + Δ v c

步长参数在哪里α是这样选择的

v<年代up>+= (x<年代up>+y;<年代up>+z;<年代up>+,<年代up>+w;<年代up>+]

满足

x<年代up>+z;<年代up>+,<年代up>+w;<年代up>+> 0。

在求解上述预测器/校正器方向时,该算法对的Cholesky因子的修改计算(稀疏)直接因式分解<年代p一个ncl一个年代年代="inlineequation">一个?<年代up>T.如果一个有<一个cl一个年代年代="indexterm" name="d123e35057">密集列,它转而使用<一个cl一个年代年代="indexterm" name="d123e35060">Sherman-Morrison公式。如果该解不充分(残差太大),它将对阶跃方程的增广系统形式进行LDL因式分解以找到解。(见<一个href="//www.tatmou.com/de/de/help/matlab/ref/ldl.html" class="a">例4 - D的结构在MATLAB中<年代up>®低密度脂蛋白功能参考页)

然后,算法循环直到迭代收敛。主要停止标准为:

马克斯 r b 马克斯 1 b r f 马克斯 1 f r u 马克斯 1 u | f T x b T y + u T w | 马克斯 1 | f T x | | b T y u T w | t o l

在哪里

r b 一个 x b r f 一个 T y w + z f r u { x + 年代 u

分别为原始残差、对偶残差和上限可行性(<年代p一个ncl一个年代年代="inlineequation">{x}是指x上界有限),和

f T x b T y + u T w

原始客观值和对偶客观值之间的区别是什么<年代p一个ncl一个年代年代="emphasis">托尔是某种宽容。的和<一个cl一个年代年代="indexterm" name="d123e35101">停止准则测量在最优条件下的总相对误差<一个href="//www.tatmou.com/de/de/help/optim/ug/linear-programming-algorithms.html" class="intrnllnk">方程7.

原始不可行性的衡量标准是<年代p一个ncl一个年代年代="inlineequation">||r<年代ub>b||,对偶不可行性的度量为<年代p一个ncl一个年代年代="inlineequation">||r<年代ub>f||,这里的范数是欧氏范数。

预处理

该算法首先试图通过去除冗余和简化约束来简化问题。预解步骤中执行的任务包括以下内容:

  • 检查变量是否有相等的上界和下界。如果是,检查可行性,然后修复和删除变量。

  • 检查是否任何线性不等式约束只涉及一个变量。如果是,检查可行性,然后将线性约束更改为边界。

  • 检查是否任何线性等式约束只涉及一个变量。如果是,检查可行性,然后修复和删除变量。

  • 检查是否有线性约束矩阵为零行。如果存在,请检查是否可行,然后删除这些行。

  • 确定边界和线性约束是否一致。

  • 检查是否有变量仅作为线性项出现在目标函数中,而没有出现在任何线性约束中。如果是,检查可行性和有界性,然后将变量固定在适当的边界上。

  • 通过添加松弛变量,将任何线性不等式约束更改为线性等式约束。

如果算法检测到一个不可行的或无界的问题,它将停止并发出适当的退出消息。

算法可能会到达一个单一的可行点,它代表解决方案。

如果算法在预解步骤中没有检测到不可行或无界问题,并且如果预解没有产生解,则算法继续进行下一个步骤。在达到一个停止准则后,算法重建原始问题,撤销任何预解变换。最后一步是后解步骤。

为了简单起见,该算法将所有下界都移为零。

虽然这些预处理步骤可以大大加快算法的迭代部分,如果<一个cl一个年代年代="indexterm" name="d123e35150">需要拉格朗日乘法器,预处理步骤必须取消,因为算法中计算的乘法器是针对转换后的问题,而不是原始问题。因此,如果乘数为<年代p一个ncl一个年代年代="emphasis">如果请求,则不计算此转换返回,并且可能节省一些计算时间。

对偶单纯形算法

在高水平上,linprog对偶单纯形的算法本质上执行的是一种单纯形算法对偶问题.

算法从预处理开始,如中所述<一个href="//www.tatmou.com/de/de/help/optim/ug/linear-programming-algorithms.html" class="intrnllnk">预处理.详情见安徒生<一个href="//www.tatmou.com/de/de/help/optim/ug/linear-programming-algorithms.html" class="intrnllnk">[1]诺西德尔和赖特<一个href="//www.tatmou.com/de/de/help/optim/ug/linear-programming-algorithms.html" class="intrnllnk">[7],第13章。这种预处理将原来的线性规划问题简化为<一个href="//www.tatmou.com/de/de/help/optim/ug/linear-programming-algorithms.html" class="intrnllnk">方程4:

最小值 x f T x 这样 { 一个 x b 0 x u

一个而且b是原始约束矩阵的转换版本。这是最基本的问题。

原始可行性可以定义为<年代up>+函数

x + { x 如果 x > 0 0 如果 x 0.

原始不可行性的衡量标准是

原始的不可行性 x + 2 + x 乌兰巴托 + 2 + 一个 x b + 2 + | Aeq x 说真的 | 2

如在<一个href="//www.tatmou.com/de/de/help/optim/ug/linear-programming-algorithms.html" class="intrnllnk">方程6,对偶问题就是求向量y而且w,和松弛变量向量z解决

马克斯 b T y u T w 这样 { 一个 T y w + z f z 0 w 0.

linprog算法对返回的拉格朗日乘法器使用了与本文讨论给出的不同的符号约定。本讨论使用了与大多数文献相同的符号。看到<一个href="//www.tatmou.com/de/de/help/optim/ug/linprog.html">λ

衡量双重不可行性的标准是

双不可行性 一个 T y + z w f 2

这是众所周知的(例如,参见<一个href="//www.tatmou.com/de/de/help/optim/ug/linear-programming-algorithms.html" class="intrnllnk">[7])即对偶问题的任何有限解都能给出原问题的解,而原问题的任何有限解也能给出对偶问题的解。此外,如果一个原问题或对偶问题是无界的,那么另一个问题是不可行的。如果一个原问题或对偶问题是不可行的,那么另一个问题要么是不可行的,要么是无界的。因此,这两个问题在获得有限解方面是等价的,如果一个解存在的话。由于原问题和对偶问题在数学上是等价的,但计算步骤不同,通过求解对偶问题来解决原问题可以更好。

以帮助减轻退化(见Nocedal和Wright<一个href="//www.tatmou.com/de/de/help/optim/ug/linear-programming-algorithms.html" class="intrnllnk">[7],第366页),对偶单纯形算法从扰动目标函数开始。

对偶单纯形算法的第一阶段是求对偶可行点。该算法通过求解一个辅助线性规划问题来实现。

第一阶段大纲

在阶段2中,求解器重复选择一个进入变量和一个离开变量。该算法根据Forrest和Goldfarb提出的技术选择一个离开变量<一个href="//www.tatmou.com/de/de/help/optim/ug/linear-programming-algorithms.html" class="intrnllnk">[3]称为双重最陡边缘定价。该算法利用Koberstein提出的Harris比率检验的变异来选择输入变量<一个href="//www.tatmou.com/de/de/help/optim/ug/linear-programming-algorithms.html" class="intrnllnk">[5].为了帮助缓解简并,该算法可以在阶段2中引入额外的扰动。

第二期大纲

求解器迭代,试图保持对偶可行性,同时减少原始不可行性,直到减少的扰动问题的解既原始可行又对偶可行。算法将引入的扰动解出。如果(摄动问题的)解对于未摄动(原始)问题是对偶不可行的,则求解器使用原始单纯形或阶段1算法恢复对偶可行。最后,求解器展开预处理步骤,返回原始问题的解。

基本变量和非基本变量

本节定义术语<年代p一个ncl一个年代年代="emphasis">基础,<年代p一个ncl一个年代年代="emphasis">nonbasis,<年代p一个ncl一个年代年代="emphasis">基本可行方案金宝搏官方网站对于线性规划问题。定义假设问题以以下标准形式给出:

最小值 x f T x 这样 { 一个 x b l b x u b

(注意,一个而且b矩阵和向量不是定义原始问题中的不等式吗?)假设一个是一个米——- - - - - -n秩的矩阵<年代p一个ncl一个年代年代="inlineequation"><n,其列为{一个1一个2、……一个<年代ub>n}。假设<年代p一个ncl一个年代年代="inlineequation"> { 一个 1 一个 2 ... 一个 的列空间的一组基一个,具有索引集B= {12、……我<年代ub>米},并且N={1, 2,…n} \B是的补B.的子矩阵一个B叫做<年代p一个ncl一个年代年代="emphasis">基础还有余子矩阵一个N叫做<年代p一个ncl一个年代年代="emphasis">nonbasis.的向量<年代p一个ncl一个年代年代="emphasis">基本变量xB向量<年代p一个ncl一个年代年代="emphasis">非基本变量xN.在阶段2的每次迭代中,算法将当前基的一列替换为非基的一列,并更新变量xB而且xN相应的行动。

如果x是一个解决方案<年代p一个ncl一个年代年代="inlineequation">·xb所有的非基本变量xN等于它们的下界或上界,x叫做<年代p一个ncl一个年代年代="emphasis">基本的解决方案.如果,另外,基本变量在xB满足它们的下界和上界,这样x是一个可行点,x叫做<年代p一个ncl一个年代年代="emphasis">基本可行方案

参考文献

[1]安徒生,e。D。和k。D。安徒生。线性规划中的预解.数学。《计算机工程》,1995,第21 - 23页。

[2] D. L.阿普尔盖特,R. E.比克斯比,V. Chvátal和W. J.库克,旅行推销员问题:一项计算研究,普林斯顿大学出版社,2007年。

[3]福雷斯特,J. J.和D.戈德法布。线性规划的最陡边单纯形算法.数学。程序设计57,1992,第341-374页。

[4] Gondzio, J.“线性规划的原始对偶方法中的多重中心校正”。计算优化及其应用, 1996年第6卷第2期,第137-156页。可以在<一个href="https://www.maths.ed.ac.uk/~gondzio/software/correctors.ps" target="_blank">https://www.maths.ed.ac.uk/~gondzio/software/correctors.ps

科伯斯坦,A。求解大规模LP问题的对偶单纯形算法研究进展:快速稳定实现技术.计算Optim。应用41,2008,pp. 185-204。

[6] Mehrotra, S.《关于原始-对偶内点方法的实现》。SIAM优化期刊, Vol. 2, 1992, pp 575-601。

[7]诺西德尔,J.和S. J.赖特。数值优化,第二版。施普林格系列运筹学,斯普林格出版社,2006。