目录

引言

实操

参考文献

完整Python代码下载


引言

利用推出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.3pip 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代码下载

微信搜索并关注-优化算法侠,或扫描下方二维码关注。

一网打尽!170+种优化算法求解11种cec测试函数(附Python代码)

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