【优化求解】基于水循环算法WCA求解约束单目标matlab代码

138 阅读3分钟

1 简介

水循环优化算 法 是 由 HadiEskandar等 人 于2012年提出,其理论受启发于大自然,是根据观察 大 自 然 水 循环过程中水由江、河、湖泊流向海洋的过程而提出的。自然界的水在太阳能和大气运动的驱动下,不 断 地 从 水面、陆面和植物的 茎 叶 面,通过蒸发或散发,以 水 汽 的 形式进入大气圈。水汽在大气圈中凝结成水滴,在 地 球 引力的作用下,以降水的形式降落到地面。到 达 地 球 表 面的降水,一部分通过地面渗入地下,一部分则 形 成 地 面 径流然后主要在重力作用下流入江、河、湖泊,再汇入海洋。水循环算法就是根据这一大自然现象即水循环中降水由溪流、河流流向大海的特点提出的。与 其 它 智 能 算法相似,该算法先以降雨层初始化形成一个初始粒子群即降水,选择最佳粒子位置(最 好 降 雨 层)作 为 大 海,然 后,选择一些较好的降雨层做为河流,其余的 降 雨 层 被 认为是流入河流或海洋的溪流。通 过 计 算 降 雨 层 的 适 应值,并将其进行对比,选取最优解(即大海)。

2 部分代码

clear all;
clc;
close all;

format long g

objective_function=@fun;
constraints=@Constraints;

for k=1:1  % Number of independent runds
   %==========================================================================
   % Problem 1
   % nvars=7;
   % LB=[-10 -10 -10 -10 -10 -10 -10];
   % UB=[10 10 10 10 10 10 10];
   %==========================================================================
   % Problem 2
   % nvars=5;
   % LB=[78 33 27 27 27];
   % UB=[102 45 45 45 45];
   %==========================================================================
   % Problem 3
   % nvars=10;
   % LB=ones(1,nvars)*0;
   % UB=ones(1,nvars)*1;
   %==========================================================================
   % Problem 4
   % nvars=3;
   % LB=ones(1,nvars)*0;
   % UB=ones(1,nvars)*10;
   %==========================================================================
   % Three-bar truss problem
   % nvars=2;
   % LB=[0 0];
   % UB=[1 1];
   %==========================================================================
   % Speed reducer problem
   nvars=7;
   LB=[2.6 0.7 17 7.3 7.3 2.9 5];
   UB=[3.6 0.8 28 8.3 8.3 3.9 5.5];
   %==========================================================================
   % Pressure vessel problem
   % nvars=4;
   % LB=[0 0 10 10];
   % UB=[100 100 200 200];
   %==========================================================================
   % Tension/compression spring design problem
   % nvars=3;
   % LB=[0.05 0.25 2];
   % UB=[2 1.3 15];
   %==========================================================================
   % Welded beam problem
   % nvars=4;
   % LB=[0.1 0.1 0.1 0.1];
   % UB=[2 10 10 2];
   %==========================================================================
   % Rolling Element Bearing
   % nvars=10;
   % D=160;
   % d=90;
   % LB=[0.5*(D+d) 0.15*(D-d) 4 0.515 0.515 0.4 0.6 0.3 0.02 0.6];
   % UB=[0.6*(D+d) 0.45*(D-d) 50 0.6 0.6 0.5 0.7 0.4 0.1 0.85];
   %==========================================================================
   % Multiple disk clutch brake
   % nvars=5;
   %--------------Info
   % % ri=[60,21,21,...,80]; x(1)
   % % ro=[90,91,92,...,110]; x(2)
   % % t=[1,1.5,2,2.5,3]; x(3)
   % % F=[600,610, 620,...,1000]; x(4)
   % % Z=[2,3,4,5,6,7,8,9]; x(5)
   %-------------
   % LB=[60 90 1 2];
   % UB=[80 110 3 9];
   
  [Xmin,Fmin,SUM_Constraints,NFEs,Elapsed_Time]=WCA_Const(objective_function,constraints,LB,UB,nvars)

   
   disp(['Run: ',num2str(k),'   Fmin= ',num2str(Fmin),' Summation Constraint Violations: ',num2str(SUM_Constraints)]);
   
   F(k)=Fmin;
   N(k)=NFEs;
   
end
img =gcf;  %获取当前画图的句柄
print(img, '-dpng', '-r600', './运行结果.png')         %即可得到对应格式和期望dpi的图像
[Min_F index]=min(F)
Ave_F=mean(F)
Max_F=max(F)
SD_F=std(F)

[Min_NFEs indexx]=min(N)
Ave_NFEs=mean(N)
Max_NFEs=max(N)
SD_NFEs=std(N)

3 仿真结果

4 参考文献

[1]章纯. (2014). 水循环算法在结构优化设计中的应用及其在多目标中的改进. (Doctoral dissertation, 广东工业大学).

部分理论引用网络文献,若有侵权联系博主删除。

5 MATLAB代码与数据下载地址

见博客主页