def main(con:Configuration): """================================实例化问题对象===========================""" problem = MyProblem(con) # 生成问题对象 """==================================种群设置===============================""" Encoding = 'RI' # 编码方式 #NIND = 30 # 种群规模 NIND=con.NIND Field = ea.crtfld(Encoding, problem.varTypes, problem.ranges, problem.borders) # 创建区域描述器 population = ea.Population(Encoding, Field, NIND) # 实例化种群对象(此时种群还没被初始化,仅仅是完成种群对象的实例化) """================================算法参数设置=============================""" myAlgorithm = ea.soea_DE_rand_1_L_templet(problem, population) # 实例化一个算法模板对象 #myAlgorithm.MAXGEN = 200 # 最大进化代数 myAlgorithm.MAXGEN=con.MAXGEN myAlgorithm.mutOper.F = 0.5 # 差分进化中的参数F myAlgorithm.recOper.XOVR = 0.7 # 重组概率 myAlgorithm.drawing=0 # 设置绘图方式(0:不绘图;1:绘制结果图;2:绘制过程动画) """===========================调用算法模板进行种群进化=======================""" [population, obj_trace, var_trace] = myAlgorithm.run() # 执行算法模板 population.save() # 把最后一代种群的信息保存到文件中 # 输出结果 best_gen = np.argmin(problem.maxormins * obj_trace[:, 1]) # 记录最优种群个体是在哪一代 best_ObjV = obj_trace[best_gen, 1] print('最优的目标函数值为:%s'%(best_ObjV)) print('最优的决策变量值为:') for i in range(var_trace.shape[1]): print(var_trace[best_gen, i]) print('有效进化代数:%s'%(obj_trace.shape[0])) print('最优的一代是第 %s 代'%(best_gen + 1)) print('评价次数:%s'%(myAlgorithm.evalsNum)) print('实际评价次数:%s'%(problem.fitfun.count)) print('时间已过 %s 秒'%(myAlgorithm.passTime)) """ with open("performance.csv", "a", newline='') as csvfile2: writer = csv.writer(csvfile2) writer.writerow([con.function + ' based on ' + con.mode, problem.fitfun.count, myAlgorithm.passTime]) """ """ """ # 保存每一代信息 with open(con.function + ' based on ' + con.mode + ".csv", "a", newline='') as csvfile: writer = csv.writer(csvfile) for index in range(len(problem.fitnessvalue)): # not tested writer.writerow([str(index), int(problem.fitnessvalue[index])]) print(con.function + ' based on ' + con.mode + ' is done.')
problem = MyProblem() # 生成问题对象 """==================================种群设置===============================""" Encoding = 'RI' # 编码方式 NIND = 100 # 种群规模 Field = ea.crtfld(Encoding, problem.varTypes, problem.ranges, problem.borders) # 创建区域描述器 population = ea.Population(Encoding, Field, NIND) # 实例化种群对象(此时种群还没被初始化,仅仅是完成种群对象的实例化) """================================算法参数设置=============================""" myAlgorithm = ea.soea_DE_rand_1_L_templet(problem, population) # 实例化一个算法模板对象 myAlgorithm.MAXGEN = 500 # 最大进化代数 myAlgorithm.mutOper.F = 0.5 # 差分进化中的参数F myAlgorithm.recOper.XOVR = 0.7 # 重组概率 """===========================调用算法模板进行种群进化=======================""" [population, obj_trace, var_trace] = myAlgorithm.run() # 执行算法模板 population.save() # 把最后一代种群的信息保存到文件中 # 输出结果 best_gen = np.argmin(problem.maxormins * obj_trace[:, 1]) # 记录最优种群个体是在哪一代
# -*- coding: utf-8 -*- from MyProblem import MyProblem # 导入自定义问题接口 import geatpy as ea # import geatpy """ 该案例展示了一个利用单目标进化算法实现句子匹配的应用实例。问题的定义详见MyProblem.py。 """ if __name__ == '__main__': # 实例化问题对象 problem = MyProblem() # 快速构建算法 algorithm = ea.soea_DE_rand_1_L_templet( problem, ea.Population(Encoding='RI', NIND=50), MAXGEN=2000, # 最大进化代数 logTras=1) # 表示每隔多少代记录一次日志信息,0表示不记录。 # 求解 res = ea.optimize(algorithm, verbose=True, drawing=1, outputMsg=False, drawLog=False, saveFlag=True) print('最佳目标函数值:%s' % res['ObjV'][0][0]) print('搜索到的句子为:') for num in res['Vars'][0, :]: print(chr(int(num)), end='')