【选择自由,免费下载】215种优化算法求解11种cec测试函数-python代码

引言

前面几期已分享多期cec测试函数的使用,已初步积累了相关cec测试函数实操技能。那么,这期我们利用推出python版215种优化算法求解11种cec测试函数(有cec2005,cec2008,cec2010,cec2013,cec2014,cec2015,cec2017,cec2019,cec2020,cec2021,cec2022)。助你实现选择自由。

这里,首先不得不提优秀的开源库mealpy,提供了超170种经典和最新发表的优化算法(您想要的它都有!群智能优化算法Python库!!!)。其次,利用另一个开源库opfunu(地址:https://github.com/thieu1995/opfunu) 实现11种cec测试函数的调用。各cec函数具体的信息,需小伙伴们多多阅读文献。这里就不多赘述了,话不多说,直接代码怼脸。Talk is cheap,show you code

本期所有代码+数据在文末下载

图片

图片

02. opfunu的介绍

opfunu是用于前沿数值优化基准函数的最大的python库。包含2005年、2008年、2010年、2013年、2014年、2015年、2017年、2019年、2020年、2021年、2022年的所有CEC竞赛函数。共11种测试函数,实现了500多个不同维度的功能。使用pip安装:

pip install opfunu==1.0.1

图片

图片

03.实操

首先,需要安装两个强大的工具包mealpyopfunu当然,也可以直接下载这两个包(已给小伙伴备好了,文末可直接享用

pip install mealpy==3.0.1pip install opfunu==1.0.1

其次,加载cec测试函数信息。对于优化而言,时刻把握四项基本量:变量上限ub,变量下限lb,变量维度dim,目标函数fit_fun。利用opfunu调用目标函数,基本格式为:函数+年份。当然,你还需要知道每年的cec函数有几个测试函数,维度有几维。这里已经整理好了,方便使用。

'''适应度函数及维度dim的选择cec函数名字格式:函数名+年份,比如要选择2022的F2函数,func_num = 'F2'+'2022'cec2005:F1-F25, 可选 dim = 10, 30, 50cec2008:F1-F7,  可选 2 <= dim <= 1000cec2010:F1-F20, 可选 100 <= dim <= 1000cec2013:F1-F28, 可选 dim = 2, 5, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100cec2014:F1-F30, 可选 dim = 10, 20, 30, 50, 100cec2015:F1-F15, 可选 dim = 10, 30cec2017:F1-F29, 可选 dim = 2, 10, 20, 30, 50, 100cec2019:F1-F10, 可选 dim: F1=9,F2=16,F3=18,其他=10cec2020:F1-F10, 可选 dim = 2, 5, 10, 15, 20, 30, 50, 100cec2021:F1-F10, 可选 dim = 2, 10, 20cec2022:F1-F12, 可选 dim = 2, 10, 20

比如,我们以cec2021的F2测试函数为例,调用的格式为F22021,变量维数dim选择20。我们用cec_fun定义了cec函数,返回F即为对应维度的cec函数,用以后续迭代优化。随后,根据opfunu的调用格式,构建优化问题problem_dict包括了函数基本信息lb,ub,目标函数fit_fun,minmax 可以选解决最大化 或 最小化问题,cec函数一般都是最小化问题,因此选择min。

据此,你可以随心意任意选择11种cec函数,按需选择维度dim。只需改动fun_name 、year 、dim,代码改动量极少,是不是非常方便,简单

到此,已经把四项基本量:变量上限ub,变量下限lb,变量维度dim,目标函数fit_fun都已经准备好了,接下来就是调用算法求解了。

fun_name = 'F2' #按需修改year = '2021'   #按需修改 func_num = fun_name + yeardim = 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多种优化算法解决优化问题。

到此,已经结束了。整体的代码如下:

# -*- coding: utf-8 -*-"""CEC 测试函数 系列@author: 优化算法侠,Swarm-Opti
"""from IPython import get_ipythonget_ipython().magic('reset -sf') #清除所有变量import numpy as npfrom matplotlib import pyplot as plt
# In[]:import opfunu # 参考文档:https://github.com/thieu1995/opfunuimport mealpyfrom mealpy.swarm_based import WOA,GWOfrom mealpy import get_optimizer_by_name
'''适应度函数及维度dim的选择cec函数名字格式:函数名+年份,比如要选择2022的F1函数,func_num = 'F1'+'2022'cec2005:F1-F25, 可选 dim = 10, 30, 50cec2008:F1-F7,  可选 2 <= dim <= 1000cec2010:F1-F20, 可选 100 <= dim <= 1000cec2013:F1-F28, 可选 dim = 2, 5, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100cec2014:F1-F30, 可选 dim = 10, 20, 30, 50, 100cec2015:F1-F15, 可选 dim = 10, 30cec2017:F1-F29, 可选 dim = 2, 10, 20, 30, 50, 100cec2019:F1-F10, 可选 dim: F1=9,F2=16,F3=18,其他=10cec2020:F1-F10, 可选 dim = 2, 5, 10, 15, 20, 30, 50, 100cec2021:F1-F10, 可选 dim = 2, 10, 20cec2022:F1-F12, 可选 dim = 2, 10, 20
'''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",} 
''' 调用优化算法 '''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)
# In[]: 
'''     绘制适应度曲线    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()
# In[]: 
''' 绘制三维函数图 '''# 仅修改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)

本推文仅抛砖引玉,相信各位小伙伴可以探索opfunu和mealpy更多高级的用法,使用170多种优化算法一键跑完11种cec测试函数。祝各位成功!!!🌹

Python代码下载

微信搜索并关注-优化算法侠,或扫描下方二维码关注,以算法名字搜索历史文章即可下载。

【选择自由,免费下载】215种优化算法求解11种cec测试函数-python代码

点击链接跳转:


matlab版的340种基础优化算法免费下载

cec2017测试函数使用教程及matlab代码免费下载

cec2018测试函使用教程及matlab代码免费下载

cec2019测试函使用教程及matlab代码免费下载

cec2020测试函使用教程及matlab代码免费下载

cec2021测试函使用教程及matlab代码免费下载

cec2022测试函使用教程及matlab代码免费下载
绘制cec2017/018/2019/2020/2021/2022函数的三维图像教程,SO EASY!

175种群智能优化算法python库

超175+种群智能优化算法Python库!!!icon-default.png?t=N7T8http://mp.weixin.qq.com/s?__biz=MzkxMDQ5MDk4Ng==&mid=2247484577&idx=1&sn=ed0b2e27b73e738c094c7534a63a2cda&chksm=c12be8a4f65c61b2f3d90e2b4d1f480f8d0bb038b6598828ebf2434006e07925f8102af9795f&scene=21#wechat_redirect

求解cec测试函数-matlab

最新最火!cec2022测试函数来了(附Matlab代码)icon-default.png?t=N7T8https://mp.weixin.qq.com/s?__biz=MzkxMDQ5MDk4Ng==&mid=2247484693&idx=1&sn=ce311acb26bee2894db6fe90776288bd&chksm=c12be910f65c6006af080b1e97ad5514eee06b64d2caeeac2008b8c06fdc3ba379455e9ca709&scene=21#wechat_redirect

解决12工程设计优化问题-matlab

略微出手,工程设计问题(12)(附Matlab代码)icon-default.png?t=N7T8https://mp.weixin.qq.com/s?__biz=MzkxMDQ5MDk4Ng==&mid=2247485052&idx=1&sn=80e5573c1c005ee5640e44935044ee35&chksm=c12bea79f65c636fc73758b4f4893502bd89cbd1c5d15d7db15e8b5c94eeae40450439d44944&token=681266555&lang=zh_CN#rd

求解11种cec测试函数-python

一网打尽!170+种优化算法求解11种cec测试函数(附Python代码)icon-default.png?t=N7T8https://mp.weixin.qq.com/s?__biz=MzkxMDQ5MDk4Ng==&mid=2247484745&idx=1&sn=1957f7c9b44c47f171c1cd46054d1679&chksm=c12be94cf65c605a5e0f8404e6c90964ce0743b7c25ff5f98a03dedc77e5eec5b48bf0c0e782&token=681266555&lang=zh_CN#rd

解决12种工程设计优化问题-python

大放送!170+种优化算法解决12种工程设计问题(附python代码)icon-default.png?t=N7T8https://mp.weixin.qq.com/s?__biz=MzkxMDQ5MDk4Ng==&mid=2247485068&idx=1&sn=c913be0f2445f8b4d3e944569f5e599f&chksm=c12bea89f65c639f1df0f8e6cacffc1fdffa96683d10743094435ee6b0b55573a5bc8eec7eb3&token=681266555&lang=zh_CN#rd

用于改进所有优化算法:21种混沌映射方法-混沌初始化(附matlab代码)

用于改进所有优化算法:21种混沌映射方法-混沌初始化(附matlab代码)21种混沌映射方法-混沌初始化,适用于所有优化算法icon-default.png?t=N7T8https://mp.weixin.qq.com/s?__biz=MzkxMDQ5MDk4Ng==&mid=2247486215&idx=2&sn=58f1a69175b0d6431a4c7cdfa114b84d&chksm=c12be702f65c6e14e6bd1ddc33b9cec74991d93303c325853049b7e4afd09039b13083fa79c5&token=25423484&lang=zh_CN#rd

沙场大点兵:24种信号分解方法(附matlab代码) 

沙场大点兵:24种信号分解方法(附matlab代码)icon-default.png?t=N7T8https://mp.weixin.qq.com/s?__biz=MzkxMDQ5MDk4Ng==&mid=2247486001&idx=1&sn=a87c24cb401017a78a90bd1b1439fcb0&chksm=c12be634f65c6f22368b7229a59ac5ef330b89d710c826dbfd1a1c34a02b1dd7e909c7f40d79&token=25423484&lang=zh_CN#rd

 沙场大点兵:27种一维数据转换成二维图像的方法-matlab代码沙场大点兵:27种一维数据转换成二维图像的方法-matlab代码icon-default.png?t=N7T8https://mp.weixin.qq.com/s?__biz=MzkxMDQ5MDk4Ng==&mid=2247486260&idx=1&sn=81b1970cb89364c0289ccdfb403e5388&chksm=c12be731f65c6e273a85456326b503b7f35d9f035405050932ff1926e0b1bfa8076b1bc2d1f2&token=25423484&lang=zh_CN#rd

  • 10
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值