16种优化算法合集

最后更新于:2024-04-01 00:00:51

一、代码运行环境

已测试MATLAB2017以上版本。

二、程序介绍

注:图标代表该m文件为脚本文件,可以直接运行;图标代表函数文件,在没有输入变量的情况下无法直接运行。更详细的解释可以看这里

1.OAfuns文件夹

第三方的优化算法代码库,是实现寻优的底层代码。该文件夹中的文件不需要修改。当移植代码时,该文件夹需要随其他文件一起移植。可以调用的优化算法包括:

1.麻雀搜索算法(SSA)、
2.灰狼优化算法(GWO)、
3.鲸鱼优化算法(WOA)、
4.蚁狮优化算法(ALO)、
5.飞蛾扑火优化算法(MFO)、
6.蜻蜓优化算法(DA)、
7.多元宇宙优化算法(MVO)、
8.正弦余弦算法(SCA)、
9.樽海鞘优化算法(SSA2)、
10.海洋捕食者算法(MPA)、
11.算术优化算法(AOA)、
12.小龙虾优化算法(COA)、
13.粒子群优化算法(PSO)、
14.非线性权重粒子群优化算法(IPSO)、
15.运动编码粒子群优化算法(MPSO)、
16.基于非对称时变加速系数调整策略的粒子群算法(TACPSO)。

2.demoOA.m文件

通用优化算法框架函数kOptimizationAlgorithm的测试文件,可以直接运行。只需要设置寻优相关的参数即可运行,运行该文件,将绘制以下图片:

另外在命令行窗口将会打印:

3.kOptimizationAlgorithm.m文件

通用优化算法框架,该代码提供了多种优化算法的接口。用户可以根据需要选择不同的算法来解决特定的优化问题。其中包含了16种寻优算法的集合调用,只需要修改入口参数中选用的寻优算法类型即可。

需注意该函数文件不能直接运行,需参照demoOA的演示案例进行调用。

function [Best_pos,Best_score,curve] = kOptimizationAlgorithm(OAmethod, dataforFitness, lb, ub, dim, pop, Max_iteration)
% 通用优化算法框架,该代码提供了多种优化算法的接口。用户可以根据需要选择不同的算法来解决特定的优化问题。
% 本代码地址及代码说明:http://khsci.com/docs/index.php/2024/03/17/oa/
% 算法讲解地址:https://zhuanlan.zhihu.com/p/687417410
% 输入参数:
% OAmethod:字符串,指定使用的优化算法。可选方法包括:(截至2024.3.16,共16种方法,后续更新见手册网页:)
%           'SSA' - Sparrow Search Algorithm (麻雀搜索算法)
%           'GWO' - Grey Wolf Optimizer (灰狼优化算法)
%           'WOA' - Whale Optimization Algorithm (鲸鱼优化算法)
%           'ALO' - Ant Lion Optimizer (蚁狮优化算法)
%           'MFO' - Moth Flame Optimizer (飞蛾扑火优化算法)
%           'DA'  - Dragonfly Algorithm (蜻蜓优化算法)
%           'MVO' - Multi-Verse Optimizer (多元宇宙优化算法)
%           'SCA' - Sine Cosine Algorithm (正弦余弦算法)
%           'SSA2'- Salp Swarm Algorithm (樽海鞘优化算法)
%           'MPA' - Marine Predator Algorithm (海洋捕食者算法)
%           'AOA' - Arithmetic Optimization Algorithm (算术优化算法)
%           'COA' - Crayfish Optimization Algorithm (小龙虾优化算法)
%           'PSO' - Particle Swarm Optimization (粒子群优化算法)
%           'IPSO'- 非线性权重粒子群优化算法
%           'MPSO'- 运动编码粒子群优化算法
%           'TACPSO'- 基于非对称时变加速系数调整策略的粒子群算法
% dataforFitness:数据集,用于评估优化问题中目标函数的适应度。
% lb:数组,定义了每个参数的下限。
% ub:数组,定义了每个参数的上限。
% dim:整数,优化问题的维度,即需要优化的参数数量。
% pop:整数,优化算法中的种群数量。比如在GWO算法中代表狼群数量
% Max_iteration:整数,优化算法的最大迭代次数。
%
% 输出参数:
% Best_pos:数组,表示获得的最佳参数位置。
% Best_score:浮点数,最佳位置对应的适应度值。
% curve:数组,记录了每次迭代最佳适应度值的变化,用于绘制收敛曲线。

