Post

2024秋 最优化(运筹学) 期末复习

2024秋 计算机工程中最优化的方法(运筹学) 期末复习笔记

2024秋 最优化(运筹学) 期末复习

最优化

单纯形算法

等式形式的线性规划模型

对问题约束施加两个要求:

  1. 都是等式,且右端项非负
  2. 所有变量非负

解题过程:

  1. 确定决策变量
  2. 确定目标函数
  3. 构造约束条件
  4. 增加非负 松弛变量,必要时在方程两端乘 $-1$,把不等式转换为带有非负右端项的等式约束

最优解的候选解是 有限个基本可行解(对应图像上的一个角点)。

假设最后的方程组有 $m$ 个方程和 $n$ 个变量,每个基本可行解对应 $n-m$ 个变量为 $0$ 的一个解。这 $n-m$ 个零变量为 非基变量,剩下 $m$ 个变量为 基变量,它的解称为 基本解

单纯形方法

考察所有角点中的一小部分,查找最优角点。

  • 进基变量:进入基本可行解的变量

  • 离基变量:离开基本可行解的变量

例子: \(\text{max} \quad z = 5x_1 + 4x_2 + 0s_1 + 0s_2 + 0s_3 + 0s_4\)

\[\text{s.t.} \quad \begin{aligned} & 6x_1 + 4x_2 + s_1 = 24 \\ & x_1 + 2x_2 + s_2 = 6 \\ & -x_1 + x_2 + s_3 = 1 \\ & x_2 + s_4 = 2 \\ & x_1, x_2, s_1, s_2, s_3, s_4 \geq 0 \end{aligned}\]

初始单纯形表(画出表之后注意看一下目标方程所在行中,基变量对应的系数是否均为 $0$,如果不是,则要与对应的基变量行相加减,使它的系数为 $0$):

image-20241223152607314

初始基本解为松弛变量,非基变量(不在基列中)总是等于 $0$。

  1. 确定进基变量:进基变量应为 目标方程(移项得到右项为零的等式)中具有 最负系数 的变量。(本来应该选最正的,但是移项之后系数变了,所以选最负的)(如果目标函数是求最小值,那就选最正系数)

  2. 确定离基变量:计算右端项(“解”)与进基变量下方的约束系数的 非负比,选取 最小非负比 的基变量为离基变量。
  3. 令枢轴元素为 $1$,且除枢轴行外,枢轴列其它元素为 $0$(有点像高代的消元啥的)。
  4. 重复寻找进基变量,直到目标方程没有负系数(求最小值则为正系数)为止。

改进单纯形方法

带有 $=$ 和 $\ge$ 约束:使用在最初迭代中扮演松弛变量角色的人工变量,然后在迭代中对他们进行处理。

大 M 方法

如果第 $i$ 个等式约束和没有松弛变量,那么将人工变量 $R_i$ 加入到初始解中作为松弛变量充当初始基本解。

人工变量不是原始模型的一部分,因此需要在目标函数中对他们制定极高的惩罚,强迫他们在最优解中等于 $0$。

用一个“充分大的正数” $M$ 来构建人工变量的目标系数。

例子: \(\text{min} \quad z = 4x_1 + x_2\)

\[\text{s.t.} \quad \begin{aligned} & 3x_1 + x_2 = 3 \\ & 4x_1 + 3x_2 \geq 6 \\ & x_1 + 2x_2 \leq 4 \\ & x_1, x_2 \geq 0 \end{aligned}\]

先转换为等式形式: \(\text{min} \quad z = 4x_1 + x_2\)

\[\text{s.t.} \quad \begin{aligned} & 3x_1 + x_2 = 3 \\ & 4x_1 + 3x_2 - x_3 = 6 \\ & x_1 + 2x_2 + x_4 = 4 \\ & x_1, x_2, x_3, x_4 \geq 0 \end{aligned}\]

前两个方程没有松弛变量,增加人工变量 $R_1, R_2$,并修改目标函数。 \(\text{min} \quad z = 4x_1 + x_2 + MR_1 + MR_2\)

