最优化问题-遗传算法解决多目标问题python实战
最优化算法不仅在机器学习目标函数优化方面有着举足轻重的地位,而且在运筹学、管理学领域也有着广泛的应用,本文笔者就带领着大家介绍一下并给出一个实列。最优化算法,大家最熟悉的就是在学校学习的一些数学解法,当函数过于复杂时,数学解法不能给出最优解,甚至无法给出解时,就发展出了启发式算法,在启发式算法中,又有分为很多类别,最常见的应该就是遗传算法了。
现实中目标函数常常不是单个,而是多个的(如下图),此时数学解法效果就不太好了。此时,启发式算法就可以派上用场,而且针对多目标问题,遗传算法NSGA-II (Non-dominated Sorting Genetic Algorithm II)就可以很好的解决这个问题。
那么我们如何编程解决这个问题呢?
1. 首先我们引入包 pymoo
2. 定义目标函数
3. 定义遗传算法NSGA-II 参数
4. 解决并输出结果
1. Pip install pymoo
2. 定义目标函数
1. import numpy as np
2. from pymoo.core.problem import ElementwiseProblem
3.
4. class MyProblem(ElementwiseProblem):
5.
6. def __init__(self):
7. super().__init__(n_var=2,
8. n_obj=2,
9. n_ieq_constr=2,
10. xl=np.array([-2,-2]),
11. xu=np.array())
12.
13. def _evaluate(self, x, out, *args, **kwargs):
14. f1 = 100 * (x**2 + x**2)
15. f2 = (x-1)**2 + x**2
16.
17. g1 = 2*(x-0.1) * (x-0.9) / 0.18
18. g2 = - 20*(x-0.4) * (x-0.6) / 4.8
19.
20. out["F"] =
21. out["G"] =
22.
23.
24. problem = MyProblem()
3. 定义参数
1. from pymoo.algorithms.moo.nsga2 import NSGA2
2. from pymoo.operators.crossover.sbx import SBX
3. from pymoo.operators.mutation.pm import PM
4. from pymoo.operators.sampling.rnd import FloatRandomSampling
5.
6. algorithm = NSGA2(
7. pop_size=40,
8. n_offsprings=10,
9. sampling=FloatRandomSampling(),
10. crossover=SBX(prob=0.9, eta=15),
11. mutation=PM(eta=20),
12. eliminate_duplicates=True
13. )
14.
15. from pymoo.termination import get_termination
16. termination = get_termination("n_gen", 40)
4.调用并输出结果
1. from pymoo.optimize import minimize
2.
3. res = minimize(problem,
4. algorithm,
5. termination,
6. seed=1,
7. save_history=True,
8. verbose=True)
9. X = res.X
10. F = res.F
1. import matplotlib.pyplot as plt
2. plt.figure(figsize=(7, 5))
3. plt.scatter(F[:, 0], F[:, 1], s=30, facecolors='none', edgecolors='blue')
4. plt.title("Objective Space")
5. plt.show()
我们可以看到给出的最优解并不是唯一的,我们可以定义变量X和目标函数F规则来进一步判断最优解。例如我们可以说(F1,F2)越接近于(0,0),解越好。
<hr/>好了,本次的分享就到先到这。关注我,带你走进数据算法的世界。
[*] 微信公众号 数据算法小屋
[*] CSDN https://blog.csdn.net/TommyLi_YanLi
[*] 知乎 https://www.zhihu.com/people/74-25-40-76-26
[*] 作者邮箱:rocklee_lol@hotmail.com
页:
[1]