4.funFitness.m文件

适应度函数,此代码需要根据应用场景做适应性修改。目前代码中使用的目标函数为:fitness = (a-1)^2 + (b-2)^2,大家需要根据自己的实际场景修改此函数文件。

修改此文件需要一定代码基础,为了方便大家快速使用,完整版代码中附送了适应度函数修改替换的视频教程。

%% 适应度函数,此代码需要根据应用场景做适应性修改
function [fitness] = funFitness(x,dataforFitness)
% 输入:
% x是待优化参数,为数组。x(1)是第一个待优化参数,x(2)是第二个,以此类推。
% dataforFitness为结构体,表示导入到适应度函数的参数,按照数据实际情况设置。可以没有
% 输出:
% fitness是适应度函数

三、快速开始

1.运行测试脚本

先在MATLAB里打开下载好的文件夹,然后运行demoOA.m程序,程序运行完毕后如果没报错,且正常画出适应度函数收敛曲线图像,则说明运行环境正常,程序正确。

2.修改仿真数据/导入数据(完整版中有修改演示视频)

打开funFitness.m文件,将你的适应度函数文件替换到其中。需要注意以下几点:

(1)x为待优化数据,他是一个数组。x(1)是第一个待优化参数,x(2)是第二个,以此类推。在有些场景下,待优化参数是需要限定为整数值的,此时对应的参数在导入到你的适应度函数之前,需要使用round进行取整。

(2)对于dataforFitness的设置,不同的场景不尽相同,此处为连接脚本数据和适应度函数需使用数据的接口。例如待分类数据、标签值、待滤波数据等等,均需要从此处导入。注意,请使用结构体的方式导入。

(3)需要注意,fitness作为寻优收敛的对象,寻优算法是以寻找fitness的最小值为目标,如果你的研究对象中希望寻找的是最大值,那么需要以其负数为fitness。

3.设置寻优相关参数

参照 demoOA.m文件中第一步。修改以下几个参数:

% OAmethod:字符串,指定使用的优化算法。
% dataforFitness:数据集,用于评估优化问题中目标函数的适应度。
% lb:数组,定义了每个参数的下限。
% ub:数组,定义了每个参数的上限。
% dim:整数,优化问题的维度,即需要优化的参数数量。
% pop:整数,优化算法中的种群数量。比如在GWO算法中代表狼群数量
% Max_iteration:整数,优化算法的最大迭代次数。

这几个参数都比较容易理解,就不过多讲解了,大家参照案例演示修改即可。

4.运行程序

此时运行程序即可。

四、关于完整版与公开版代码

功能完整版公开版
数据导入、参数设置、实现特征提取
软件全部源码(函数m文件)×
优化的参数数量无限制2个以内
种群数量无限制3以内
迭代次数无限制5代以内
画图水印无水印有水印
如何修改适应度函数的视频教程×

五、获取公开版程序(需使用电脑浏览器打开)

优化算法通用框架-公开版

注:公开版代码需使用MATLAB2022a及以上版本。

六、获取完整版程序(使用电脑浏览器或者手机浏览器打开)

获取通道一(淘宝):点击此处获取完整版程序

获取通道二(本页面):点击下面“立即支付”按钮,付款后获取完整版代码下载链接和售后联系方式~本通道处于测试阶段,使用该通道可以额外优惠(仅需79元)。付款完成后刷新一下本页面即可看到下载链接。

(注意支付跳转失败的话,请使用浏览器打开本页面)

您需要先支付 79元 才能查看此处内容!立即支付

七、完整版代码重要更新

20240317 完成初版代码

八、常见问题

1.为什么运行出来得到的适应度函数收敛曲线两张图一样?对数曲线图为什么没有按对数形式显示?

这通常是由于适应度函数数值没有发生比较大的变化,尤其是没有数量级的变化,此时没有必要对数值取对数,就会导致两张收敛曲线图相同。此时大家使用第一张图像即可(黑色曲线的)。