参照:https://pymoo.org/
安装:
pip install pymoo
说明:最近需要学习多目标优化问题,因此本系列文章参照pymoo官网的说明文档,且代码均测试以保证完备性。
一个基本的优化问题可以定义为:
min
f
m
(
x
)
m
=
1
,
…
,
M
s.t.
g
j
(
x
)
≤
0
j
=
1
,
…
,
J
h
k
(
x
)
=
0
k
=
1
,
…
,
K
x
i
L
≤
x
i
≤
x
i
U
i
=
1
,
…
,
N
x
∈
Ω
目标函数
f
f
f被假定为满足所有约束的最小化操作,而最大化操作
max
f
i
\max f_i
maxfi等价于
min
−
f
i
\min -f_i
min−fi。
开始定制自己的多目标优化问题之前,有必要了解一些基本的数学知识以更好地选择优化方法。
优化问题的搜索空间 Ω \Omega Ω定义了变量的范围,不同的变量类型,例如连续、离散、整形、二元,或者序列则反应了 Ω \Omega Ω的特性。在某些情况下,变量的类型是混合的,这将增大问题的求解难度。
不同优化算法的求解效率与变量数量 N N N呈现相关性。可以想象一个只有10个变量的问题与成千上万变量的问题是有本质不同的。对于大规模优化问题,仅仅是二阶导的计算就可能耗费大量资源,此时有效地内存处理将至关重要。
优化目标的数量 M > 1 M>1 M>1的情况是很常见的,其解的支配关系概率了不同单目标之间的权衡。此外,在大部分情况下,最优解包含多个解决方案,此时的求解器主要采用基于种群的算法。
不等式约束
g
g
g和等式约束
h
h
h是优化问题中的两种约束。从最终用户的角度,约束优先于目标值,这是因为无聊目标值是多满足需求,如果超出约束界限,其均是不可行的。
约束对于问题求解的效率有巨大的影响,例如搜索空间中的可行解有限或者需要满足大量的约束。这对需要满足等式约束的遗传算法而言尤为如此。因此,这需要以不同的方式解决,如将搜索空间映射到始终满足等式约束的效用空间,或者定制输入等式约束的知识。
多模态适应度环境下,由于少数甚至多个局部最优的存在将进一步加大优化的求解难度。对于找到的解决方案,必须始终查询该方法是否在搜索空间中探索了足够的区域,以最大化获得全局最优的概率。多模态搜索空间显示了局部搜索的局限性,从而陷入局部最优。
实践中的许多优化问题由复杂且冗长的数学方程或要评估的特定领域的软件组成。使用第三方软件通常会导致用于评估目标或约束的计算昂贵且耗时。这种情况下,算法用于确定下一个要评估的解决方案的开销通常可以忽略不计。执行评估的商业软件通常会遇到各种更实际的问题,例如分布式计算、要并行使用的多个实例和软件许可,以及特定设计变量组合的软件可能失败。
优化目标或者约束条件通常被认为是确定的。然而,一个或者多个目标函数却打破了这一限定,其将引入噪声或者说是不确定性。一些方法有:
1)以不同的随机种子多次评估并取其均值,以应对潜在的随机性;
2)利用多次评估的标准偏差来确定特定解决方案的性能和可靠性。
这样带有潜在不确定性的问题也被称为随机优化 (Stochastic optimization)。