当前位置:   article > 正文

[免费]30种最新智能优化算法求解多个基准测试函数(MATLAB代码)

[免费]30种最新智能优化算法求解多个基准测试函数(MATLAB代码)

笔者整理了30种智能优化算法对多个测试函数进行测试,效果表现明显。免费分享给大家。

祝大家生活愉快,记得点赞哦!、

免费获取: 相关资源已上传本人资源,可免费下载。   【免费】基于多个测试函数的30种智能优化算法合集免费分享资源-CSDN文库

  1. clear;clc;close all
  2. Function_name='F3'; % 使用方程的名字,对应 Functions_details 文件
  3. [lb,ub,dim,fobj]=Get_Functions_details(Function_name); %得到具体的方程即目标函数,变量的维度,变量的上下限
  4. figure(1)
  5. x=lb/2:0.1:ub/2; %x轴,y轴范围
  6. y=x;
  7. L_num=length(x);
  8. f_value=[]; %对应x,y的函数值
  9. for i=1:L_num
  10. for j=1:L_num
  11. f_value(i,j)=fobj([x(i),y(j)]);
  12. end
  13. end
  14. surfc(x,y,f_value,'LineStyle','none');
  15. pop_num=100; % Number of search agents 种群数量
  16. Max_iter=1000; % Maximum numbef of iterations 最大迭代次数
  17. %以下是各种优化算法的比较
  18. Time_compare=[]; %算法的运行时间比较
  19. Fival_compare=[]; %算法的最终目标比较
  20. curve_compare=[]; %算法的过程函数比较
  21. %麻雀搜索算法
  22. name_all=[]; %算法的名称记录
  23. %%
  24. t1=clock;
  25. iter=1;
  26. [fMin_SSA,bestX_SSA,SSA_curve]=SSA(pop_num,Max_iter,lb,ub,dim,fobj); %麻雀搜索算法
  27. t2=clock;
  28. time_SSA=(t2(end)+t2(end-1)*60+t2(end-2)*3600-t1(end)-t1(end-1)*60-t1(end-2)*3600);
  29. Fival_compare=[Fival_compare,fMin_SSA];
  30. Time_compare=[Time_compare,time_SSA(end)];
  31. curve_compare=[curve_compare;SSA_curve];
  32. name_all{1,iter}='SSA';
  33. iter=iter+1;
  34. %%
  35. % 粒子群优化算法
  36. % t1=clock;
  37. % [fMin_PSO,bestX_PSO,PSO_curve]=PSO(pop_num,Max_iter,lb,ub,dim,fobj); % 粒子群优化算法
  38. % t2=clock;
  39. % time_PSO=(t2(end)+t2(end-1)*60+t2(end-2)*3600-t1(end)-t1(end-1)*60-t1(end-2)*3600);
  40. % Fival_compare=[Fival_compare,fMin_PSO];
  41. % Time_compare=[Time_compare,time_PSO(end)];
  42. % curve_compare=[curve_compare;PSO_curve];
  43. % name_all{1,iter}='PSO';
  44. % iter=iter+1;
  45. % 模拟退火优化算法
  46. t1=clock;
  47. [fMin_SA,bestX2,SA_curve]=SA(Max_iter,lb,ub,dim,fobj); % 模拟退火优化算法
  48. t2=clock;
  49. time_SA=(t2(end)+t2(end-1)*60+t2(end-2)*3600-t1(end)-t1(end-1)*60-t1(end-2)*3600);
  50. Fival_compare=[Fival_compare,fMin_SA];
  51. Time_compare=[Time_compare,time_SA(end)];
  52. curve_compare=[curve_compare;SA_curve];
  53. name_all{1,iter}='SA';
  54. iter=iter+1;
  55. % % 遗传算法优化算法
  56. % t1=clock;
  57. % [fMin_GA,bestX_GA,GA_curve]=GA(pop_num,Max_iter,lb,ub,dim,fobj); % 遗传算法优化算法
  58. % time_GA=(clock-t1);
  59. % Fival_compare=[Fival_compare,fMin_GA];
  60. % Time_compare=[Time_compare,time_GA(end)];
  61. % curve_compare=[curve_compare;GA_curve];
  62. % name_all{1,iter}='GA';
  63. % iter=iter+1;
  64. % 灰狼优化算法
  65. t1=clock;
  66. [fMin_GWO,bestX_GWO,GWO_curve]=GWO(pop_num,Max_iter,lb,ub,dim,fobj); % 灰狼优化算法
  67. t2=clock;
  68. time_GWO=(t2(end)+t2(end-1)*60+t2(end-2)*3600-t1(end)-t1(end-1)*60-t1(end-2)*3600);
  69. Fival_compare=[Fival_compare,fMin_GWO];
  70. Time_compare=[Time_compare,time_GWO(end)];
  71. curve_compare=[curve_compare;GWO_curve];
  72. name_all{1,iter}='GWO';
  73. iter=iter+1;
  74. % 改进灰狼优化算法
  75. t1=clock;
  76. [fMin_IGWO,bestX_IGWO,IGWO_curve]=IGWO(pop_num,Max_iter,lb,ub,dim,fobj);
  77. t2=clock;
  78. time_IGWO=(t2(end)+t2(end-1)*60+t2(end-2)*3600-t1(end)-t1(end-1)*60-t1(end-2)*3600);
  79. Fival_compare=[Fival_compare,fMin_IGWO];
  80. Time_compare=[Time_compare,time_IGWO(end)];
  81. curve_compare=[curve_compare;IGWO_curve];
  82. name_all{1,iter}='IGWO';
  83. iter=iter+1;
  84. %鲸鱼优化算法
  85. t1=clock;
  86. [fMin_WOA,bestX_WOA,WOA_curve]=WOA(pop_num,Max_iter,lb,ub,dim,fobj); % 鲸鱼优化算法
  87. t2=clock;
  88. time_WOA=(t2(end)+t2(end-1)*60+t2(end-2)*3600-t1(end)-t1(end-1)*60-t1(end-2)*3600);
  89. Fival_compare=[Fival_compare,fMin_WOA];
  90. Time_compare=[Time_compare,time_WOA(end)];
  91. curve_compare=[curve_compare;WOA_curve];
  92. name_all{1,iter}='WOA';
  93. iter=iter+1;
  94. %改进鲸鱼优化算法
  95. t1=clock;
  96. [fMin_EWOA,bestX_EWOA,EWOA_curve]=E_WOA(pop_num,Max_iter,lb,ub,dim,fobj);
  97. t2=clock;
  98. time_EWOA=(t2(end)+t2(end-1)*60+t2(end-2)*3600-t1(end)-t1(end-1)*60-t1(end-2)*3600);
  99. Fival_compare=[Fival_compare,fMin_EWOA];
  100. Time_compare=[Time_compare,time_EWOA(end)];
  101. curve_compare=[curve_compare;EWOA_curve];
  102. name_all{1,iter}='EWOA';
  103. iter=iter+1;
  104. % %蚁群算法
  105. % %时间略长
  106. % t1=clock;
  107. % [fMin_ALO,bestX_ALO,ALO_curve]=ALO(pop_num,Max_iter,lb,ub,dim,fobj);
  108. % t2=clock;
  109. % time_ALO=(t2(end)+t2(end-1)*60+t2(end-2)*3600-t1(end)-t1(end-1)*60-t1(end-2)*3600);
  110. % Fival_compare=[Fival_compare,fMin_ALO];
  111. % Time_compare=[Time_compare,time_ALO(end)];
  112. % curve_compare=[curve_compare;ALO_curve];
  113. % name_all{1,iter}='ALO';
  114. % iter=iter+1;
  115. %蝴蝶优化算法
  116. t1=clock;
  117. [fMin_MFO,bestX_MFO,MFO_curve]=MFO(pop_num,Max_iter,lb,ub,dim,fobj);
  118. t2=clock;
  119. time_MFO=(t2(end)+t2(end-1)*60+t2(end-2)*3600-t1(end)-t1(end-1)*60-t1(end-2)*3600);
  120. Fival_compare=[Fival_compare,fMin_MFO];
  121. Time_compare=[Time_compare,time_MFO(end)];
  122. curve_compare=[curve_compare;MFO_curve];
  123. name_all{1,iter}='MFO';
  124. iter=iter+1;
  125. %%
  126. % %蜻蜓优化算法
  127. % %时间略长
  128. % t1=clock;
  129. % [fMin_DA,bestX_DA,DA_curve]=DA(pop_num,Max_iter,lb,ub,dim,fobj);
  130. % t2=clock;
  131. % time_DA=(t2(end)+t2(end-1)*60+t2(end-2)*3600-t1(end)-t1(end-1)*60-t1(end-2)*3600);
  132. % Fival_compare=[Fival_compare,fMin_DA];
  133. % Time_compare=[Time_compare,time_DA(end)];
  134. % curve_compare=[curve_compare;DA_curve];
  135. % name_all{1,iter}='DA';
  136. % iter=iter+1;
  137. %%
  138. % % %蝗虫优化算法
  139. % %%速度太慢了
  140. % t1=clock;
  141. % [fMin_GOA,bestX_GOA,GOA_curve]=GOA(pop_num,Max_iter,lb,ub,dim,fobj);
  142. % t2=clock;
  143. % time_GOA=(t2(end)+t2(end-1)*60+t2(end-2)*3600-t1(end)-t1(end-1)*60-t1(end-2)*3600);
  144. % Fival_compare=[Fival_compare,fMin_GOA];
  145. % Time_compare=[Time_compare,time_GOA(end)];
  146. % curve_compare=[curve_compare;GOA_curve];
  147. % name_all{1,iter}='GOA';
  148. % iter=iter+1;
  149. % % %改进版蝗虫优化算法
  150. % % 时间还是略长
  151. % t1=clock;
  152. % [fMin_IGOA,bestX_IGOA,IGOA_curve]=IGOA(pop_num,Max_iter,lb,ub,dim,fobj);
  153. % t2=clock;
  154. % time_IGOA=(t2(end)+t2(end-1)*60+t2(end-2)*3600-t1(end)-t1(end-1)*60-t1(end-2)*3600);
  155. % Fival_compare=[Fival_compare,fMin_IGOA];
  156. % Time_compare=[Time_compare,time_IGOA(end)];
  157. % curve_compare=[curve_compare;IGOA_curve];
  158. % name_all{1,iter}='IGOA';
  159. % iter=iter+1;
  160. % %多版本优化器 Multi-Verse Optimizer
  161. % t1=clock;
  162. % [fMin_MVO,bestX_MVO,MVO_curve]=MVO(pop_num,Max_iter,lb,ub,dim,fobj);
  163. % t2=clock;
  164. % time_MVO=(t2(end)+t2(end-1)*60+t2(end-2)*3600-t1(end)-t1(end-1)*60-t1(end-2)*3600);
  165. % Fival_compare=[Fival_compare,fMin_MVO];
  166. % Time_compare=[Time_compare,time_MVO(end)];
  167. % curve_compare=[curve_compare;MVO_curve];
  168. % name_all{1,iter}='MVO';
  169. % iter=iter+1;
  170. %正弦余弦优化算法 Sine Cosine Algorithm
  171. t1=clock;
  172. [fMin_SCA,bestX_SCA,SCA_curve]=SCA(pop_num,Max_iter,lb,ub,dim,fobj);
  173. t2=clock;
  174. time_SCA=(t2(end)+t2(end-1)*60+t2(end-2)*3600-t1(end)-t1(end-1)*60-t1(end-2)*3600);
  175. Fival_compare=[Fival_compare,fMin_SCA];
  176. Time_compare=[Time_compare,time_SCA(end)];
  177. curve_compare=[curve_compare;SCA_curve];
  178. name_all{1,iter}='SCA';
  179. iter=iter+1;
  180. %水母优化算法?Salp Swarm Algorithm
  181. t1=clock;
  182. [fMin_SS,bestX_SS,SS_curve]=SS(pop_num,Max_iter,lb,ub,dim,fobj);
  183. t2=clock;
  184. time_SS=(t2(end)+t2(end-1)*60+t2(end-2)*3600-t1(end)-t1(end-1)*60-t1(end-2)*3600);
  185. Fival_compare=[Fival_compare,fMin_SS];
  186. Time_compare=[Time_compare,time_SS(end)];
  187. curve_compare=[curve_compare;SS_curve];
  188. name_all{1,iter}='SS';
  189. iter=iter+1;
  190. % % %平衡优化器 Equilibrium Optimizer
  191. % %感觉时间有点慢
  192. % t1=clock;
  193. % RUN_NUM=30;
  194. % [fMin_EO,bestX_EO,EO_curve]=EO(pop_num,Max_iter,lb,ub,dim,fobj,RUN_NUM);
  195. % t2=clock;
  196. % time_EO=(t2(end)+t2(end-1)*60+t2(end-2)*3600-t1(end)-t1(end-1)*60-t1(end-2)*3600);
  197. % Fival_compare=[Fival_compare,fMin_EO];
  198. % Time_compare=[Time_compare,time_EO(end)];
  199. % curve_compare=[curve_compare;EO_curve];
  200. % name_all{1,iter}='EO';
  201. % iter=iter+1;
  202. %秃鹰优化算法 African vultures optimization algorithm
  203. t1=clock;
  204. [fMin_AVOA,bestX_AVOA,AVOA_curve]=AVOA(pop_num,Max_iter,lb,ub,dim,fobj);
  205. t2=clock;
  206. time_AVOA=(t2(end)+t2(end-1)*60+t2(end-2)*3600-t1(end)-t1(end-1)*60-t1(end-2)*3600);
  207. Fival_compare=[Fival_compare,fMin_AVOA];
  208. Time_compare=[Time_compare,time_AVOA(end)];
  209. curve_compare=[curve_compare;AVOA_curve];
  210. name_all{1,iter}='AVOA';
  211. iter=iter+1;
  212. %人工蜂鸟算法 Artificial Hummingbird Algorithm
  213. t1=clock;
  214. [fMin_AHA,bestX_AHA,AHA_curve]=AHA(pop_num,Max_iter,lb,ub,dim,fobj);
  215. t2=clock;
  216. time_AHA=(t2(end)+t2(end-1)*60+t2(end-2)*3600-t1(end)-t1(end-1)*60-t1(end-2)*3600);
  217. Fival_compare=[Fival_compare,fMin_AHA];
  218. Time_compare=[Time_compare,time_AHA(end)];
  219. curve_compare=[curve_compare;AHA_curve'];
  220. name_all{1,iter}='AHA';
  221. iter=iter+1;
  222. %人工大猩猩部队优化算法 Artificial gorilla troops optimizer
  223. t1=clock;
  224. [fMin_GTO,bestX_GTO,GTO_curve]=GTO(pop_num,Max_iter,lb,ub,dim,fobj);
  225. t2=clock;
  226. time_GTO=(t2(end)+t2(end-1)*60+t2(end-2)*3600-t1(end)-t1(end-1)*60-t1(end-2)*3600);
  227. Fival_compare=[Fival_compare,fMin_GTO];
  228. Time_compare=[Time_compare,time_GTO(end)];
  229. curve_compare=[curve_compare;GTO_curve'];
  230. name_all{1,iter}='GTO';
  231. iter=iter+1;
  232. %流向算法 Flow Direction Algorithm
  233. alpha=50; % Number of flows
  234. beta=1; %Number of neighborhoods
  235. t1=clock;
  236. [fMin_FDA,bestX_FDA,FDA_curve]=FDA(Max_iter,lb,ub,dim,fobj,alpha,beta);
  237. t2=clock;
  238. time_FDA=(t2(end)+t2(end-1)*60+t2(end-2)*3600-t1(end)-t1(end-1)*60-t1(end-2)*3600);
  239. Fival_compare=[Fival_compare,fMin_FDA];
  240. Time_compare=[Time_compare,time_FDA(end)];
  241. curve_compare=[curve_compare;FDA_curve];
  242. name_all{1,iter}='FDA';
  243. iter=iter+1;
  244. % 算术优化算法 The Arithmetic Optimization Algorithm
  245. t1=clock;
  246. [fMin_AOA,bestX_AOA,AOA_curve]=AOA(pop_num,Max_iter,lb,ub,dim,fobj);
  247. t2=clock;
  248. time_AOA=(t2(end)+t2(end-1)*60+t2(end-2)*3600-t1(end)-t1(end-1)*60-t1(end-2)*3600);
  249. Fival_compare=[Fival_compare,fMin_AOA];
  250. Time_compare=[Time_compare,time_AOA(end)];
  251. curve_compare=[curve_compare;AOA_curve];
  252. name_all{1,iter}='AOA';
  253. iter=iter+1;
  254. %鹈鹕优化算法 The Pelican Optimization Algorithm
  255. t1=clock;
  256. [fMin_POA,bestX_POA,POA_curve]=POA(pop_num,Max_iter,lb,ub,dim,fobj);
  257. t2=clock;
  258. time_POA=(t2(end)+t2(end-1)*60+t2(end-2)*3600-t1(end)-t1(end-1)*60-t1(end-2)*3600);
  259. Fival_compare=[Fival_compare,fMin_POA];
  260. Time_compare=[Time_compare,time_POA(end)];
  261. curve_compare=[curve_compare;POA_curve];
  262. name_all{1,iter}='POA';
  263. iter=iter+1;
  264. %变色龙优化算法 Chameleon Swarm Algorithm (CSA)
  265. t1=clock;
  266. [fMin_CSA,bestX_CSA,CSA_curve]=CSA(pop_num,Max_iter,lb,ub,dim,fobj);
  267. t2=clock;
  268. time_CSA=(t2(end)+t2(end-1)*60+t2(end-2)*3600-t1(end)-t1(end-1)*60-t1(end-2)*3600);
  269. Fival_compare=[Fival_compare,fMin_CSA];
  270. Time_compare=[Time_compare,time_CSA(end)];
  271. curve_compare=[curve_compare;CSA_curve];
  272. name_all{1,iter}='CSA';
  273. iter=iter+1;
  274. %蛇优化算法 SO
  275. t1=clock;
  276. [fMin_SO,bestX_SO,SO_curve]=SO(pop_num,Max_iter,lb,ub,dim,fobj);
  277. t2=clock;
  278. time_SO=(t2(end)+t2(end-1)*60+t2(end-2)*3600-t1(end)-t1(end-1)*60-t1(end-2)*3600);
  279. Fival_compare=[Fival_compare,fMin_SO];
  280. Time_compare=[Time_compare,time_SO(end)];
  281. curve_compare=[curve_compare;SO_curve];
  282. name_all{1,iter}='SO';
  283. iter=iter+1;
  284. %北方苍鹰优化算法Northern_Goshawk_Optimization_A_New_Swarm-Based_Algorithm
  285. t1=clock;
  286. [fMin_NGO,bestX_NGO,NGO_curve]=NGO(pop_num,Max_iter,lb,ub,dim,fobj);
  287. t2=clock;
  288. time_NGO=(t2(end)+t2(end-1)*60+t2(end-2)*3600-t1(end)-t1(end-1)*60-t1(end-2)*3600);
  289. Fival_compare=[Fival_compare,fMin_NGO];
  290. Time_compare=[Time_compare,time_NGO(end)];
  291. curve_compare=[curve_compare;NGO_curve];
  292. name_all{1,iter}='NGO';
  293. iter=iter+1;
  294. % % 矮猫鼬优化算法Dwarf Mongoose Optimization Algorithm source codes (version 1.0)
  295. % t1=clock;
  296. % [fMin_DMOA,bestX_DMOA,DMOA_curve]=DMOA(pop_num,Max_iter,lb,ub,dim,fobj);
  297. % t2=clock;
  298. % time_DMOA=(t2(end)+t2(end-1)*60+t2(end-2)*3600-t1(end)-t1(end-1)*60-t1(end-2)*3600);
  299. % Fival_compare=[Fival_compare,fMin_DMOA];
  300. % Time_compare=[Time_compare,time_DMOA(end)];
  301. % curve_compare=[curve_compare;DMOA_curve'];
  302. % name_all{1,iter}='DMOA';
  303. % iter=iter+1;
  304. %%
  305. % 白鲨优化算法 White Shark Optimizer (WSO)
  306. t1=clock;
  307. [fMin_WSO,bestX_WSO,WSO_curve]=WSO(pop_num,Max_iter,lb,ub,dim,fobj);
  308. t2=clock;
  309. time_WSO=(t2(end)+t2(end-1)*60+t2(end-2)*3600-t1(end)-t1(end-1)*60-t1(end-2)*3600);
  310. Fival_compare=[Fival_compare,fMin_WSO];
  311. Time_compare=[Time_compare,time_WSO(end)];
  312. curve_compare=[curve_compare;WSO_curve];
  313. name_all{1,iter}='WSO';
  314. iter=iter+1;
  315. % 阿狸八八和四十大盗优化算法 Ali baba and the Forty Thieves (AFT) algorithm
  316. t1=clock;
  317. [fMin_AFT,bestX_AFT,AFT_curve]=AFT(pop_num,Max_iter,lb,ub,dim,fobj);
  318. t2=clock;
  319. time_AFT=(t2(end)+t2(end-1)*60+t2(end-2)*3600-t1(end)-t1(end-1)*60-t1(end-2)*3600);
  320. Fival_compare=[Fival_compare,fMin_AFT];
  321. Time_compare=[Time_compare,time_AFT(end)];
  322. curve_compare=[curve_compare;AFT_curve];
  323. name_all{1,iter}='AFT';
  324. iter=iter+1;
  325. %%
  326. load('color_list')
  327. figure(2)
  328. color_all=color_list(randperm(length(color_list)),:);
  329. %画迭代过程曲线
  330. for N=1:length(Fival_compare)
  331. plot(curve_compare(N,:),'Color',color_all(N,:),'LineWidth',2)
  332. hold on
  333. end
  334. xlabel('迭代次数');
  335. ylabel('目标函数值');
  336. grid on
  337. box on
  338. legend(name_all)
  339. %以下可以显示
  340. % display(['The best solution obtained by SSA is : ', num2str(bestX)]);
  341. % display(['The best optimal value of the objective funciton found by SSA is : ', num2str(fMin)]);
  342. %% 智能优化算法和内点法比较
  343. t1=clock;
  344. lb= lb.*ones( 1,dim ); % 约束上限
  345. ub= ub.*ones( 1,dim ); % 约束下限
  346. x0 = zeros( 1, dim ); %随机初始化n个种群
  347. [xsol,fval] = fmincon(fobj,x0,[],[],[],[],lb,ub);
  348. time_interpoint=(clock-t1); %内点法
  349. Fival_compare=[Fival_compare,fval];
  350. Time_compare=[Time_compare,time_interpoint(end)];
  351. name_all{1,iter}='inter-point';
  352. iter=iter+1;
  353. %% 运行值和最终目标函数比较
  354. figure(3)
  355. color=color_list(randperm(length(color_list)),:);
  356. width=0.7; %柱状图宽度
  357. for i=1:length(Fival_compare)
  358. set(bar(i,Fival_compare(i),width),'FaceColor',color(i,:),'EdgeColor',[0,0,0],'LineWidth',2)
  359. hold on
  360. %在柱状图 x,y 基础上 绘制误差 ,low为下误差,high为上误差,LineStyle 误差图样式,'Color' 误差图颜色
  361. % 'LineWidth', 线宽,'CapSize',误差标注大小
  362. % errorbar(i, y(i), low(i), high(i), 'LineStyle', 'none', 'Color', color(i+3,:), 'LineWidth', 1.5,'CapSize',18);
  363. end
  364. ylabel('obj-value')
  365. ax=gca;
  366. ax.XTick = 1:1:length(Fival_compare);
  367. set(gca,'XTickLabel',name_all,"LineWidth",2);
  368. set(gca,"FontName","Times New Roman","FontSize",12,"LineWidth",2)
  369. %% 运行时间比较
  370. figure(4)
  371. color=color_list(randperm(length(color_list)),:);
  372. width=0.7; %柱状图宽度
  373. for i=1:length(Fival_compare)
  374. set(bar(i,Time_compare(i),width),'FaceColor',color(i,:),'EdgeColor',[0,0,0],'LineWidth',2)
  375. hold on
  376. %在柱状图 x,y 基础上 绘制误差 ,low为下误差,high为上误差,LineStyle 误差图样式,'Color' 误差图颜色
  377. % 'LineWidth', 线宽,'CapSize',误差标注大小
  378. % errorbar(i, y(i), low(i), high(i), 'LineStyle', 'none', 'Color', color(i+3,:), 'LineWidth', 1.5,'CapSize',18);
  379. end
  380. ylabel('Time')
  381. ax=gca;
  382. ax.XTick = 1:1:length(Fival_compare);
  383. set(gca,'XTickLabel',name_all,"LineWidth",2);
  384. set(gca,"FontName","Times New Roman","FontSize",12,"LineWidth",2)

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号