课程为山东大学软件学院人工智能专业2020年大二下学期的“最优化方法”课程
文章目录
一.介绍
- 背景:2020年5月22日的考试由于疫情影响,与往年不同,所有考试题目都为计算题,共8道。
- 考试范围:
(1)线性规划的图解法
(2)基本单纯形法
(3)两阶段单纯形法
(4)给线性规划,写其对偶规划
(5)对偶单纯形法
(6)背包问题的动态规划算法
(7)最速下降法
(8)牛顿法
(9)阻尼牛顿法
(10)用K-T条件解约束优化问题
(11)外点罚函数法
(12)内点罚函数法
(1)~ (6)为组合优化内容,(7)~(12)为连续优化内容。 - 本笔记内容:算法的标准计算过程、计算实例和部分相应练习题(书为《最优化理论与算法》陈宝林编著 第二版)
二.算法
1.线性规划的图解法
图解法在考试中一般只涉及两个变量x1和x2即二维空间,只需将x1作为x轴,x2作为y轴,根据不等式约束和非负约束做图并确定范围。接着,画出目标函数并根据变量的正负值确定移动方向。最后确定相应顶点或线段则为最优解,若没有则无解。
第二章 习题 1
2.基本单纯形法
笔算时采用表格化的单纯形算法
(1)找一个初始可行基B
(2)求出典式和检验数向量
(3)令k = arg max{
ξ
j
\xi_{j}
ξj| j = 1, 2, …, n}
(4)如果
ξ
k
\xi_{k}
ξk <= 0则当前bfs就是最优解,停止
(5)如果
A
k
A_{k}
Ak <= 0,则问题无界,停止
(6)令r = arg min{
b
i
/
a
i
k
b_{i}/a_{ik}
bi/aik |
a
i
k
>
0
a_{ik} > 0
aik>0, i = 1, 2, …, n}
(7)以
A
k
A_{k}
Ak替代B中的第r列(即,B® <- k),得到一个新的基B,转第2步
注:按照老师的方法,检验数放在第0行,那么最优解根据单纯性表的最右侧按照基变量的顺序写,最优值为表中右上角的值;选取进基变量和出基变量时可以采取Bland反循环法则(用于退化的情况),进基变量选择大于0的且编号最小的那一个,出基变量如果有多个达到最小选择编号最小的那一个,也可以按照算法中采用最大检验数规则+最小下标原则(两个检验数都为最大,去下标小的那个),但我这里及之后的例子都采用Bland法则;过程中进基变量最好圈出,一目了然;该算法适用于比较容易找到初始可行基的情况,或考试中明确指定“基本单纯形法”;如果是max,将目标函数z取反成min -z,最后将最优值取反即可(因为我们最小化的是-z),最优解不变。
我的另一篇博文“输出包含过程的单纯形算法C++程序”:https://altli.blog.csdn.net/article/details/106105526
第三章 习题 1
3.两阶段单纯形法
(1)原问题化为标准型。通过行变换,使b >= 0
(2)添加人工变量,得到辅助问题
(3)使用人工变量作为初始的基,构造辅助问题的初始单纯形表。在该表中同时也包含原问题的检验数行
(4)(第一阶段)使用单纯形表算法求解辅助问题
(5)若求得辅助问题最优值g* > 0,则原文题无解,结束
(6)(否则g* = 0)若某些人工变量为基变量,则调整,直到没有人工变量为基变量
(7)去掉当前单纯形表上的辅助问题的检验数行和人工变量对应的列,得到原问题的单纯形表。此时已有一个初始的基可行解
(8)(第二阶段)运行单纯形算法,解原问题。最后或判断得原问题无界,或求到最优解
注:标准型中有几个等式约束就添加几个人工变量;第一阶段的单纯形算法两行检验数都要参与旋转变换,其实只要辅助问题的检验数行参与运算即可最后进行改动,但一起变换至少从思维程度上简单一些;第(6)步调整时,在A中找一个非零元进行调整即可;适用于初始可行基不好找的情况。
第三章 习题 2
4.给线性规划,写其对偶规划
有助于记忆的口诀:不等式约束对应于限制变量,等式约束对应于无限制变量
下面的三个实例考虑到了所有情况
第四章 习题 1
5.对偶单纯形法
(1)找一个原始LP的基本解(但不可行)和对偶LP的一个可行解(
ξ
\xi
ξ <= 0),组成初始单纯形表
(2)r = arg min{
b
i
b_{i}
bi | i = 1, 2, …, n}
(3)若
b
r
b_{r}
br >= 0,则当前解就是原始LP的最优解,停止
(4)若
∀
1
≤
j
≤
n
,
a
r
j
≥
0
\forall1\leq j\leq n, a_{rj}\geq0
∀1≤j≤n,arj≥0,则原始问题无可行解,停止
(5)k = arg min{
ξ
j
/
a
r
j
\xi_{j}/a_{rj}
ξj/arj |
a
r
j
a_{rj}
arj < 0, j = 1, 2, …, n}
(6)以
a
r
k
a_{rk}
ark转轴元做一次旋转变换(以
A
k
A_{k}
Ak替代
B
r
B_{r}
Br(即
A
B
(
r
)
A_{B(r)}
AB(r))得到一个新的基B),转第2步
注:检验数行全部小于等于0,右端项即b至少有一个小于0,存在一个基矩阵,此时可以运算;简单来说,出基变量从b中选择值最小的那个,进基变量用检验数除以b中出基变量所在行的每一个值(要求为负数),从中选择最小的那个;最后发现右端项b都大于等于0,那么此时就是原始LP的最优解;检验数行都小于等于0表明现在处于对偶可行状态,右端项都大于等于0表明现在处于原始可行状态,因此结束时就是这种情况;如果当前的单纯形表原始不可行且对偶不可行,那么引入人工变量采用两阶段单纯形法,自然会得到无解。
第四章 习题 7
6.背包问题的动态规划算法
这个与我的“算法设计与分析学习笔记”中的“十. 动态规划”是一样的。
其中 i 是编号,j 是背包现有容量,
v
i
v_{i}
vi是物品的价值,
w
i
w_{i}
wi是物品的重量
例:W = 5
下面的动态规划表,列 i 是0 ~ n,行 j 是0 ~ m
该算法的代码和如何通过回溯确定放置的物品。都在前面提到的“算法设计与分析学习笔记”中,这里就不再重复了。
7.最速下降法
最速下降法的基本思想是:当当前点
x
k
x_{k}
xk处的梯度不为
0
0
0时(或不满足精度要求时),从当前点
x
k
x_{k}
xk出发,沿负梯度方向
−
▽
f
(
x
k
)
-\bigtriangledown f(x_{k})
−▽f(xk)前进到下一个点
x
k
+
1
x_{k+1}
xk+1
输入:函数
f
:
R
n
−
>
R
f: R^{n} - > R
f:Rn−>R,具有一阶连续偏导数,初始点
x
(
0
)
x^{(0)}
x(0),允许误差
ϵ
\epsilon
ϵ
输出:满足精度要求的点
x
‾
\overline{x}
x
在算法第4步,若使用精确线性搜索,则找到的
α
k
\alpha_{k}
αk应满足
f
(
x
(
k
)
+
α
k
d
(
k
)
)
=
m
i
n
α
>
0
f
(
x
(
k
)
+
α
d
(
k
)
)
f(x^{(k)}+\alpha_{k} d^{(k)}) = min_{\alpha > 0}f(x^{(k)}+\alpha d^{(k)})
f(x(k)+αkd(k))=minα>0f(x(k)+αd(k))
注:求步长因子时,对得到的结果求一阶导并令等于0进行求解,而不是求根公式,那是大错特错的。
第十章 习题 1、3
8.牛顿法
牛顿法的基本思想:在极小点附近用简单的函数——二阶Taylor多项式近似目标函数
f
(
x
)
f(x)
f(x),进而求出极小点的估计值。
输入:函数
f
:
R
n
−
>
R
f: R^{n} - > R
f:Rn−>R,具有二阶导数,初始点
x
(
0
)
x^{(0)}
x(0),允许误差
ϵ
\epsilon
ϵ
输出:满足精度要求的点
x
‾
\overline{x}
x
注:一元优化问题和多元优化问题的牛顿法都是相同的,这里选择更通用的多元优化问题的牛顿法;二次凸函数
f
(
x
)
=
1
2
x
T
A
x
+
b
T
x
+
c
f(x) = \frac {1} {2}x^{T}Ax+b^{T}x+c
f(x)=21xTAx+bTx+c,用牛顿法求解,经过1次迭代即达到极小点。
第十章 习题 2
9.阻尼牛顿法
注:个人感觉阻尼牛顿法就是最速下降法和牛顿法的结合
10.用K-T条件解约束优化问题
(1)写出约束优化问题的形式
(2)写出Lagrange函数
(3)计算Lagrange函数的梯度,并写出K-T条件
(4)根据约束条件写出
x
1
、
x
2
、
x
.
.
.
、
x
n
x_1、x_2、x...、x_n
x1、x2、x...、xn等的范围即可行性条件
(5)采用观察法根据互补松紧条件和其他条件合理推断
11.外点罚函数法
“外点罚函数法”又叫做“罚函数法”(等式约束和不等式约束都可以)
一定要注意原形式:
m
i
n
f
(
x
)
min f(x)
minf(x)
s
.
t
.
g
i
(
x
)
⩾
0
,
i
∈
G
s.t. g_{i}(x) \geqslant 0,\,i\in G
s.t.gi(x)⩾0,i∈G
h
j
(
x
)
=
0
,
j
∈
H
h_j(x) = 0, \,j \in H
hj(x)=0,j∈H
(1)构造罚函数:
F
(
x
,
σ
)
=
f
(
x
)
+
σ
∑
i
(
m
a
x
{
0
,
−
g
i
(
x
)
}
)
2
+
σ
∑
j
h
j
2
(
x
)
F(x, \sigma) = f(x) + \sigma\sum_i(max \left \{0, -g_i(x) \right\})^2 + \sigma\sum_jh_j^2(x)
F(x,σ)=f(x)+σ∑i(max{0,−gi(x)})2+σ∑jhj2(x)
(2)用解析法求解:令导数或偏导等于0,求解
x
i
x_i
xi
(3)
σ
→
+
∞
\sigma \rightarrow +\infty
σ→+∞时的结果,即为最优解
12.内点罚函数法
“内点罚函数法”又叫做“障碍罚函数法”(只适用于不等式约束)
一定要注意原形式:
m
i
n
f
(
x
)
min f(x)
minf(x)
s
.
t
.
g
i
(
x
)
⩾
0
,
i
∈
G
s.t. \, g_{i}(x) \geqslant 0, \,i \in G
s.t.gi(x)⩾0,i∈G
(1)构造障碍函数:
G
(
x
,
μ
)
=
f
(
x
)
+
μ
B
(
x
)
G(x, \mu) = f(x) + \mu B(x)
G(x,μ)=f(x)+μB(x)(其中
B
(
x
)
=
∑
i
1
g
i
(
x
)
B(x) = \sum_i \frac {1} {g_{i} (x)}
B(x)=∑igi(x)1)
(2)用解析法求解:令导数或偏导等于0,求解
x
i
x_i
xi
(3)
μ
→
0
\mu \rightarrow 0
μ→0时的结果,即为最优解
三. 感受
张老师讲的非常非常好,课程准备非常非常用心,讲义做的非常非常好,很幸运也很感谢能够遇上这么优秀的老师。虽然由于疫情此次考试只考计算题,但最优化中的其他内容也都是和谐与美好的,值得钻研。