CBCC3 – A CBCC Algorithm with Improved Exploration/Exploitation Balance

news2025/1/12 23:44:59

0、论文背景

本文是在CBCC1和CBCC2的基础上提出了CBCC3。在本文中,证明了过度探索和过度开发是现有CBCC变体中性能损失的两个主要来源。在此基础上,提出了一种新的基于贡献的算法,可以在探索和开发之间保持更好的平衡。

Omidvar M N, Kazimipour B, Li X, et al. CBCC3—A contribution-based cooperative co-evolutionary algorithm with improved exploration/exploitation balance[C]//2016 IEEE congress on evolutionary computation (CEC). IEEE, 2016: 3541-3548.

1、CBCC存在的问题

有关CBCC 请参照博客:CBCC。

  • 在一些情况下,CBCC2未能切换到另一个刚刚成为最具贡献的组件的组件。当所选组件的目标值低于其他组件的目标值时,CBCC应该停止优化该组件,以便给其他组件提供一个机会。
  • 一个部分的主导地位,通过探索阶段(第一阶段)的资源平等分配,浪费了大量的客观函数评价。

一般来说,CBCC1和CBCC2的两个主要缺点可以总结如下:

  •  CBCC对适应度值的局部变化的反应缓慢,以及它对进化早期阶段积累的信息的强烈依赖。这在CBCC2中更为明显。
  • 通过在算法中频繁地应用探索阶段来进行过度的探索。

2、CBCC3

CBCC3的另一个主要区别是它依赖于最近的贡献信息来选择一个组件进行进一步优化(消除了CBCC1和CBCC2中对历史信息的使用)。

C1是与组件相关的最大贡献,而C2是与组件相关的第二大贡献。

3、实验分析

CBCC因为未能切换到另一个刚刚成为最具贡献的组件的组件,所以导致组件的过度开发:

 而导致其他组件没有获得相对应的进一步优化的资源。而CBCC3有效地解决了这一点:

 

 然后将DECC、CBCC与CBCC3进行对比实验:

 

 4、算法复现

