单纯形法的学习笔记

文章目录

    • A. 单纯形法概述
      • 1. 优化模型示例
    • B. 理论基础
    • C. 算法思想
    • D. 实现算法
      • 1. 线性规划的标准型
      • 2. 顶点解的理解及表示
        • 2.1 在标准型中变量取值为零的意义
        • 2.2 顶点解的表示
      • 3. 最优性判断
      • 4. 解的更新
      • 5. 完成迭代过程
    • E. 单纯形法的基本概念与本文对照
    • F. 文档源码

前言:书中得来意未通,笔下挥洒渐觉明。
如果文中有错误,或是笔误,或是理论错误,还请大家帮忙指明。

A. 单纯形法概述

单纯形法是一种求解线性规划问题的算法。线性规划是优化一个线性目标函数,同时满足一组线性约束条件。以下是对单纯形法的介绍。

1. 优化模型示例

考虑一个最小化的线性规划问题:

目标函数
min z = 3 x 1 + 2 x 2 \text{min} \quad z = 3x_1 + 2x_2 minz=3x1+2x2

约束条件
x 1 + 2 x 2 + x 3 ≥ 4 , 3 x 1 + x 2 − x 4 ≤ 6 , x 1 − x 2 = 1 , x 1 , x 2 ≥ 0 , x 3 , x 4 ≤ 0. \begin{align*} x_1 + 2x_2 + x_3 & \geq 4, \\ 3x_1 + x_2 - x_4 & \leq 6, \\ x_1 - x_2 & = 1, \\ x_1, x_2 & \geq 0, \\ x_3, x_4 & \leq 0. \\ \end{align*} x1+2x2+x33x1+x2x4x1x2x1,x2x3,x44,6,=1,0,0.

  • 在线性规划问题中,可能存在无穷多的解满足这些约束条件。
  • 我们的目标是在所有符合这些约束的解中找到一个使得目标函数 z z z 最小的解。

B. 理论基础

考虑以下线性规划模型并观察其可视化图像:

可行域图

可行域图

可以总结出以下特性(完整的证明可以参照运筹学教材):

  1. 可行域是凸集,一定有至少一个顶点是最优解。
  2. 任意非最优解的顶点一定存在至少一个目标值更优的邻近顶点解。
  3. 给定一个顶点及其相连的边,可以确定沿边移动时目标值是上升还是下降,从而识别是否存在更优的邻近顶点解。

C. 算法思想

根据上述理论,我们可以自然地给出单纯形法的基本流程:

  1. 选择一个顶点解作为当前解;
  2. 判断当前解是否为最优解:以最大化问题为例,如果沿任一邻边移动均导致目标值下降或不变,则该解为最优解;
  3. 如果当前解不是最优,更新为更优的邻近顶点,并返回到步骤2;否则,结束算法。

为便于理解,以下是求解过程的可视化示意图:
寻优过程


D. 实现算法

1. 线性规划的标准型

为方便使用单纯形法,需要将一般线性规划问题转化为标准型(最大化、等式约束、非负变量)。标准型是描述线性规划问题时最常用、最直观的形式,可用以下形式表示:

目标函数
max z = c T x \text{max} \quad z = c^T x maxz=cTx

约束条件
A x = b x ≥ 0 \begin{align*} Ax & = b \\ x & \geq 0 \end{align*} Axx=b0

  • 此处值得注意的是,有些教材中把 A x ≤ b Ax \le b Axb 作为标准型,而 A x = b Ax = b Ax=b 被称为 增广型 或是 松弛型

其中:

  • x x x 为决策变量向量, x ∈ R n x \in \mathbb{R}^n xRn
  • c c c 为目标函数的系数向量, c ∈ R n c \in \mathbb{R}^n cRn
  • A A A 为约束条件的系数矩阵, A ∈ R m × n A \in \mathbb{R}^{m \times n} ARm×n
  • b b b 为约束条件的常数向量, b ∈ R m b \in \mathbb{R}^m bRm

需要注意的是,任何线性规划问题均可转化为标准型。无论目标函数是最小化问题还是最大化问题,约束包括不等式约束或等式约束,都能应用相应方法进行转换。具体转化方法请参考以下链接:转化方法详解。

2. 顶点解的理解及表示

在上面的算法思想中,我们了解到求解过程是将当前解不断地从一个顶点转移到另一个更优的邻近顶点,那什么是顶点解,应该怎么进行表示,在这里我们进行分析。

