一、本文的目的:
1、通过Pymoo库实现多目标优化算法,用于优化自定义问题,例如调度问题
二、重要库文件版本:
python 3.6
pymoo 0.6.1.2
三、通过Pymoo实现多目标优化
3.0过程步骤:
- 定义问题
- 是否启用并行计算
- 初始化算法
- 设置各种算子
- 设置终止条件
- 组装部件,执行优化
3.1定义问题
定义问题包含变量数量、变量范围、约束数量、适应值计算函数等,下面是定义问题的相关参数。

import numpy as np
from pymoo.core.problem import ElementwiseProblem
class MyProblem(ElementwiseProblem):
def __init__(self, **kwargs):
super().__init__(n_var=2,
n_obj=2,
n_ieq_constr=2,
xl=np.array([-2,-2]),
xu=np.array([2,2]),
**kwargs) # 在问题定义时可以设置并行计算的参数
# https://pymoo.org/problems/parallelization.html
def _evaluate(self, x, out, *args, **kwargs):
f1 = 100 * (x[0]**2 + x[1]**2)
f2 = (x[0]-1)**2 + x[1]**2
g1 = 2*(x[0]-0.1) * (x[0]-0.9) / 0.18
g2 = - 20*(x[0]-0.4) * (x[0]-0.6) / 4.8
out["F"] = [f1, f2]
out["G"] = [g1, g2]
problem = MyProblem()
3.2初始化算法(设置算子相关参数)
选择NSGA-II 多目标优化算法,设置各种算子,各种算子操作符open in new window,主要包括采样、选择、变异与交叉。
import numpy as np
from pymoo.core.problem import ElementwiseProblem
class MyProblem(ElementwiseProblem):
def __init__(self, **kwargs):
super().__init__(n_var=2,
n_obj=2,
n_ieq_constr=2,
xl=np.array([-2,-2]),
xu=np.array([2,2]),
**kwargs) # 在问题定义时可以设置并行计算的参数
#

最低0.47元/天 解锁文章
6103

被折叠的 条评论
为什么被折叠?