\[\text{s.t.} \quad \begin{aligned} & 3x_1 + x_2 + R_1 = 3 \\ & 4x_1 + 3x_2 - x_3 + R_2 = 6 \\ & x_1 + 2x_2 + x_4 = 4 \\ & x_1, x_2, x_3, x_4, R_1, R_2 \geq 0 \end{aligned}\]

$M$ 相对于初始目标系数一定是充分大,迫使人工变量在最优解中取到 $0$。

得到初始表:

image-20241223155851933

注意到初始解为 $(R_1, R_2, x_4) = (3, 6, 4)$,$z$ 行结果与右端项不相等,主要是因为初始基变量在 $z$ 行有非零系数导致的。因此让 $z$ 行与相应的 $R_1, R_2$ 行进行加减,消去系数,最后用正常的单纯形方法求解即可。

如果没有可行解,最终的单纯形表将至少包含一个人工变量取正值。

问题:惩罚值 $M$ 需要很大,可能造成计算精度降低。

两阶段法

分两个阶段求解:求初始基本可行解;求解原问题。

  1. 阶段 1:将问题变成等式约束形式,并增加必要的人工变量。然后把问题转换为将 人工变量之和最小化 的问题(不管原问题是求极大还是极小,都求最小),得到这个问题的基本解以及和的最小值,如果和的最小值为正,无可行解,否则进行阶段 2。
  2. 阶段 2:用阶段 1 得到的基本解作为初始可行解。

例子:

第一阶段开始,对于初始约束转换成的等式形式,先添加人工变量和松弛变量,尝试求解人工变量和的最小值: \(\text{min} \quad r = R_1 + R_2\)

\[\text{s.t.} \quad \begin{aligned} & 3x_1 + x_2 + R_1 = 3 \\ & 4x_1 + 3x_2 - x_3 + R_2 = 6 \\ & x_1 + 2x_2 + x_4 = 4 \\ & x_1, x_2, x_3, x_4, R_1, R_2 \geq 0 \end{aligned}\]

初始表:

image-20241223161927628

初始基变量在目标方程行有非零系数,这导致 $r$ 与右端项并不相同,需要先把初始基变量消去,得到正确的表,之后用单纯形方法求解这个问题,得到最终表格:

image-20241223162551936

产生基本可行解 $(x_1, x_2, x_4) = (3/5, 6/5, 1)$,去除人工变量列,转入阶段 2,得到阶段 2 的原始问题: \(\text{min} \quad z = 4x_1 + x_2\)

\[\text{s.t.} \quad \begin{aligned} & x_1 + \frac{1}{5}x_3 = \frac{3}{5} \\ & x_2 - \frac{3}{5}x_3 = \frac{6}{5} \\ & x_3 + x_4 = 1 \\ & x_1, x_2, x_3, x_4 \geq 0 \end{aligned}\]

初始表:

image-20241223163311433

初始基变量在目标方程行有非零系数,这导致 $r$ 与右端项并不相同,需要先把初始基变量消去,得到正确的表,之后用单纯形方法求解这个问题即可。

作业

作业 1

\[\text{max} \quad z = 2x_1 + 3x_2\] \[\text{s.t.} \quad \begin{aligned} & x_1 + 2x_2 \leq 8 \\ & 4x_1 \leq 16 \\ & 4x_2 \leq 12 \\ & x_1, x_2 \geq 0 \end{aligned}\]

作业 2

用两阶段方法求解: \(\text{min} \quad z = 4x_1 + x_2\)

\[\text{s.t.} \quad \begin{aligned} & 3x_1 + x_2 \leq 3 \\ & 4x_1 + 3x_2 \geq 6 \\ & x_1 + 2x_2 \leq 4 \\ & x_1, x_2 \geq 0 \end{aligned}\]

对偶理论与灵敏度分析

灵敏度分析

==todo:感觉不会考,有空再看==