2.1 在标准型中变量取值为零的意义

我们继续考虑上面的线性规划例子,并将其转化为标准型,加入松弛变量 s 1 , s 2 , s 3 s_1, s_2, s_3 s1,s2,s3
在这里插入图片描述

在标准型中,变量包括 x 1 , x 2 , s 1 , s 2 , s 3 x_1, x_2, s_1, s_2, s_3 x1,x2,s1,s2,s3每个变量取值为零表示相应的约束达到了边界。具体分析如下:

  1. x 1 = 0 x_1 = 0 x1=0 时:

    • 约束 x 1 ≥ 0 x_1 \geq 0 x10 达到边界。
  2. x 2 = 0 x_2 = 0 x2=0 时:

    • 约束 x 2 ≥ 0 x_2 \geq 0 x20 达到边界。
  3. s 1 = 0 s_1 = 0 s1=0 时:

    • 约束 x 1 + s 1 = 8 x_1 + s_1 = 8 x1+s1=8 转化为 x 1 = 8 x_1 = 8 x1=8,则约束 x 1 ≤ 8 x_1 \leq 8 x18 达到边界。
  4. s 2 = 0 s_2 = 0 s2=0 时:

    • 约束 x 2 + s 2 = 5 x_2 + s_2 = 5 x2+s2=5 转化为 x 2 = 5 x_2 = 5 x2=5,则约束 x 2 ≤ 5 x_2 \leq 5 x25 达到边界。
  5. s 3 = 0 s_3 = 0 s3=0 时:

    • 约束 x 1 + x 2 + s 3 = 10 x_1 + x_2 + s_3 = 10 x1+x2+s3=10 转化为 x 1 + x 2 = 10 x_1 + x_2 = 10 x1+x2=10,则约束 x 1 + x 2 ≤ 10 x_1 + x_2 \leq 10 x1+x210 达到边界。

因此,每个变量均对应了一条约束,当该变量取值为零时,当前解位于对应的约束边界上

2.2 顶点解的表示

在示例中,一个顶点具有两条邻边。当我们让两条邻边对应的变量取值为0时,就可以表示出该顶点。下面展示了所有顶点解及其变量取值为0的组合:

可行域图

可行域图

下面我们对 s 2 = 0 s_2=0 s2=0 s 3 = 0 s_3=0 s3=0 能够得到 ( x 1 = 5 , x 2 = 5 ) (x_1=5,x_2=5) (x1=5,x2=5) 这个顶点,做具体的计算,作为一个举例:

在这里插入图片描述

3. 最优性判断

在之前的部分,我们分析了可以利用一些变量为零来指代一个顶点。接下来,继续分析确定一个顶点后,如何判断该顶点是否为最优解:即判断当前顶点沿邻边移动时,目标值是否可改善。若所有邻边均不可改善,则该顶点为最优解。

以顶点解(0,0)为例,邻边为 x 1 = 0 x_1=0 x1=0 x 2 = 0 x_2= 0 x2=0。我们以沿着 x 1 = 0 x_1=0 x1=0 移动为例进行分析:

  • 首先,如何从数值变化上理解“沿着 x 1 = 0 x_1=0 x1=0 移动”?

    • 这意味着保持 x 1 x_1 x1 为零,增大 x 2 x_2 x2 (另一条边界)。
      • 如果顶点有多条边线,它们会如何变化?以下图为例,当顶点沿着 s 3 = 0 s_3 = 0 s3=0移动时, s 1 s_1 s1 s 2 s_2 s2 均会随之增大。(在几何意义上, s 1 = 0 s_1 = 0 s1=0 增大到 s 1 = 1 s_1 = 1 s1=1 意味着点到 s 1 = 0 s_1 = 0 s1=0的距离增加了1)
        在这里插入图片描述
  • 其次,沿着 x 1 = 0 x_1=0 x1=0 移动时, z z z 如何变化?

    • 此时 z = x 1 + 2 x 2 = 2 x 2 z = x_1 + 2x_2 = 2x_2 z=x1+2x2=2x2。当 x 2 x_2 x2 增大时, z z z 也随之增大。

由于当前顶点沿该邻边移动时 z z z 增大,因此该顶点不是最优解(若沿该边移动无法改善目标值,还需判断其他边)。

4. 解的更新

