引言
最优化理论研究的是如何从众多的可行方案中选出最优的方案。由于其常与与实际生活中遇到的问题紧密联系在一起,长期以来就受到各界的广泛关注。早在微积分被提出的时候,就有了伴随而来的求极值问题。之后1847年,法国数学家Cauchy提出了最速下降法来解决函数值沿什么方向下降最快的问题。1939年,前苏联数学家提出了解决运输问题的线性规划的求解方法。如今,最优化理论更是被广泛应用于工业系统的控制、公司日常运作以及项目的管理、金融资产的最优组合等。解决最优化问题的步骤往往可以归结为两步:第一,设计目标函数(建模);第二,求解最大或最小值。经过近一个世纪的发展,其理论与方法已经十分健全,如线性规划、非线性规划、动态规划、整数规划、博弈论等。
线性与非线性规划
最优化问题根据目标函数以及约束条件的形式往往可分为两大类,接下来举两个例子具体说明。
排产计划问题
假设某工厂储备有五种原材料,第
n
n
n种材料的储备总量为
a
n
a_n
an。
这些材料可用来生产3种主打产品,每生产一件第
m
m
m种产品需要消耗第
n
n
n种材料的数量为
b
n
m
b_{nm}
bnm,产生的单件利润为
c
m
c_m
cm。由于人力限制,第
m
m
m种产品生产数目不能超过
d
m
d_m
dm件。则为了计算出满足在以上约束条件下能使目标函数值(利润)最大的最优生产方案,可假设各种产品产量分别为
x
1
x_1
x1,
x
2
x_2
x2,
x
3
x_3
x3并建模如下:
目标函数为线性形式,且变量x的限制条件为正整数,因此本例为整数线性规划。
货运选址问题
假设某公司有
m
m
m个货仓,其坐标为(
x
i
x_i
xi,
y
i
y_i
yi)。储量上限为
a
i
a_i
ai
需要运往
n
n
n个集市,坐标分别为(
p
j
p_j
pj,
q
j
q_j
qj)。需求货量为
b
j
b_j
bj
设计一个各仓库到各集市的运货量的总数与路程乘积总和最小的仓库选址方案。
假设每个货仓提供给各个集市的货物量为
W
i
j
W_{ij}
Wij:
目标函数形式为非线性函数,因此称为非线性规划。
一些概念
在线性或非线性规划中,这些满足约束条件的点称为可行点,所有可行点组成的集合就是可行集(有效集)或可行域。当一个问题的可行集是整个空间时,此问题可称为无约束问题。
无论是在实际工程应用还是学术研究中,人们往往关注的是凸优化的问题。这类问题的要求目标函数和不等式约束形式均为凸函数。凸优化问题较一般的数学最优化问题来的要简单,因此人们往往尝试将非凸的问题也转换或近似为凸优化问题来研究。关于凸集的定义如下:
假设有一集合
S
S
S,如果该集合中任意两点以及连接它们的线段都属于这个集合,那么该集合
S
S
S被称为凸集。(如下图左非凸,图右凸)
而凸函数
f
f
f就是定义在凸集
S
S
S上的实值函数。
如果对集合
S
S
S上任意的
x
x
x以及
0
<
t
<
1
0<t<1
0<t<1都有:
f
(
t
x
+
(
1
−
t
)
x
)
<
t
f
(
x
)
+
(
1
−
t
)
f
(
x
)
f(tx+(1-t)x)<tf(x)+(1-t)f(x)
f(tx+(1−t)x)<tf(x)+(1−t)f(x)
则
f
f
f为
S
S
S上的严格凸函数。
也可以用下图做一个简单的说明:
凸函数的局部最小值的点A同样也是其全局最小值的点。
而非凸函数会有多个局部最小值如点B、点C,所以在求全局最小值时需要小心避免陷入局部最优解。
总结
到如今这个生产、科学技术迅猛发展的时代,最优化问题的求解工具也越来越多,可应用的领域也越来越广(比如现今火热的AI人工智能其实核心算法用到了优化的思想,还有无人驾驶中的规划与控制算法也大量引入了最优化的求解方式)。我认为作为一名工程师不仅需要明白各种算法的长短优劣,能针对不同的环境条件,选择合适的算法工具来求解优化问题;关键更应在于如何将实际生产中的复杂问题提炼转换为数学语言,建立对应的模型和目标函数来求解,最后又能用通俗的语言将优化计算的结果转述给大众,这也同样是一名算法工程师的最大价值所在,和核心竞争力的体现。
参考
陈宝林,《最优化理论与算法》。