✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。
🍎个人主页:Matlab科研工作室
🍊个人信条:格物致知。
更多Matlab仿真内容点击👇
循环循环优化计算法是由河然然等人于2012年,其理论启发于循环,是根据观察观察,水的中水过程由提出、河水流向的过程而提出的建议。大气中断运动的驱动下,不从陆地水面、和植物的茎干,通过面散开,以水汽的形式进入大气层。到地面的主要作用是,通过地下、河道,再到达地面的作用。水水即用即循环中最常见的现象是由当前的水流循环选择的。好 好 层数)作作,大雨后,选择一些佳雨的降层为海下流算为第二天的雨点,选择一些雨后的小溪流为下午的雨点,作为晚上的雨点,认为是最后一层或海洋的雨。大海的,将其进行的以此为契机,适时的值应解(即)。


% 输入:
% Objective_function:你希望最小化或最大化的目标函数
% LB:问题的下限
% UB:问题的上限
% nvars:设计变量的数量
% Npop 人口规模
% Nsr 河流+海洋数量
% dmax 蒸发条件常数
% max_it:最大迭代次数
% 输出:
% Non_Downed_Solutions:最优非支配解决方案
% Pareto_Front:获得最优目标函数值
% NFEs:功能评估次数
% Elapsed_Time 解决优化问题所用的时间
MOWCA 的 %% 默认值
格式长 g
if (nargin <5 || isempty(Npop)), Npop=50; 结尾
if (nargin <6 || isempty(Nsr)), Nsr=4; 结尾
if (nargin <7 || isempty(dmax)), dmax=1e-16; 结尾
如果 (nargin <8 || isempty(max_it)), max_it=100; 结尾
%%------------------------------------------------ --------------------------
% 创建初始种群
抽动
N_stream=Npop-Nsr;
NPF=Npop; % Pareto Front 存档大小
ind.Position=[];
工业成本=[];
ind.Rank=[];
ind.DominationSet=[];
ind.DominateCount=[];
ind.CrowdingDistance=[];
流行=repmat(ind,Npop,1);
对于 i=1:Npop
pop(i).Position=LB+(UB-LB).*rand;
pop(i).Cost=objective_function(pop(i).Position);
结尾
[pop, F]=非支配排序(pop); % 非支配排序
流行=计算拥挤距离(流行,F);% 计算拥挤距离
流行=排序人口(流行);% 排序人口
%------------- 形成海洋、河流和溪流 --------------
海=流行(1);
河=流行(2:NSR);
流=流行(Nsr+1:结束);
cs=[sea.CrowdingDistance';[river.CrowdingDistance]';stream(1).CrowdingDistance];
f=0;
如果长度(唯一(cs))~=1
CN=cs-max(cs);
别的
CN=cs;
f=1;
结尾
NS=round(abs(CN/(sum(CN)+eps))*N_stream);
如果 f~=1
NS(结束)=[];
结尾
NS=排序(NS,'下降');
% ------------------------- Modification on NS -----------------------
i=Nsr;
while sum(NS)>N_stream
if NS(i)>1
NS(i)=NS(i)-1;
else
i=i-1;
end
end
i=1;
while sum(NS) NS(i)=NS(i)+1; end if find(NS==0) index=find(NS==0); for i=1:size(index,1) while NS(index(i))==0 NS(index(i))=NS(index(i))+round(NS(i)/6); NS(i)=NS(i)-round(NS(i)/6); end end end NS=sort(NS,'descend'); NB=NS(2:end); %% %----------- Main Loop for MOWCA -------------------------------------------- disp('********** Multi-objective Water Cycle Algorithm (MOWCA)************'); disp('*Iterations Number of Pareto Front Members *'); disp('********************************************************************'); FF=zeros(max_it,numel(sea.Cost)); for i=1:max_it %---------- Moving stream to sea--------------------------------------- for j=1:NS(1) stream(j).Position=stream(j).Position+2.*rand(1).*(sea.Position-stream(j).Position); stream(j).Position=min(stream(j).Position,UB); stream(j).Position=max(stream(j).Position,LB); stream(j).Cost=objective_function(stream(j).Position); end %---------- Moving Streams to rivers----------------------------------- for k=1:Nsr-1 for j=1:NB(k) stream(j+sum(NS(1:k))).Position=stream(j+sum(NS(1:k))).Position+2.*rand(1,nvars).*(river(k).Position-stream(j+sum(NS(1:k))).Position); stream(j+sum(NS(1:k))).Position=min(stream(j+sum(NS(1:k))).Position,UB); stream(j+sum(NS(1:k))).Position=max(stream(j+sum(NS(1:k))).Position,LB); stream(j+sum(NS(1:k))).Cost=objective_function(stream(j+sum(NS(1:k))).Position); end end %---------- Moving rivers to Sea -------------------------------------- for j=1:Nsr-1 river(j).Position=river(j).Position+2.*rand(1,nvars).*(sea.Position-river(j).Position); river(j).Position=min(river(j).Position,UB); river(j).Position=max(river(j).Position,LB); river(j).Cost=objective_function(river(j).Position); end %-------------- Evaporation condition and raining process-------------- % Check the evaporation condition for rivers and sea for k=1:Nsr-1 if ((norm(river(k).Position-sea.Position) for j=1:NB(k) stream(j+sum(NS(1:k))).Position=LB+rand(1,nvars).*(UB-LB); end end end [1]章纯. (2014)。水循环算法在结构优化设计中的应用和在多目标中的改进。(博士论文,广东工业大学)。 ❤️ 关注我领取海量matlab电子书和数学建模资料 ❤️部分理论引用网络文献,若有侵权联系博主删除⛄ 运行结果

⛄ 参考文献