1 内容介绍

非传统的优化工具已经证明了它们在解决各种优化问题方面的潜力。这些问题处理单个目标或多个/多个目标。倭黑猩猩优化器(BO)是一种智能自适应元启发式优化算法,灵感来自倭黑猩猩的社会行为和繁殖策略。文献中没有研究扩展这个 BO 来解决多目标优化问题。本文提出了一种多目标 Bonobo 优化器 (MOBO) 来解决不同的优化问题。本文提出了三个不同版本的 MOBO,每个版本都使用不同的方法,例如自适应网格方法的非支配排序;一种使用拥挤距离方法对人口进行排序的排序方案;分解技术,其中解决方案是通过将一个多目标问题分解为多个单目标问题来获得的。提议的 MOBO 的所有三个不同版本的性能已经在一组 30 个多样化的基准测试功能上进行了测试,并将结果与文献中可用的其他四种著名的多目标优化技术的结果进行了比较。获得的结果表明,与其他算法相比,所提出算法的前两个版本在收敛性和多样性方面表现出色或具有竞争力。

tled attacker, barrier, chaser, and driver are employed for simulating the diverse intelligence. Moreover, the four main steps of hunting, driving, blocking, and attacking, are implemented. Afterward, the algorithm is tested on 30 well-known benchmark functions, and the results are compared to four newly proposed meta-heuristic algorithms in term of convergence speed, the probability of getting stuck in local minimums, and the accuracy of obtained results. The results indicate that the ChOA outperforms the other benchmark optimization algorithms.

2 仿真代码

function [new_pops] = NondominatedSort_and_filling(pop, nobj, ncon, nreal, nbin)
N = size(pop,1);
fitsize = N/2;
[sorted_ranks, rankID] = sort(pop(:,nobj+ncon+nreal+nbin+2));
parentID = []; front = 1; front_array = [];
while size(parentID,2) < fitsize
    for i=1:N
        if sorted_ranks(i) ~= front
            break
        end
        front_array = [front_array rankID(i)];
    end
    size_check = size(parentID,2) + size(front_array,2);
    if size_check == fitsize
        parentID = [parentID front_array];
        break
    elseif size_check < fitsize
        parentID = [parentID front_array];
        sorted_ranks(1:size(front_array,2)) = [];
        rankID(1:size(front_array,2)) = [];
        N = N - size(front_array,2);
        front = front+1;
        front_array = [];
    else
        miss_size = fitsize - (size_check - size(front_array,2));
        n_consviol = nobj+ncon+nreal+nbin+1;
        n_rank= nobj+ncon+nreal+nbin+2;
        n_crowd = n_rank+1;

        if ncon==0,% if the problem does not have any constraints
           
            % sort crowding distance and select miss_size number of top individuals  
            % and add them to the parent pop
            [~, distID] = sort(pop(front_array,n_crowd), 'descend');
            parentID = [parentID front_array(distID(1:miss_size))];
            
        else % if the problem have constraints
            
            %calculate the number of the feasible individuals
            feasible_ind=find(pop(front_array,n_consviol)==0);
            feasible_ind=(front_array(feasible_ind));
            number_feasible_ind=length(feasible_ind);
            
            if  number_feasible_ind > miss_size,   
                % sort feasible individuals based on crowdind distance 
                % select the best miss_size of them and add them to parent
                % pop
                [~, distID] = sort(pop(feasible_ind,n_crowd), 'descend');
                parentID = [parentID feasible_ind(distID(1:miss_size))];       
            elseif number_feasible_ind == miss_size,
                parentID = [parentID feasible_ind]; 
            else % where number_feasible_ind < miss_size,
                % sort based on the constraint violation,
                [~, consviolationID] = sort(pop(front_array,n_consviol), 'descend');
                parentID = [parentID front_array(consviolationID(1:miss_size))];
            end
        end
    end
end
new_pops = pop(parentID,:);
end

