新建一個類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):
"""
描述:
該函數(shù)用于判斷是否應該終止進化晰甚,population為傳入的種群
重寫終止進化方法宏所,得到最優(yōu)目標值
"""
self.stat(population) # 分析記錄當代種群的數(shù)據
# 判斷是否終止進化,由于代數(shù)是從0數(shù)起贰军,因此在比較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] # 更新“前代最優(yōu)目標函數(shù)值記錄器”
self.currentGen += 1 # 進化代數(shù)+1
return False
在main函數(shù)里面,將:
myAlgorithm = ea.soea_DE_rand_1_L_templet(problem, population) # 實例化一個算法模板對象
替換成:
myAlgorithm = MySoea_DE_rand_1_L_templet(problem, population) # 實例化一個算法模板對象