帕累托前沿个数得到的是目标函数值及对应的关系,变量的最优值没显示出来。
import numpy as np
def aimfuc(x, LegV): # 定义目标函数
x1 = x[:, 0]
x2 = x[:, 1]
fun1 = (x1 - x2) ** 2 + x1
fun2 = x1 ** 2 - x2
return [np.vstack([fun1, fun2]).T, LegV]
# -*- coding: utf-8 -*-
import numpy as np
def punishing(LegV, FitnV):
FitnV[np.where(LegV == 0)[0]] = np.min(FitnV) * 0.1 # 对非可行解严厉惩罚
return FitnV
# -*- coding: utf-8 -*-
import geatpy as ga
import numpy as np
# 获取函数接口地址
AIM_M = __import__('aimfuc')
PUN_M = __import__('punishing')
"""============================变量设置============================"""
x1 = [-5, 5] # 自变量1的范围
x2 = [-5, 5] # 自变量2的范围
b1 = [1, 1] # 自变量1是否包含下界
b2 = [1, 1] # 自变量2是否包含上界
precisions = [1, 1] # 在二进制/格雷码编码中代表自变量的编码精度,当控制变量是二进制/格雷编码时,该参数可控制编码的精度
ranges = np.vstack([x1, x2]).T # 生成自变量的范围矩阵
borders = np.vstack([b1, b2]).T # 生成自变量的边界矩阵
# 生成区域描述器
FieldD = ga.crtfld(ranges, borders, precisions)
"""========================遗传算法参数设置========================="""
NIND = 50 # 种群规模
MAXGEN = 500 # 最大遗传代数
MAXSIZE = 200 # 最大帕累托前沿数
GGAP = 0.8 # 代沟:子代与父代的重复率为(1-GGAP)
selectStyle = 'rws' # 遗传算法的选择方式设为"rws"——轮盘赌选择
recombinStyle = 'xovdp' # 遗传算法的重组方式,设为两点交叉
recopt = 0.9 # 交叉概率
pm = 0.1 # 变异概率
SUBPOP = 1 # 设置种群数为1
maxormin = 1 # 设置标记表明这是最小化目标
"""=======================调用编程模板进行种群进化==================="""
# 调用编程模板进行种群进化,得到种群进化和变量的追踪器以及运行时间
[ObjV, NDSet, NDSetObjV, times] = ga.moea_nsga2_templet(AIM_M=AIM_M, AIM_F="aimfuc", PUN_M=PUN_M, PUN_F="punishing",
FieldDR=FieldD, problem="R", maxormin=1, MAXGEN=MAXGEN,
MAXSIZE=MAXSIZE, NIND=NIND, SUBPOP=SUBPOP, GGAP=GGAP,
selectStyle=selectStyle, recombinStyle=recombinStyle,
recopt=recopt, pm=pm, distribute=True, drawing=1)
用时:39.307276010513306 秒
帕累托前沿点个数:200 个
单位时间找到帕累托前沿点个数:5 个