CBCC3 – A CBCC Algorithm with Improved Exploration/Exploitation Balance

2024-03-19 00:50

本文主要是介绍CBCC3 – A CBCC Algorithm with Improved Exploration/Exploitation Balance,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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_flagNS = 50;   % 种群数
dim = 1000;   % 种群维度
upperBound = ub;
lowerBound = lb;
bestYhistory = [];    % 保存每次迭代的最佳值
trueGroup = [50, 25, 25, 100, 50, 25, 25, 700];for funcNum = 7initial_flag = 0;    % 换一个函数initial_flag重置为0sampleX = 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 : s1if i0 == 1start = 1;elsestart = start + trueGroup(i0 - 1);endendstart = start + trueGroup(i0) - 1;allGroups{end + 1} = p(1, start : endstart);enddeltaF = zeros(1, s1);version = 2;pt = 0.05;while evalue < 3 * 10 ^ 6     if evalue == 50 || rand() < ptfor i1 = 1 : s1index1 = 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) ~= 0deltaF(1, i1) = lastBestY - bestY;endlastBestY = bestY;evalue = evalue + 50 * 100;endenddeltaF1 = deltaF;[~, index2] = sort(deltaF1,'descend');c1 = index2(1);c2 = index2(2);while deltaF(c1) > deltaF(c2) && evalue < 3 * 10 ^ 6index1 = 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) ~= 0deltaF(c1) = lastBestY - bestY;endlastBestY = bestY;evalue = evalue + 50 * 100;disp(evalue);disp(bestY);endbestYhistory = [bestYhistory; bestY];disp(evalue);end
end
plot(bestYhistory);
save('CCBC3DG.mat','bestYhistory');
legend('Y','Location', 'northeast');

fminCBCC: 7021576.99155833

fminCBCC3:1.347210239771024e+05

这篇关于CBCC3 – A CBCC Algorithm with Improved Exploration/Exploitation Balance的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/824268

相关文章

【HDU】5222 Exploration(并查集+拓扑排序)

对于无向边使用并查集合并成一个集合,对于有向边使用判断是否存在环 唯一无语的地方就是看输入是百万级的,加个输入挂跑9s,不加挂跑了5s #include<cstdio>#include<cstring>#include<vector>#include<algorithm>using namespace std;#pragma comment(linker, "/STACK:102

【tensorflow 使用错误】tensorflow2.0 过程中出现 Error : Failed to get convolution algorithm

如果在使用 tensorflow 过程中出现 Error : Failed to get convolution algorithm ,这是因为显卡内存被耗尽了。 解决办法: 在代码的开头加入如下两句,动态分配显存 physical_device = tf.config.experimental.list_physical_devices("GPU")tf.config.experiment

【论文分享】GPU Memory Exploitation for Fun and Profit 24‘USENIX

目录 AbstractIntroductionResponsible disclosure BackgroundGPU BasicsGPU architectureGPU virtual memory management GPU Programming and ExecutionGPU programming modelGPU kernelDevice function NVIDIA

纪念一下自己的Coursera Princeton Algorithm的课程第一个assignment

今天终于完成了第一个Union-Find的assignment,之前觉得特别的难,可是最后自己也搞定了。而且是100%满分。 自己后来plot了一下自己的分数,也许这就是学习曲线吧。刚开始不会,到后来中期显著提高,但是要到100%,那就要经历更多的波折,甚至是下降都有可能。最后才能达到100%满分。 我觉得最有用的还是下面这段源代码: /*************************

[Algorithm][综合训练][栈和排序][加减]详细讲解

目录 1.栈和排序1.题目链接2.算法原理详解 && 代码实现 2.加减1.题目链接2.算法原理详解 && 代码实现 1.栈和排序 1.题目链接 栈和排序 2.算法原理详解 && 代码实现 解法:栈 + 贪心 -> 每次尽可能先让当前需要的最大值弹出去vector<int> solve(vector<int>& a) {int n = a.size();vect

[Algorithm][综合训练][四个选项][接雨水]详细讲解

目录 1.四个选项1.题目链接2.算法原理详解 && 代码实现 2.接雨水1.题目链接2.算法原理详解 && 代码实现 1.四个选项 1.题目链接 四个选项 2.算法原理详解 && 代码实现 解法:DFS(暴搜) + 剪枝 + Hash 剪枝: 填某个数的时候,要看看还有没有剩余次数填某个数的时候,符不符合若干题的选项必须相同 #include <iostr

General Algorithm

Y or N Silly Board Game String Sorting Find the smallest char in a string Integer Sorting Pairs Y or N Silly Board Game 2 opponents: A&B. To represent a board by String[] board = ne

零基础学启发式算法(5)-遗传算法 (Genetic Algorithm)

一、遗传算法 (Genetic Algorithm, GA)  源于达尔文的进化论,将问题的一个解当作种群中的一个个体。 gene:基因 chromosome: 染色体 population:种群 crossover:交叉 mutation:变异 selection:选择 通过多轮的“选择,交叉和变异”,选择适应度最好的个体作为问题的最优解。 选择:优胜劣汰,适者生存。

多边形快速凸包算法(Melkman‘s Algorithm)

前言 平面点集的凸包算法一文介绍了如何计算平面点集或者任意多边形的凸包。对于随机的平面点集,Graham scan和Andraw's 单调链算法已经是最快的算法了。但是对于没有自相交的封闭的简单多边形,存在线性复杂度的算法。下面介绍这一优雅高效的算法。 一般的2D凸包算法,首先将点进行排序(时间复杂度),然后利用栈操作在O(n)的时间复杂度内计算凸包。初始的排序决定了最终的时间复杂度。但是本文

one model / ensemble method /meta-algorithm 迁移学习算不算ensemble method

鉴于object detection COCO数据集的论文经常出现 single-model 也就是说,这是一个对网络的分类,呢它是什么意思,有什么特点。相对应的另一类是什么。就是下面介绍的ensemble learning。 不过比如说网络初值是用别人的网络训练好的数值,一定意义来讲是在优化空间找到一个初值,对于自己网络的结果的影响究竟有多大,也就是说,用随机初始网络得到的结果是否有不同,有多