还是以顶点解(0,0)为例,邻边有两条 x 1 = 0 x_1=0 x1=0 x 2 = 0 x_2= 0 x2=0 ,由于 z = x 1 + 2 x 2 z = x_1 + 2x_2 z=x1+2x2,不管是沿哪条边移动都会增长 z z z值,那么应该选择哪一条边?选择的依据是目标值增长最快的方向。当 x 1 x_{1} x1 增加单位 1 1 1 时, z z z 增加了 x 1 x_{1} x1 的系数 1 1 1;当 x 2 x_{2} x2 增加单位 1 1 1 时, z z z 增加了 x 2 x_{2} x2 的系数 2 2 2。所以,通过系数的对比判断,选择沿着 x 1 = 0 x_1= 0 x1=0 移动,增加 x 2 x_2 x2直到移动到下一个顶点,如下图所示,移动到了新顶点(0,5) 。

移动至新顶点示例

进一步分析

  • 为什么不直接对比邻近顶点的目标值,选择最优的邻近顶点?设计算法时,一方面考虑效果,另一方面还要考虑效率。从效果来说,均达到了找到更优解的目的,只是选择最优的邻近顶点解可能在目标值上会更好一些;从效率来说,增长速度的比较 简单于 目标值的比较。
  • 怎么从数值上判断是不是移动到了新的顶点?当沿着 x 1 = 0 x_1= 0 x1=0 移动,增加 x 2 x_2 x2 时,其它变量 s 1 , s 2 , s 3 s_1, s_2, s_3 s1,s2,s3也会随之变化,当 s 1 , s 2 , s 3 s_1, s_2, s_3 s1,s2,s3中有一个变量降到0时,即是到了新的顶点。
    • 进一步,当沿着 x 1 = 0 x_1= 0 x1=0 移动,增加 x 2 x_2 x2 时,怎么能够判断出 s 1 , s 2 , s 3 s_1, s_2, s_3 s1,s2,s3中的哪个变量会先降到0?通过下面变换,利用 x 2 x_2 x2 表示其它变量,可以容易地判断出随着 x 2 x_2 x2 的增加哪个变量会先降到0。
      在这里插入图片描述

5. 完成迭代过程

  • 判断顶点(0,5)是否为最优解。此时其邻边为 x 1 = 0 x_1=0 x1=0 s 2 = 0 s_2=0 s2=0,我们要分析沿这两条边移动目标值的变化。基于约束方程,可以用 x 1 x_1 x1 s 2 s_2 s2 表示 z z z,得到 z = x 1 − 2 s 2 + 10 z = x_1 - 2s_2 + 10 z=x12s2+10。在沿 s 2 = 0 s_2=0 s2=0 的邻边移动时,增大 x 1 x_1 x1 z z z 也会随之增加,因此顶点(0,5)不是最优解。
  • 更新顶点解:由于 z = x 1 − 2 s 2 + 10 z = x_1 - 2s_2 + 10 z=x12s2+10,增加 s 2 s_2 s2 反而会使 z z z 减小,因此我们只能选择增大 x 1 x_1 x1,也就是开始沿着 s 2 = 0 s_2=0 s2=0 的邻边移动,直到到达(5,5)。
  • 判断顶点(5,5)是否为最优解。其邻边为 s 2 = 0 s_2=0 s2=0 s 3 = 0 s_3=0 s3=0。沿两条邻边移动目标值的变化,用 s 2 s_2 s2 s 3 s_3 s3 表示 z z z,得到 z = − s 2 − s 3 + 15 z = -s_2 - s_3 + 15 z=s2s3+15。此时,无论是增加 s 2 s_2 s2 还是 s 3 s_3 s3,目标值均会下降。因此,顶点(5,5)为最优解,算法结束。

E. 单纯形法的基本概念与本文对照

在上面的介绍中,为了方便理解,并没有直接使用到教材中常用的一些概念,这里做一个表格对比这些概念与本文中所论述的部分(以顶点解(0,0)为例,邻边有两条 x 1 = 0 x_1=0 x1=0 x 2 = 0 x_2= 0 x2=0 z = x 1 + 2 x 2 z = x_1 + 2x_2 z=x1+2x2):

