新建一个类MySoea_DE_rand_1_L_templet 继承一模板类如ea.soea_DE_rand_1_L_templet,重写terminated 方法
# -*- coding: utf-8 -*-
import geatpy as ea # 导入geatpy库
from sys import path as paths
from os import path
paths.append(path.split(path.split(path.realpath(__file__))[0])[0])
class MySoea_DE_rand_1_L_templet(ea.soea_DE_rand_1_L_templet):
def __init__(self, problem, population):
ea.soea_DE_rand_1_L_templet.__init__(self, problem, population) # 先调用父类构造方法
def terminated(self, population):
"""
描述:
该函数用于判断是否应该终止进化,population为传入的种群
重写终止进化方法,得到最优目标值
"""
self.stat(population) # 分析记录当代种群的数据
# 判断是否终止进化,由于代数是从0数起,因此在比较currentGen和MAXGEN时需要对currentGen加1
if self.currentGen + 1 >= self.MAXGEN or self.forgetCount >= self.maxForgetCount or self.trappedCount >= self.maxTrappedCount:
print("结束迭代")
return True
else:
self.preObjV = self.obj_trace[self.currentGen, 1] # 更新“前代最优目标函数值记录器”
self.currentGen += 1 # 进化代数+1
return False
在main函数里面,将:
myAlgorithm = ea.soea_DE_rand_1_L_templet(problem, population) # 实例化一个算法模板对象
替换成:
myAlgorithm = MySoea_DE_rand_1_L_templet(problem, population) # 实例化一个算法模板对象