function pop = Rank_and_Crowding_Distance_Calculation(pop, nobj, ncon, nreal, nbin)
global INF
N = size(pop,1);
P = [pop (1:N)'];
obj_max = max(pop(:,1:nobj));
obj_min = min(pop(:,1:nobj));
r = 1;
while N ~= 0
    % NON-DOMINATION SORTING
    p = simple_sort(N,P,nobj,ncon,nreal,nbin);
    n_p = size(p,2);
    globID = P(p,end);
    % ASSIGN THE RANKS OF INDIVIDUALS
    pop(globID,nobj+ncon+nreal+nbin+2) = r;
    % COMPUTE THE CROWDING DISTANCE
    if n_p == 1
        pop(globID,end) = INF;
    elseif n_p == 2
        pop(globID(1),end) = INF;
        pop(globID(2),end) = INF;
    else
        d = zeros(n_p,1);
        for i=1:nobj
            [~, m_ID] = sort(pop(globID,i));
            m_ID = globID(m_ID);
            d(1) = INF; d(end) = INF;
            for j=2:n_p-1
                d(j,1) = d(j,1) + abs((pop(m_ID(j+1),i)-pop(m_ID(j-1),i))) / (obj_max(1,i)-obj_min(1,i));
            end
        end
        pop(m_ID,end) = d;
    end
    r = r+1;
    N = N - n_p;
    P(p,:) = [];
end
%--------------------------------------------------------------------------------------------
function p = simple_sort(N,P,nobj,ncon,nreal,nbin)
p = [];
j_dom_i = 0;
for i=1:N
    for j=1:N
        if j ~= i
            j_dom_i = DominanceChecking(P(j,:), P(i,:), nobj, ncon, nreal, nbin); 
            % 1: j dominates i; -1: i dominates j; 0: both are non-dominated.
            if j_dom_i == 1
                break
            end
        end
    end
    if j_dom_i ~= 1
        p=[p i];
    end
    j_dom_i = 0;
end

3 运行结果

4 参考文献

[1] Das A K ,  Nikum A K ,  Krishnan S V , et al. Multi-objective Bonobo Optimizer (MOBO): an intelligent heuristic for multi-criteria optimization[J]. Knowledge and Information Systems, 2020, 62(6).

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

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

【智能优化算法-倭黑猩猩算法】基于倭黑猩猩优化算法求解多目标优化问题附matlab代码相关推荐

  1. 【雷达检测】基于复杂环境下的雷达目标检测技术附Matlab代码

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

  2. 【图像分割】基于计算机视觉实现视网膜图像中的血管分割附matlab代码

    1 简介 视网膜图像里的血管是可以被观察到的一类微血管,并且它是无创伤的,而其分布位置也属于深度部位[5].其分布.结构和形态特征的变化能在一定程度上反映病变的程度.而白血病.糖尿病以及高血压等疾病都 ...

  3. 基于混合整数二阶锥(MISOCP)的配电网重构(附matlab代码)

    参考资料:主动配电网网络分析与运行调控 (sciencereading.cn) 配电网重构是指在满足配电网运行基本约束的前提下,通过改变配电网中一个或多个开关的状态对配电网中一个或多个指标进行优化.通 ...

  4. 优化算法 | 基于粒子群优化算法的Bp神经网络预测21~22赛季NBA总冠军(附MATLAB代码)

    文章目录 前言 一.数据准备 二.基于PSO的Bp神经网络预测 1.粒子表达方式 2.目标函数 3.粒子速度和位置的更新 三.MATLAB代码 四.预测结果 五.代码获取方式 总结 近期你可能错过了的 ...

  5. 【图像分割】基于区域的重叠椭圆拟合实现细胞分割附matlab代码

    1 内容介绍 一种基于区域的方法,用于用自动确定的可能重叠椭圆的数量来逼近任意 2D 形状.RFOVE 是完全无监督的,在没有任何假设或关于对象形状的先验知识的情况下运行,并且扩展和改进了递减椭圆拟合 ...

  6. 【图像分割】基于方向谷形检测实现静脉纹路分割附MATLAB代码

    1 内容介绍 一种基于方向谷形检测的指静脉图像分割方法及其系统,终端,包括以下步骤:步骤1,接收图像采集模块采集的指静脉图像;步骤2,对截取的指静脉图像进行脊波变换作图像增强处理;步骤3,针对增强处理 ...

  7. 【滤波估计】基于双卡尔曼滤波实现soc和soh联合估计附matlab代码

    1 内容介绍 对电动汽车电池管理系统进行电池状态估计非常重要准确充电,实现电池模型参数的在线更新.在本文中,开路电压的估计转换为开路电压拟合的估计参数,快速时变参数开路电压被转换成几个慢时变参数.提出 ...

  8. 【路径规划】基于FMM快速行进法实现船舶路径规划附matlab代码

    1 内容介绍 第一步 描绘了一个模拟环境,其中位于通道之间的两个小岛,其中起点和目标点分别用红色阴影圆圈和红色星星表示,障碍区域用黑色表示,其中到目标点(或障碍)的距离越大,电势就越高. 论文中描述为 ...

  9. 【数学建模】基于SIR模型实现新冠病毒COVID-19估计附matlab代码

    1 内容介绍 COVID-19是由严重急性呼吸综合症冠状病毒2型引发的传染病,它最初病毒携带者是一些动物,传染源主要是COVID-19患者,无症状患者.传播方式主要是呼吸道飞沫近距离传播,接触传播,还 ...

  10. 【多式联运】基于粒子群结合遗传算法实现陆海空多式联运问题附matlab代码

    1 简介 物流运输方式由公路.水路.空运及管道等 3 种方式组成,3 种运输方式在技术上.经济上各有长短,都有适宜的 使用范围,每种运输方式单独运用很难实现节约资源.降本增效.随着我国经济不断发展以及 ...

最新文章

  1. python 调用 so 库 需要注意的地方
  2. as3.0 比较两个数组
  3. NodeJS作为Web架构中间层的使用
  4. 【CentOS7】设置静态IP地址
  5. Mac电脑上的Safari运行缓慢,卡的要死,该怎么解决?
  6. CentOs上docker安装nginx、tomcat、redis
  7. 在VS中安装nuget离线包nupkg文件
  8. python源文件是什么意思_.py文件是什么?
  9. linux 学习感悟
  10. 你学习了Python,再看此文,这是一篇可以给你带来外快的文章,不夸张
  11. How to deploy a .Net assmebly for COM use through CAB on Web Page (转)
  12. 微信跳一跳 可以直接更改分数, POST 请求没有校验
  13. 音响常用电解电容转发
  14. 常见计算机主机内部硬件设备,计算机的硬件主要包括中央处理器、储存器、输出设备和...
  15. 学画画,这些美术集标记好的学习重点拿去用
  16. react 路由重定向_如何测试与测试库的路由器重定向React
  17. python时间戳是什么意思_python时间戳是啥意思?
  18. 禁止 自动 安装 android,如何永远禁止手机安装拼多多?永远禁止手机安装拼多多的方法[多图]...
  19. 浙江大学计算机学霸作息,浙大学霸学子作息表:精确到分钟!最怕优秀的人比我们还努力!...
  20. 基于自动驾驶需求的线控转向设计方法

热门文章

  1. Apsara Stack 技术百科 | 数字化业务系统安全工程
  2. 求最长上升子序列长度和输出序列
  3. 【筛法求素数】HDU-1239 Calling Extraterrestrial Intelligence Again
  4. 2016 icpc沈阳部分题解
  5. 为什么产品开发需要做用户体验研究
  6. LeetCode - 486. Predict the Winner(排成一条线的纸牌博弈问题)
  7. 方差分析 可汗学院统计学 笔记
  8. 《洋妞》万像电影节揽四奖 或打造同名综艺节目
  9. ipad4使用教程 ipad mini使用技巧
  10. 我的世界java版mac切视角_我的世界怎么视角切换攻略 第三人称视角