✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。​

⛄ 内容介绍

循环循环优化计算法是由河然然等人于2012年,其理论启发于循环,是根据观察观察,水的中水过程由提出、河水流向的过程而提出的建议。大气中断运动的驱动下,不从陆地水面、和植物的茎干,通过面散开,以水汽的形式进入大气层。到地面的主要作用是,通过地下、河道,再到达地面的作用。水水即用即循环中最常见的现象是由当前的水流循环选择的。好 好 层数)作作,大雨后,选择一些佳雨的降层为海下流算为第二天的雨点,选择一些雨后的小溪流为下午的雨点,作为晚上的雨点,认为是最后一层或海洋的雨。大海的,将其进行的以此为契机,适时的值应解(即)。

多目标水循环优化算法附Matlab代码_参考文献


多目标水循环优化算法附Matlab代码_迭代_02

⛄ 部分代码

% 输入:


% 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.Positinotallow=[];

工业成本=[];

ind.Rank=[];

ind.Dominatinotallow=[];

ind.DominateCount=[];

ind.CrowdingDistance=[];


流行=repmat(ind,Npop,1);


对于 i=1:Npop

    pop(i).Positinotallow=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)<N_stream

    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).Positinotallow=stream(j).Position+2.*rand(1).*(sea.Position-stream(j).Position);

        

        stream(j).Positinotallow=min(stream(j).Position,UB);

        stream(j).Positinotallow=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))).Positinotallow=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))).Positinotallow=min(stream(j+sum(NS(1:k))).Position,UB);

            stream(j+sum(NS(1:k))).Positinotallow=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).Positinotallow=river(j).Position+2.*rand(1,nvars).*(sea.Position-river(j).Position);

        

        river(j).Positinotallow=min(river(j).Position,UB);

        river(j).Positinotallow=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)<dmax) || rand<0.1)

            for j=1:NB(k)

                stream(j+sum(NS(1:k))).Positinotallow=LB+rand(1,nvars).*(UB-LB);

            end

        end

    end

⛄ 运行结果

多目标水循环优化算法附Matlab代码_参考文献_03

⛄ 参考文献

[1]章纯. (2014)。水循环算法在结构优化设计中的应用和在多目标中的改进。(博士论文,广东工业大学)。

❤️ 关注我领取海量matlab电子书和数学建模资料
❤️部分理论引用网络文献,若有侵权联系博主删除