对偶理论

一个问题的最优解自动提供另一个问题的最优解。

对偶变量对应每个原始约束,对偶约束对应每个原始变量,对偶约束的右端项对应原始目标函数的相应变量系数,对偶目标系数对应原始问题约束方程的右端项。

简单而言,就是竖过来看。

原始问题极大化,对偶问题极小化,约束为 $\ge$,反之亦然。

举例说明:

原始问题: \(\text{max} \quad z = 5x_1 + 12x_2 + 4x_3\)

\[\text{s.t.} \quad \begin{aligned} & x_1 + 2x_2 + x_3 \leq 10 \\ & 2x_1 - x_2 + 3x_3 = 8 \\ & x_1, x_2, x_3 \geq 0 \end{aligned}\]

等式方程形式的原始问题:

\[\text{max} \quad z = 5x_1 + 12x_2 + 4x_3 + 0x_4\] \[\text{s.t.} \quad \begin{aligned} & x_1 + 2x_2 + x_3 + x_4 = 10 \quad (y_1) \\ & 2x_1 - x_2 + 3x_3 = 8 \quad (y_2) \\ & x_1, x_2, x_3 \geq 0 \end{aligned}\]

对偶问题: \(\text{min} \quad w = 10y_1 + 8y_2\)

\[\text{s.t.} \quad \begin{aligned} & x_1 + 2x_2 \geq 5 \\ & 2x_1 - x_2 \geq 12 \\ & x_1 + 3x_2 \geq 4 \\ & x_1 \geq 0 \\ & x_1, x_2 \quad \text{无限制} \end{aligned}\]

作业

原始问题:

\[\text{min} \quad z = 7x_1 + 9x_2 + 10x_3\] \[\text{s.t.} \quad \begin{aligned} & x_1 - 2x_3 \leq 8 \\ & 2x_2 - 8x_3 \geq 1 \\ & x_1, x_2, x_3 \geq 0 \end{aligned}\]

求对偶问题。

运输问题

$m$ 个起点和 $n$ 个终点,每个起点有一个供应量 $a_i$,每个终点有一个需求量 $b_j$,每个起点 $i$ 到每个终点 $j$ 都有一个边,记录了运输费用 $c_{ij}$ 和 运输量 $x_{ij}$。求运输总费用最小。

可以用单纯形方法求解,但用运输表来求解更方便。

image-20241223232453392

运输算法假定了总供应量与总需求量相等,如果不等,可以增加一个虚设起点或虚设终点来让模型平衡,虚点的运输费用为 $0$。

生产-库存问题也可以建模成运输问题。

运输算法

  1. 确定一个基本的可行解

    • 西北角法

      从表中西北角(左上)的元素开始,取这个元素对应的供应和需求的值的 $\min$,然后供应和需求都减这个值,$x_{ij}$ 也取这个值。删除零供应的行或零供应的列(若均为零,只删一个),如果删的是行,元素转到下面,如果删的是列,元素转到右边。直到恰好剩下一行或一列没有被删除。

    • 最小费用法

    • Vogel 近似法

  2. 利用单纯形方法的最优性条件,在所有非基变量中确定进基变量,如果最优条件满足,停止,否则,转到第三步

    对于每一个基变量(已有确定的 $x_{ij}$),列出式子 $u_i + v_j = c_{ij}$,然后令 $u_1 = 0$,就可以求出其他项。 然后对每个非基变量求 $z_{ij} = u_i + v_j - c_{ij}$,取最正系数的 $z$ 变量作为入基变量。

  3. 利用单纯形方法的可行性条件,在所有现有的基变量中确定离基变量,寻求新的基本解,返回到第二步。

    假设进基变量 $x_{ij}$ 运输 $\theta$ 个单位,求 $\theta_{\max}$:

    找三个基变量,和 $x_{ij}$ 围成一个矩形,然后把 $\theta$ 分配进去,根据下列条件得到不等式组:

    • 满足供应上限、需求约束
    • 所有路径运输量非负