单纯形法常用概念本文的对应部分
非基变量两条邻边 x 1 = 0 x_1=0 x1=0 x 2 = 0 x_2= 0 x2=0 ,其中 x 1 x_1 x1 x 2 x_2 x2 为非基变量。
基变量除了非基变量,剩余的变量均是基变量。在非基变量确定之后,求解约束方程可以得到基变量的取值。
入基如果沿着 x 1 = 0 x_1=0 x1=0 移动, x 2 x_2 x2 会增加,不再为0,那么 x 2 x_2 x2由非基变量转化为了基变量。
出基如果沿着 x 1 = 0 x_1=0 x1=0 移动, x 2 x_2 x2 会增加,其它变量 s 1 , s 2 , s 3 s_1, s_2, s_3 s1,s2,s3也会随之变化,当 s 1 , s 2 , s 3 s_1, s_2, s_3 s1,s2,s3中有一个变量降到0时,该变量由基变量转化为了非基变量。
检验数由于 z = x 1 + 2 x 2 z = x_1 + 2x_2 z=x1+2x2,当 x 1 x_{1} x1 增加单位 1 1 1 时, z z z 增加了 x 1 x_{1} x1 的系数 1 1 1;当 x 2 x_{2} x2 增加单位 1 1 1 时, z z z 增加了 x 2 x_{2} x2 的系数 2 2 2 x 1 x_1 x1 x 2 x_2 x2 的系数反映了目标值的增长速度,而检验数就是 x 1 x_1 x1 x 2 x_2 x2 (边界对应的变量)在目标函数中的系数。
最优性判断:如果所有检验数都不为负,当前解为最优解。(最大化问题)如果沿着所有的邻边移动均不能改善目标值,即是最优解。
解的更新:通过交换基变量和非基变量通过将当前解更新为更优的邻近顶点。

F. 文档源码

