如何在Genetic Algorithm遗传算法中获取每轮迭代的优化结果?
自定义遗传算法绘图的实现方法
你要的每次迭代优化结果已经可以通过现有代码里的model.report属性直接获取:
model.report是按迭代顺序排列的列表,每个元素对应对应迭代次结束后当前找到的全局最优目标函数值,列表长度等于算法实际运行的总迭代次数。
你拿到该数据后,先关闭库的默认自动绘图,即可自行自定义绘图样式。关闭默认绘图只需在算法参数中添加'plot_obj': False配置即可,参考参数如下:
algorithm_param={'max_num_iteration': None, 'population_size':100, 'mutation_probability':0.1, 'elit_ratio': 0.1, 'crossover_probability': 0.5, 'parents_portion': 0.2, 'crossover_type':'uniform', 'max_iteration_without_improv':100, 'plot_obj': False} # 关闭默认自动绘图
自定义收敛曲线参考代码:
import matplotlib.pyplot as plt # 模型初始化代码不变 model=ga(function=f,dimension=len(x_coef),variable_type='real', variable_boundaries=varbound, algorithm_parameters=algorithm_param) model.run() convergence = model.report # 每代最优值序列 solution = model.output_dict # 最终最优解 # 自定义绘图 plt.figure(figsize=(10,6)) plt.plot(convergence, label='最优目标值', color='#2c7fb8', linewidth=2) plt.xlabel('迭代次数', fontsize=12) plt.ylabel('目标函数值', fontsize=12) plt.title('遗传算法优化收敛曲线', fontsize=14) plt.grid(alpha=0.3) plt.legend() plt.show()
如果需要获取每一轮迭代的全量种群数据(包含所有个体的参数、所有个体的目标函数值),可以手动逐次执行迭代逻辑,代替直接调用run()方法,每轮迭代结束后自行保存需要的字段即可。

内容的提问来源于stack exchange,提问作者roudan
相关产品推荐
相关产品推荐

