170+种优化算法求解11种cec测试函数(附Python代码下载)
以鲸鱼优化算法(WOA)和灰狼优化算法(GWO)为例。设置了最大迭代次数epoch=100,种群数量pop_size=50。有两种调用方式,import的方式也不一样。当然,
目录
引言
利用推出python版170+种优化算法求解11种cec测试函数,支持解决:
cec2005:F1-F25, 可选 dim = 10, 30, 50
cec2008:F1-F7, 可选 2 <= dim <= 1000
cec2010:F1-F20, 可选 100 <= dim <= 1000
cec2013:F1-F28, 可选 dim = 2, 5, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100
cec2014:F1-F30, 可选 dim = 10, 20, 30, 50, 100
cec2015:F1-F15, 可选 dim = 10, 30
cec2017:F1-F29, 可选 dim = 2, 10, 20, 30, 50, 100
cec2019:F1-F10, 可选 dim: F1=9,F2=16,F3=18,其他=10
cec2020:F1-F10, 可选 dim = 2, 5, 10, 15, 20, 30, 50, 100
cec2021:F1-F10, 可选 dim = 2, 10, 20
cec2022:F1-F12, 可选 dim = 2, 10, 20
实操
首先,需要安装两个强大的工具包mealpy(支持调用170多种优化算法)、opfunu(支持调用11种cec测试函数)。
pip install mealpy==2.5.3
pip install opfunu==1.0.1
其次,准备优化算法四项基本量:变量上限ub,变量下限lb,变量维度dim,目标函数fit_fun,接
fun_name = 'F2' #按需修改
year = '2021' #按需修改
func_num = fun_name + year
dim = 20 # 维度,根据cec函数 选择对应维度
'''定义的 cec函数 '''
def cec_fun(x):
funcs = opfunu.get_functions_by_classname(func_num)
func = funcs[0](ndim = dim)
F = func.evaluate(x)
return F
''' fit_func->目标函数, lb->下限, ub->上限 '''
problem_dict = {
"fit_func": cec_fun,
"lb": opfunu.get_functions_by_classname(func_num)[0](ndim = dim).lb.tolist(),
"ub": opfunu.get_functions_by_classname(func_num)[0](ndim = dim).ub.tolist(),
"minmax": "min",
}
最后,调用算法测试应用。以鲸鱼优化算法(WOA)和灰狼优化算法(GWO)为例。设置了最大迭代次数epoch=100,种群数量pop_size=50。有两种调用方式,import的方式也不一样。当然,还有其他170多种算法供君使用。
第一种方式可以从mealpy.swarm_based ,mealpy.human_based ,mealpy.math_based等等中import更多的算法。
第二种,直接在get_optimizer_by_name中输入算法对应的名字。似乎第二种方式更便利一些。随后,利用model.solve(problem_dict)求解优化问题。
注意:有些算法输入并不只有(epoch,pop_size)两个输入,还需要查阅mealpy中具体的优化算法的定义和输入,依照python的格式灵活使用。
''' 调用优化算法 '''
epoch = 100 #最大迭代次数
pop_size = 50 #种群数量
''' 第一种方式,需:from mealpy.swarm_based import WOA,GWO '''
# woa_model = WOA.OriginalWOA(epoch, pop_size)
# gwo_model = GWO.OriginalGWO(epoch, pop_size)
''' 第二种方式,需:from mealpy import get_optimizer_by_name'''
woa_model = get_optimizer_by_name("OriginalWOA")(epoch, pop_size)
gwo_model = get_optimizer_by_name("OriginalGWO")(epoch, pop_size)
'''求解 cec函数 '''
woa_best_x, woa_best_f = woa_model.solve(problem_dict)
gwo_best_x, gwo_best_f = gwo_model.solve(problem_dict)
绘制收敛曲线:提供了加载收敛曲线的方式model.history.list_global_best_fit,调包即可。
'''
绘制适应度曲线
model.history.list_global_best_fit:适应度曲线
'''
plt.figure
# plt.semilogy(Curve,'r-',linewidth=2)
plt.plot(woa_model.history.list_global_best_fit,'r-',linewidth=2,label = 'WOA')
plt.plot(gwo_model.history.list_global_best_fit,'b-',linewidth=2,label = 'GWO')
plt.xlabel('Iteration')
plt.ylabel('Fitness')
plt.grid()
plt.title('Convergence curve: '+ 'cec' + year + '-' + fun_name + ', Dim=' + str(dim))
plt.legend()
plt.show()
绘制三维函数图:调用自带的opfunu.plot_3d函数,里面参数仅可修改n_space和show的值。绘图时间与n_space值有关,n_space值越大耗费时间越长。show = False时,选择不可视化。
''' 绘制三维函数图 '''
# 仅修改n_space 和 show -> 可视化选择参数
opfunu.plot_3d(opfunu.get_functions_by_classname(func_num)[0](ndim = 2), n_space=500, show = True)
plt.title('cec' + year + '-' + fun_name)
总结:
1.通过选择fun_name 、year 、dim ,调用11种cec测试函数,500多种优化问题。
2. 通过model = get_optimizer_by_name("算法名字")(epoch, pop_size,其他参数)输入对应的算法名字和参数,获取170多种优化算法解决优化问题。
参考文献
@software{thieu_nguyen_2020_3711682,
author = {Nguyen Van Thieu},
title = {Opfunu: An Open-source Library For Optimization Functions in Numpy},
year = 2020,
publisher = {Zenodo},
doi = {10.5281/zenodo.3620960},
url = {https://doi.org/10.5281/zenodo.3620960.}
}
@article{van2023mealpy,
title={MEALPY: An open-source library for latest meta-heuristic algorithms in Python},
author={Van Thieu, Nguyen and Mirjalili, Seyedali},
journal={Journal of Systems Architecture},
year={2023},
publisher={Elsevier},
doi={10.1016/j.sysarc.2023.102871}
}
@article{van2023groundwater,
title={Groundwater level modeling using Augmented Artificial Ecosystem Optimization},
author={Van Thieu, Nguyen and Barma, Surajit Deb and Van Lam, To and Kisi, Ozgur and Mahesha, Amai},
journal={Journal of Hydrology},
volume={617},
pages={129034},
year={2023},
publisher={Elsevier},
doi={10.1016/j.jhydrol.2022.129034}
}
完整Python代码下载
微信搜索并关注-优化算法侠,或扫描下方二维码关注。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)