clc; clearvars; close all;
addpath('LSGO2013\')
addpath('LSGO2013\datafiles\');
load 'f07.mat';
global initial_flag

NS = 50;   % 种群数
dim = 1000;   % 种群维度
upperBound = ub;
lowerBound = lb;
bestYhistory = [];    % 保存每次迭代的最佳值
trueGroup = [50, 25, 25, 100, 50, 25, 25, 700];

for funcNum = 7

    initial_flag = 0;    % 换一个函数initial_flag重置为0
    sampleX = lhsdesign(NS, dim) .* (upperBound - lowerBound) + lowerBound .* ones(NS, dim);    % 生成NS个种群,并获得其评估值
    sampleY = benchmark_func(sampleX', funcNum);
    sampleY = sampleY';     % 每一列是一个种群
    [bestY, bestIndex] = min(sampleY);    % 获取全局最小值以及对应的种群
    lastBestY = bestY;
    bestX = sampleX(bestIndex, :);
    bestYhistory = [bestYhistory; bestY];
    evalue = 50;
    
    allGroups = {};     % 理想分组
    s1 = size(trueGroup, 2);
    for i0 = 1 : s1
        if i0 == 1
            start = 1;
        else
            start = start + trueGroup(i0 - 1);
        end
        endstart = start + trueGroup(i0) - 1;
        allGroups{end + 1} = p(1, start : endstart);
    end

    deltaF = zeros(1, s1);
    version = 2;
    pt = 0.05;

    while evalue < 3 * 10 ^ 6     

        if evalue == 50 || rand() < pt
            for i1 = 1 : s1
                index1 = allGroups{i1};
                dim1 = size(index1, 2);
                subX = sampleX(:, index1);
                subX = SaNSDE(subX, sampleY, bestX, index1, 100, dim1, lowerBound, upperBound, @(x)benchmark_func(x, funcNum));
                sampleX(:, index1) = subX;
                sampleY = benchmark_func(sampleX', funcNum);
                sampleY = sampleY';
                [bestY, bestIndex] = min(sampleY);    % 获取全局最小值以及对应的种群
                bestX = sampleX(bestIndex, :);
                if (lastBestY - bestY) ~= 0
                    deltaF(1, i1) = lastBestY - bestY;
                end
                lastBestY = bestY;
                evalue = evalue + 50 * 100;
            end
        end

        deltaF1 = deltaF;
        [~, index2] = sort(deltaF1,'descend');
        c1 = index2(1);
        c2 = index2(2);
        while deltaF(c1) > deltaF(c2) && evalue < 3 * 10 ^ 6
            index1 = allGroups{c1};
            dim1 = size(index1, 2);
            subX = sampleX(:, index1);
            subX = SaNSDE(subX, sampleY, bestX, index1, 100, dim1, lowerBound, upperBound, @(x)benchmark_func(x, funcNum));
            sampleX(:, index1) = subX;
            sampleY = benchmark_func(sampleX', funcNum);   
            sampleY = sampleY';
            [bestY, bestIndex] = min(sampleY);    % 获取全局最小值以及对应的种群
            bestX = sampleX(bestIndex, :);
            if (lastBestY - bestY) ~= 0
                deltaF(c1) = lastBestY - bestY;
            end
            lastBestY = bestY;
            evalue = evalue + 50 * 100;
            disp(evalue);
            disp(bestY);
        end
        bestYhistory = [bestYhistory; bestY];
        disp(evalue);
    end
end
plot(bestYhistory);
save('CCBC3DG.mat','bestYhistory');
legend('Y','Location', 'northeast');

fminCBCC: 7021576.99155833

fminCBCC3:1.347210239771024e+05

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/94387.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

复现readme中的一个坑...

今天在运行一个项目的时候“Molecule Optimization via Fragment-based Generative Models”&#xff1a;GitHub - ninglab/Modof: The implementation of Modof for Molecule Optimization 然后妈的死活运行不出来&#xff0c;就是说在运行readme的时候都不行&#xff0c;我看…

Win10系统下与VMware中Ubuntu20.04建立共享文件夹

一、在VMware中设置 二、在Ubuntu中设置 1.在终端中输入下面命令&#xff0c;列出步骤一中设置的VMware共享文件夹名称&#xff0c;说明可以挂载 ~$ vmware-hgfsclient 返回 ubuntushare 2.执行下面命令&#xff0c;创建共享文件夹专用的挂载目录 ~$ sudo mkdir -p /mnt/hgfs …

基于ESP32-S3方案的2.1寸旋钮屏ZX2D10来了,同步分享ESP32应用功能技术之「WEB API接口」

启明智显基于ESP32-S3与国产芯高效开发平台8ms设计开发的一款磁编码结构的旋钮屏。结构紧凑、简单&#xff0c;外观精致&#xff1b;支持WIFI、蓝牙&#xff0c;语音交互等功能。 产品说明&#xff1a; 1. 使用乐鑫ESP32-S3 WI-FI SOC芯片&#xff0c;SOC提供WI-FI与BLE连接能力…

Java容器源码重点回顾——CopyOnWriteArrayList

1. CopyOnWriteArrayList概述 之前介绍过ArrayList&#xff0c;但是我们知道ArrayList是线程不安全的。如果多个线程同时写数据&#xff0c;就会抛出ConcurrentModificationException。然后我们又学过Vector&#xff0c;它的实现方式是在方法中都加入synchronized关键字&#…

selenium自动测试常用脚本

一、控制已经打开页面的浏览器&#xff08;已登录状态&#xff09; 1、简述&#xff1a; 自动化执行时&#xff0c;一些页面操作需要用户是登录状态才能进行访问。如果每次运行自动化脚本都需要重新登录、输入短信验证码&#xff0c;不利于自动化快速运行。因此&#xff0c;需…

[附源码]Python计算机毕业设计高校学生宿舍管理信息系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

C语言易错的选择判断题解析

有定义语句&#xff1a;int a10;&#xff0c;则表达式a的值是10。 ( A ) A.正确 B.错误 以下程序段完全正确的是( A ) A.int k, *p&k; scanf(“%d”,p); B.int k,*p: *p&k;scanf(“%d”,p); C.int *p;scanf(“%d”,p); D.51 以下程序段运行后&#xff0c;循环体运行…

Java发布和溢出简述

发布和溢出前言前置知识发布溢出简述类型案例环境发布溢出溢出类型1——未完全初始化就企图获取该对象中数据溢出类型2——在构造函数中调用非private和final的方法前言 回顾《Java并发编程实战》&#xff0c;这里附上一些总结和小案例加深理解。这里重点是对溢出的阐释。 前…

差分约束

前置知识: 最短路问题、SPFA判环&#xff0c;为了保证学习效果&#xff0c;请保证已经掌握前置知识之后&#xff0c;再来学习本章节&#xff01; 引出 当我们遇到一个不等式组&#xff0c;比如下面这个 \begin{cases} x_{1}-x_{3} \leq 5 \\ x_{1}-x_{2} \leq 2 \\ x_{2}-x_{…

3.2 图像分类

文章目录LeNet&#xff08;小图像&#xff09;LeNet在手写数字识别上的应用LeNet在眼疾识别数据集iChallenge-PM上的应用数据集准备查看数据集图片定义数据读取器启动训练AlexNet&#xff08;大图像&#xff09;VGG&#xff08;深度&#xff09;GoogLeNet&#xff08;深度兼广度…

苹果电脑怎么用移动硬盘ntfs?快速读取和编辑Mac外置移动硬盘

苹果电脑怎么用移动硬盘ntfs&#xff1f;如果你对电脑比较熟悉的话&#xff0c;可能知道NTFS磁盘格式。该格式专门为Windows系统设计的&#xff0c;也称为Windows NT文件系统。从Windows系统迁移到Mac可能是一项相当困难的任务&#xff0c;因为NTFS格式的硬盘在Mac上不能正常工…

音视频面试涨知识(一)

1 直播中为什么会出现花屏、黑屏、闪屏&#xff1f; 主播没有打开摄像头权限&#xff0c;推流端没有做好权限校验处理。 采集Camera数据&#xff0c;就要开始编码&#xff0c;如果编码失败&#xff0c;没有推送数据&#xff0c;那就会黑屏。 拉流段遇到不支持的视频格式&…

某讯滑块验证码反汇编分析-第二章

某讯滑块验证码反汇编分析-第二章反汇编难点分析反汇编帮助跟踪参数生成函数反汇编难点分析 首先就是上一章提到的&#xff0c;指令的顺序是会变的 假设某序号为1的指令为【I[I.length - 2] I[I.length - 2] I.pop();】 这个指令可能在下一次请求的时候&#xff0c;序号变…

C++ Reference: Standard C++ Library reference: Containers: map: map: end

C官网参考链接&#xff1a;https://cplusplus.com/reference/map/map/end/ 公有成员函数 <map> std::map::end C98 iterator end(); const_iterator end() const; C11 iterator end() noexcept; const_iterator end() const noexcept;返回指向结束的iterator 返回一个指…

常用代码模板2——基础算法

构思算法&#xff1a;可以先想暴力解法&#xff0c;然后观察时间复杂度&#xff0c;如果超时&#xff0c;再考虑优化&#xff0c;优化的方向就是时间复杂度要下降&#xff0c;下表可以给出一些算法选择的参考&#xff1a; 暴力枚举 -> 枚举优化 -> 正解 数据范围时间复…

Qt扫盲-QTabWidget理论总结

QTabWidget理论总结1. 简述2. 用法流程3. 选项卡设置3. 页面信息3. 外观4. 扩展1. 简述 QTabWidget 提供一个选项卡栏和一个“页面区域”&#xff0c;用于显示与每个选项卡相关的页面。默认情况下&#xff0c;选项卡栏显示在页面区域上方&#xff0c;但可以使用不同的配置&…

智能合约简单介绍

本学期学习了区块链的课程&#xff0c;作业是对于智能合约学习后的报告&#xff1a; 1 智能合约简单了解 1.1智能合约是什么 智能合约是由事件驱动的、具有状态的、部署于可共享的分布式数据库上的计算机程序&#xff0c;多用IF-THEN语句。狭义来说&#xff0c;智能合约是设计…

函数式编程 | 图文详解 | 系统性学习 | 无知的我费曼笔记

无知的我正在复盘函数式编程 该笔记特点是 重新整理了涉及资料的一些语言描述、排版而使用了自己的描述对一些地方做了补充说明。比如解释专有名词、类比说明、对比说明、注意事项提升了总结归纳性。尽可能在每个知识点上都使用一句话 || 关键词概括更注重在实际上怎么应用提出…

70. 利用 ALV 实现增删改查系列之二:仅让 ALV 报表某一列允许被编辑

本系列前一篇文章 69. 利用 ALV 实现增删改查系列之一:让 ALV 报表进入可编辑状态,我们介绍了如何让 SAP ABAP ALV 报表进入可编辑状态。在该状态下,ALV 报表的每一行,每一列都可以被任意修改,如下图所示: 但是在实际的项目中,更常见的需求是,ALV 报表只允许部分列能够…

【Vue脚手架】总结笔记

脚手架文件结构 ├── node_modules ├── public │ ├── favicon.ico: 页签图标 │ └── index.html: 主页面 ├── src │ ├── assets: 存放静态资源 │ │ └── logo.png │ │── component: 存放组件 │ │ └── HelloWorld.vue │ │…