@[Toc]前言:书中得来意未通,笔下挥洒渐觉明。## A. 单纯形法概述单纯形法是一种求解线性规划问题的算法。线性规划是优化一个线性目标函数,同时满足一组线性约束条件。以下是对单纯形法的介绍。### 1. 优化模型示例考虑一个最小化的线性规划问题:**目标函数**:
$$
\text{min} \quad z = 3x_1 + 2x_2
$$**约束条件**:
$$
\begin{align*}
x_1 + 2x_2 + x_3 & \geq 4, \\
3x_1 + x_2 - x_4 & \leq 6, \\
x_1 - x_2 & = 1, \\
x_1, x_2 & \geq 0, \\
x_3, x_4 & \leq 0. \\
\end{align*}
$$- 在线性规划问题中,可能存在无穷多的解满足这些约束条件。
- 我们的目标是在所有符合这些约束的解中找到一个使得目标函数 $z$ 最小的解。---## B. 理论基础考虑以下线性规划模型并观察其可视化图像:<table style="border: none; border-collapse: collapse; width: 100%;"><tr><td style="border: none; text-align: center; width: 50%;"><img src="https://i-blog.csdnimg.cn/direct/a6be00131fe64aaf9b47daef35e6fbdd.png" alt="可行域图" style="width: 100px;"/><p></p></td><td style="border: none; text-align: center; width: 50%;"><img src="https://i-blog.csdnimg.cn/direct/63564ea4cbd64240a0e5ceb171e63725.png" alt="可行域图" style="width: 200px;"/></td></tr>
</table>可以总结出以下特性(完整的证明可以参照运筹学教材):
1. 可行域是凸集,一定有至少一个顶点是最优解。
2. 任意非最优解的顶点一定存在至少一个目标值更优的邻近顶点解。
3. 给定一个顶点及其相连的边,可以确定沿边移动时目标值是上升还是下降,从而识别是否存在更优的邻近顶点解。---
## C. 算法思想根据上述理论,我们可以自然地给出单纯形法的基本流程:
1. 选择一个顶点解作为当前解;
2. 判断当前解是否为最优解:以最大化问题为例,如果沿任一邻边移动均导致目标值下降或不变,则该解为最优解;
3. 如果当前解不是最优,更新为更优的邻近顶点,并返回到步骤2;否则,结束算法。为便于理解,以下是求解过程的可视化示意图:
![寻优过程](https://i-blog.csdnimg.cn/direct/3d133ea77c6c460aa62d38f013a38ed2.png)---## D. 实现算法### 1. 线性规划的标准型为方便使用单纯形法,必须将一般线性规划问题转化为标准型(最大化、等式约束、非负变量)。线性规划的标准型可用以下形式表示:**目标函数**:
$$
\text{max} \quad z = c^T x
$$**约束条件**:
$$
\begin{align*}
Ax & = b \\
x & \geq 0
\end{align*}
$$其中:
- $x$ 为决策变量向量,$x \in \mathbb{R}^n$。
- $c$ 为目标函数的系数向量,$c \in \mathbb{R}^n$。
- $A$ 为约束条件的系数矩阵,$A \in \mathbb{R}^{m \times n}$。
- $b$ 为约束条件的常数向量,$b \in \mathbb{R}^m$。需要注意的是,任何线性规划问题均可转化为标准型。无论目标函数是最小化问题还是最大化问题,约束包括不等式约束或等式约束,都能应用相应方法进行转换。具体转化方法请参考以下链接:[转化方法详解](https://www.cnblogs.com/haohai9309/p/18303895)### 2. 顶点解的理解及表示在上面的算法思想中,我们了解到求解过程是将当前解不断地从一个顶点转移到另一个更优的邻近顶点,那什么是顶点解,应该怎么进行表示,在这里我们进行分析。#### 2.1 在标准型中变量取值为零的意义我们继续考虑上面的线性规划例子,并将其转化为标准型,加入松弛变量 $s_1, s_2, s_3$:
$$
\begin{array}{ll}
\max & z=x_{1}+2x_{2} \\
\text{s.t.} & x_1 + s_1 = 8 \\
& x_2 + s_2 = 5 \\
& x_1 + x_2 + s_3 = 10 \\
& x_1, x_2, s_1, s_2, s_3 \geq 0
\end{array}
$$在标准型中,变量包括 $x_1, x_2, s_1, s_2, s_3$,**每个变量取值为零表示相应的约束达到了边界**。具体分析如下:1. **$x_1 = 0$** 时:- 约束 $x_1 \geq 0$ 达到边界。2. **$x_2 = 0$** 时:- 约束 $x_2 \geq 0$ 达到边界。3. **$s_1 = 0$** 时:- 约束 $x_1 + s_1 = 8$ 转化为 $x_1 = 8$,则约束 $x_1 \leq 8$ 达到边界。4. **$s_2 = 0$** 时:- 约束 $x_2 + s_2 = 5$ 转化为 $x_2 = 5$,则约束 $x_2 \leq 5$ 达到边界。5. **$s_3 = 0$** 时:- 约束 $x_1 + x_2 + s_3 = 10$ 转化为 $x_1 + x_2 = 10$,则约束 $x_1 + x_2 \leq 10$ 达到边界。因此,每个变量均对应了一条约束,**当该变量取值为零时,当前解位于对应的约束边界上**#### 2.2 顶点解的表示在示例中,一个顶点具有两条邻边。**当我们让两条邻边对应的变量取值为0时,就可以表示出该顶点**。下面展示了所有顶点解及其变量取值为0的组合:<table style="border: none; border-collapse: collapse; width: 100%;"><tr><td style="border: none; text-align: center; width: 50%;"><img src="https://i-blog.csdnimg.cn/direct/4160682dd8064247928d52340348a454.png" alt="可行域图" style="width: 100px;"/><p></p></td><td style="border: none; text-align: center; width: 50%;"><img src="https://i-blog.csdnimg.cn/direct/53ec6578fa7140ec9e5025756e0a6ccb.png" alt="可行域图" style="width: 200px;"/></td></tr>
</table>下面我们对 $s_2=0$ 和 $s_3=0$ 能够得到 $(x_1=5,x_2=5)$ 这个顶点,做具体的计算,作为一个举例:![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/c068bcb6f8fa44258de90b2a570dff64.png)
### 3. 最优性判断在之前的部分,我们分析了可以利用一些变量为零来指代一个顶点。接下来,继续分析确定一个顶点后,如何判断该顶点是否为最优解:即判断当前顶点沿邻边移动时,目标值是否可改善。若所有邻边均不可改善,则该顶点为最优解。以顶点解(0,0)为例,邻边为 $x_1=0$ 和 $x_2= 0$。我们以**沿着 $x_1=0$ 移动**为例进行分析:
- 首先,如何从数值变化上理解“沿着 $x_1=0$ 移动”?- 这意味着保持 $x_1$ 为零,增大 $x_2$ (另一条边界)。- 如果顶点有多条边线,它们会如何变化?以下图为例,当顶点沿着$s_3 = 0$移动时,$s_1$ 和 $s_2$ 均会随之增大。(在几何意义上,$s_1 = 0$ 增大到 $s_1 = 1$ 意味着点到$s_1 = 0$的距离增加了1)![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/e52cd5f123d549fa8fcfc75275bb22d8.png)- 其次,沿着 $x_1=0$ 移动时,$z$ 如何变化?- 此时 $z = x_1 + 2x_2 = 2x_2$。当 $x_2$ 增大时,$z$ 也随之增大。由于当前顶点沿该邻边移动时 $z$ 增大,因此该顶点不是最优解(若沿该边移动无法改善目标值,还需判断其他边)。### 4. 解的更新还是以顶点解(0,0)为例,邻边有两条 $x_1=0$ 和 $x_2= 0$ ,由于$z = x_1 + 2x_2$,不管是沿哪条边移动都会增长$z$值,那么应该选择哪一条边?选择的依据是**目标值增长最快的方向**。当 $x_{1}$ 增加单位 $1$ 时,$z$ 增加了 $x_{1}$ 的系数 $1$;当 $x_{2}$ 增加单位 $1$ 时,$z$ 增加了 $x_{2}$ 的系数 $2$。所以,通过系数的对比判断,选择沿着 $x_1= 0$ 移动,增加 $x_2$,**直到移动到下一个顶点**,如下图所示,移动到了新顶点(0,5)![移动至新顶点示例](https://i-blog.csdnimg.cn/direct/5dc9fe6bf99b4244a288d16ed948ef74.png)**进一步分析**
- 为什么不直接对比邻近顶点的目标值,选择最优的邻近顶点?设计算法时,一方面考虑效果,另一方面还要考虑效率。从效果来说,均达到了找到更优解的目的,只是选择最优的邻近顶点解可能在目标值上会更好一些;从效率来说,增长速度的比较  **简单于**  目标值的比较。
- 怎么从数值上判断是不是移动到了新的顶点?当沿着 $x_1= 0$ 移动,增加 $x_2$ 时,其它变量$s_1, s_2, s_3$也会随之变化,当$s_1, s_2, s_3$中有一个变量降到0时,即是到了新的顶点。- 进一步,当沿着 $x_1= 0$ 移动,增加 $x_2$ 时,怎么能够判断出$s_1, s_2, s_3$中的哪个变量会先降到0?通过下面变换,利用 $x_2$ 表示其它变量,可以容易地判断出随着 $x_2$ 的增加哪个变量会先降到0。![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/f72595b990b24f6ab3a6fd3b35ab6ef3.png)
### 5. 完成迭代过程- 判断顶点(0,5)是否为最优解。此时其邻边为 $x_1=0$ 和 $s_2=0$,我们要分析沿这两条边移动目标值的变化。基于约束方程,可以用 $x_1$ 和 $s_2$ 表示 $z$,得到 $z = x_1 - 2s_2 + 10$。在沿 $s_2=0$ 的邻边移动时,增大 $x_1$ , $z$ 也会随之增加,因此顶点(0,5)不是最优解。
- 更新顶点解:由于 $z = x_1 - 2s_2 + 10$,增加 $s_2$ 反而会使 $z$ 减小,因此我们只能选择增大 $x_1$,也就是开始沿着 $s_2=0$ 的邻边移动,直到到达(5,5)- 判断顶点(5,5)是否为最优解。其邻边为 $s_2=0$ 和 $s_3=0$。沿两条邻边移动目标值的变化,用 $s_2$ 和 $s_3$ 表示 $z$,得到 $z = -s_2 - s_3 + 15$。此时,无论是增加 $s_2$ 还是 $s_3$,目标值均会下降。因此,顶点(5,5)为最优解,算法结束。---## E. 单纯形法的基本概念与本文对照在上面的介绍中,为了方便理解,并没有直接使用到教材中常用的一些概念,这里做一个表格对比这些概念与本文中所论述的部分(以顶点解(0,0)为例,邻边有两条 $x_1=0$ 和 $x_2= 0$, $z = x_1 + 2x_2$):| **单纯形法常用概念**       | **本文的对应部分**|
|-|-|
| **非基变量**     | 两条邻边$x_1=0$ 和 $x_2= 0$ ,其中 $x_1$ 和 $x_2$ 为非基变量。             |
| **基变量**    | 除了非基变量,剩余的变量均是基变量。在非基变量确定之后,求解约束方程可以得到基变量的取值。   
| **入基**    | 如果沿着 $x_1=0$ 移动,$x_2$ 会增加,不再为0,那么$x_2$由非基变量转化为了基变量。
| **出基**     | 如果沿着 $x_1=0$ 移动,$x_2$ 会增加,其它变量$s_1, s_2, s_3$也会随之变化,当$s_1, s_2, s_3$中有一个变量降到0时,该变量由基变量转化为了非基变量。            |
| **检验数**    | 由于 $z = x_1 + 2x_2$,当 $x_{1}$ 增加单位 $1$ 时,$z$ 增加了 $x_{1}$ 的系数 $1$;当 $x_{2}$ 增加单位 $1$ 时,$z$ 增加了 $x_{2}$ 的系数 $2$。 $x_1$ 和 $x_2$ 的系数反映了目标值的增长速度,而检验数就是$x_1$ 和 $x_2$ (边界对应的变量)在目标函数中的系数。 |
| **最优性判断:如果所有检验数都不为负,当前解为最优解。(最大化问题)**|  如果沿着所有的邻边移动均不能改善目标值,即是最优解。    |
| **解的更新:通过交换基变量和非基变量**  | 通过将当前解更新为更优的邻近顶点。               |

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/66593.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【VBA】【EXCEL】将某列内容横向粘贴到指定行

Sub CopyRowToColumn()On Error GoTo ErrorHandler 添加错误处理Application.ScreenUpdating FalseApplication.Calculation xlCalculationManualApplication.EnableEvents False 禁用事件处理Dim lastCol As LongDim lastRow As LongDim i As Long, colCount As LongDim …

JS进阶--JS听到了不灭的回响

作用域 作用域&#xff08;scope&#xff09;规定了变量能够被访问的“范围”&#xff0c;离开了这个“范围”变量便不能被访问 作用域分为局部和全局 局部作用域 局部作用域分为函数和块 那 什么是块作用域呢&#xff1f; 在 JavaScript 中使用 { } 包裹的代码称为代码块…

计算机网络 (26)互联网的路由选择协议

一、路由选择协议的基本概念 路由选择协议是计算机网络中用于确定数据包在网络中传输路径的一种协议。它帮助路由器构建和维护路由表&#xff0c;以便根据目的地址将数据包转发到正确的下一跳路由器。路由选择协议分为静态路由选择协议和动态路由选择协议两大类。 二、静态路由…

Spring项目创建流程及配置文件bean标签参数简介

1. 项目搭建流程 1. pom.xml中引入依赖Spring-webMVC <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc --><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><…

左神算法基础巩固--2

文章目录 稳定性选择排序冒泡排序插入排序归并排序快速排序堆排序 哈希表链表解题 稳定性 稳定性是指算法在排序过程中保持相等元素之间相对顺序的特性。具体来说&#xff0c;如果一个排序算法是稳定的&#xff0c;那么对于任意两个相等的元素&#xff0c;在排序前它们的相对顺…

UART串口数据分析

串口基础知识详细介绍&#xff1a; 该链接详细介绍了串并行、单双工、同异步、连接方式 https://blog.csdn.net/weixin_43386810/article/details/127156063 该文章将介绍串口数据的电平变化、波特率计算、脉宽计算以及数据传输量的计算。 捕获工具&#xff1a;逻辑分析仪&…

机器学习模型评估指标

模型的评估指标是衡量一个模型应用于对应任务的契合程度&#xff0c;常见的指标有&#xff1a; 准确率&#xff08;Accuracy&#xff09;: 正确预测的样本数占总样本数的比例。适用于类别分布均衡的数据集。 精确率&#xff08;Precision&#xff09;: 在所有被预测为正类的样…

面试题解,JVM中的“类加载”剖析

一、JVM类加载机制说一下 其中&#xff0c;从加载到初始化就是我们的类加载阶段&#xff0c;我们逐一来分析 加载 “加载 loading”是整个类加载&#xff08;class loading&#xff09;过程的一个阶段&#xff0c;加载阶段JVM需要完成以下 3 件事情&#xff1a; 1&#xff0…

腾讯云AI代码助手编程挑战赛-古诗词学习

一、作品介绍 在科技与文化深度交融的当下&#xff0c;“腾讯云 AI 代码助手编程挑战赛 - 每日古诗词” 宛如一颗璀璨的新星&#xff0c;闪耀登场。它绝非一场普通的赛事&#xff0c;而是一座连接编程智慧与古典诗词韵味的桥梁。 这项挑战赛以独特的视角&#xff0c;将每日古…

GelSight Mini视触觉传感器凝胶触头升级:增加40%耐用性,拓展机器人与触觉AI 应用边界

马萨诸塞州沃尔瑟姆-2025年1月6日-触觉智能技术领军企业Gelsight宣布&#xff0c;旗下Gelsight Mini视触觉传感器迎来凝胶触头的更新。经内部测试&#xff0c;新Gel凝胶触头耐用性提升40%&#xff0c;外观与触感与原凝胶触头保持一致。此次升级有效满足了客户在机器人应用中对设…

【C++入门】详解(上)

目录 &#x1f495;1.C中main函数内部———变量的访问顺序 &#x1f495;2.命名空间域namespace &#x1f495;3.命名空间域&#xff08;代码示例&#xff09;&#xff08;不要跳&#xff09; &#x1f495;4.多个命名空间域的内部重名 &#x1f495;5.命名空间域的展开 …

Ungoogled Chromium127 编译指南 MacOS篇(八)- 开始编译

1. 引言 完成了所有依赖包的安装后&#xff0c;我们终于来到了最关键的编译阶段。在开始编译之前&#xff0c;有一些重要的配置信息需要了解。本文将指导您完成整个编译过程。 2. 签名相关说明 虽然在我们的测试编译中不需要进行签名操作&#xff0c;但了解官方的签名要求仍…

使用uniapp 微信小程序一些好用的插件分享

总结一下自己在开发中遇见的一问题&#xff0c;通过引入组件可以快速的解决 1.zxz-uni-data-select 下拉框选择器(添加下拉框检索&#xff0c;多选功能&#xff0c;多选搜索功能&#xff0c;自定义 下拉框插件&#xff0c;使用这个的原因是因为 uniui uview 组件库下拉框太…

腾讯云AI代码助手编程挑战赛-有趣的冷知识分享

作品简介 有趣的冷知识这一编程主要用于对于小朋友的探索力的开发&#xff0c;让小朋友在一开始就对学习具有探索精神。在信息化时代下&#xff0c;会主动去学习自己认知以外的知识&#xff0c;同时丰富了眼界&#xff0c;开拓了新的知识。 技术架构 使用python语言的TK库…

使用 SQL 和表格数据进行问答和 RAG(7)—将表格数据(CSV 或 Excel 文件)加载到向量数据库(ChromaDB)中

将表格数据&#xff08;CSV 或 Excel 文件&#xff09;加载到向量数据库&#xff08;ChromaDB&#xff09;中。这里定义的类 PrepareVectorDBFromTabularData&#xff0c;它的主要功能是读取表格数据文件到DataFrame中、生成嵌入向量、并将这些数据存储在向量数据库的集合中&am…

攻防世界 wtf.sh-150

点进去&#xff0c;发现是一个类似于论坛的网站&#xff0c;并且对报错等做了处理 用御剑扫描一下 ​ 发现是php形式的文件&#xff0c;但点进去访问不了。看看wp&#xff0c;发现此题存在路径穿越漏洞&#xff0c;就是&#xff08;如果应用程序使用用户可控制的数据&#xff0…

【Spring】Redis缓存+ehcache

文章目录 基于Spring的RedisehcacheRedis 缓存配置Cacheable 注解CacheEvict 注解缓存配置 基于Spring的Redisehcache Redis 缓存配置 在项目中添加 Redis 的依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot…

UE5 打包要点

------------------------- 1、需要环境 win sdk &#xff0c;大约3G VS&#xff0c;大约10G 不安装就无法打包&#xff0c;就是这么简单。 ----------------------- 2、打包设置 编译类型&#xff0c;开发、调试、发行 项目设置-地图和模式&#xff0c;默认地图 项目…

小程序textarea组件键盘弹起会遮挡住输入框

<textarea value"{{remark}}" input"handleInputRemark" ></textarea> 如下会有遮挡&#xff1a; 一行代码搞定 cursor-spacing160 修改后代码 <textarea value"{{remark}}" input"handleInputRemark" cursor-spacin…

git的rebase和merge的区别?

B分支从A分支拉出 1.git merge 处于A分支执行&#xff0c;git merge B分支:相当于将commit X、commit Y两次提交&#xff0c;作为了新的commit Z提交到了A分支上。能溯源它真正提交的信息。 2.git rebase 处于B分支&#xff0c;执行git rebase A分支&#xff0c;B分支那边复…