例题:

image-20241223233515144

西北角法的初始基本解为: \(x_{11} = 5; \quad x_{12} = 10;\)

\[x_{22} = 5; \quad x_{23} = 15;\]

image-20241224003911773

作业

image-20241224004101357

目标规划

线性规划:优化单个目标函数。

如何优化多个目标?

目标规划:根据各个目标的相对重要程度,寻找一个折中的解。

假如有一堆不等式,每个不等式对应一个目标,这些不等式可能不能同时满足,因此可以把不等式转化为一个弹性目标。

例子: \(550x_p + 35x_f + 55x_s + 0.075x_g \geq 16\)

\[35x_f \leq 0.1(550x_p + 35x_f + 55x_s + 0.075x_g)\] \[55x_s \leq 0.2(550x_p + 35x_f + 55x_s + 0.075x_g)\] \[x_g \leq 2\]

转化为弹性目标: \(550x_p + 35x_f + 55x_s + 0.075x_g + S_1^- - S_1^+ = 16(\ge)\)

\[55x_p - 31.5x_f + 5.5x_s + 0.0075x_g + S_2^- - S_2^+ = 0(\ge)\] \[110x_p + 7x_f - 44x_s + 0.015x_g + S_3^- - S_3^+ = 0(\ge)\] \[x_g + S_4^- - S_4^+ = 2(\le)\]

非负变量 $S_i^+, S_i^-$ 表示第 $i$ 个约束中低于和高于右端项的一种便宜程度,称作 偏离变量。$S_i^+$ 和 $S_i^-$ 是相关的,不能同时作为基变量,因此每次只有一个能被赋值为整数(另一个是零)。

对于 $\le$,如果其 $S_i^- > 0$,则第 $i$ 个目标满足;否则不满足。反之亦然。

折中解就是尽量满足,另一个尽可能都取 $\min$。

权和法:就是最小化那个应尽可能取 $\min$ 的变量加权和。

整数规划

要求某些或全部的变量只取整数值(或离散值)的线性规划。

会列式子就行,一般是取($0\ \text{or}\ 1$)。

动态规划

背包模型:

对能装$n$件物品、$W$千克的背包问题,建立一个后向递归方程。令$m_i$为背包中物品$i$的数量,定义$r_i$和$w_i$分别是每单位物品$i$的收益和重量:

\[\text{max} \quad z = r_1m_1 + r_2m_2 + \cdots + r_nm_n\] \[\text{s.t.} \quad w_1m_1 + w_2m_2 + \cdots + w_nm_n \leq W\] \[m_1, m_2, \ldots, m_n \geq 0 \quad \text{并且为整数}\]

从物品 $n$ 往前放,$x_i$ 表示放到物品 $i$ 时,背包里物品的总重量,$\text{f}_i(x_i)$ 表示考虑物品 $i-n$,背包里物品总重量为 $x_i$ 时的最大收益。 \(f_i(x_i) = \max_{m_i = 0, 1, \ldots, \left\lfloor \frac{W}{w_i} \right\rfloor} \left\{ r_im_i + f_{i+1}(x_i - w_im_i) \right\}\) 例题:

一艘载货量4吨的货船可装载3种货物,下表给出每种货物$i$的单位重量$w_i$(吨)以及单位收益$r_i$(万元),该货船应如何装载这些货物才能获得最大收益?

货物$i$$w_i$ (吨)$r_i$ (万元)
1231
2347
3114
\[f_3(x_3) = \max_{m_3 = 0, 1, \ldots, 4} \{14m_3\}\]

image-20241224162151622 \(f_2(x_2) = \max_{m_2 = 0, 1} \{47m_2 + f_3(x_2 - 3m_2)\}\) image-20241224162412602 \(f_1(x_1) = \max_{m_1 = 0, 1, 2} \{31m_1 + f_2(x_1 - 2m_1)\}\) image-20241224162555090

This post is licensed under CC BY 4.0 by the author.