• 多目标水循环优化算法附Matlab代码


    ✅作者简介:热爱科研的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电子书和数学建模资料

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

  • 相关阅读:
    136.如何进行离线计算-2
    基于Java+Springboot+Vue+elememt宠物用品商城系统设计实现
    Redis 最流行的图形化界面下载及使用超详细教程(带安装包)! redis windows客户端下载
    <排序及模拟实现>——《Data Structure in C Train》
    算法通关村-----透彻理解动态规划
    前端开发免费资源分享
    OpenSSL使用总结
    linux驱动38:后备高速缓存
    自然语言处理NLP:tf-idf原理、参数及实战
    CCIE重认证-300-410(选修)
  • 原文地址:https://blog.csdn.net/qq_59747472/article/details/127835915