Multilevel Cooperative Coevolution for Large Scale Optimization

news2024/10/2 8:20:46

0、论文背景

本文在CCEA_G的基础上,提出了MLCC框架。在MLCC中,基于不同组大小的随机分组策略构造了一组问题分解器。演化过程分为若干个循环,在每个周期开始时,MLCC使用自适应机制根据其历史性能选择分解器。由于不同的组大小捕获了原始目标变量之间的不同交互水平,MLCC能够在不同水平之间自我适应。

Yang Z, Tang K, Yao X. Multilevel cooperative coevolution for large scale optimization[C]//2008 IEEE congress on evolutionary computation (IEEE World Congress on Computational Intelligence). IEEE, 2008: 1663-1670.

1、MLCC

本文是在CCEA_G的基础上,提出了MLCC,CCEA_G请参照博客:CCEA_G。

在有关子空间大小的讨论中,在早期阶段,维度小的子空间有助于快速找到好的区域;但在后期阶段,大的子空间有助于子问题包含更多的全局信息,这对于微调很重要。如果算法能够根据目标函数、演化阶段和特征特征适应适当的群大小,将是理想的。

在MLCC中,我们首先设计了基于不同组大小的几个问题分解器来形成一个分解器池。池中的每个分解器都意味着目标变量之间的不同交互水平。演化过程分为几个循环。在每个周期开始时,MLCC根据它们的性能记录从分解器池中选择一个分解器。然后,MLCC使用所选的分解器将目标向量问题划分为几个子分量,并对每个子分量用一定的EA进行演化。在每个周期结束时,所选分解器的性能记录将随其在当前周期中的性能而更新。

MLCC的算法流程如下:

  • 设置分解器池,\mathbf{S}=\left\{s_{1}, \cdots, s_{t}\right\}s_{i}表示子种群维度。
  • 初始化分解器的性能记录表,\mathbf{R}=\left\{r_{1}, \cdots, r_{t}\right\}r_{i}对应s_{i}
  • 种群的初始化,\mathbf{U}=\{U(i, j) \mid i=(1, \cdots, N P), j=(1, \cdots, n)\},NP表示种群数,n表示变量维度。
  • 求取种群对应的适应度函数值,设置最优值为v。
  • \text { If }(r<\epsilon, \forall r \in \mathbf{R}),达到本次程序执行终止条件,返回步骤2。
  • 计算分解器池中每个分解器的选择概率:

\begin{array}{c} \mathbf{p}=\left\{p_{1}, p_{2}, \cdots, p_{t}\right\} \\ p_{i}=\frac{e^{7 * r_{i}}}{\sum_{j=1}^{t} e^{7 * r_{j}}}, i=\{1,2, \cdots, t\} \end{array}

  • 根据p从S中选择s_{k},选取p中最大值对应的s。
  • 将n维向量划分为s_{k}组,\mathbf{G}=\left\{\mathbf{G}_{1}, \mathbf{G}_{2}, \cdots, \mathbf{G}_{m}\right\} \text { ( } n=s_{k} * m \text { )}
  • 设置 c = 1。
  • 获得种群的子种群,\mathbf{U}^{\prime}=\left\{U(i, j) \mid i \in\{1, \cdots, N P\}, j \in \mathbf{G}_{c}\right\}
  • 使用EA优化子种群。
  • 如果 c < m,c++,并返回步骤10。
  • 评估优化后的种群的适应度值,获得当前最佳值v`。
  • 更新r_{k},并使 v = v`。

r_{k}=\frac{\left(v-v^{\prime}\right)}{|v|}

  • 如果满足停止条件,则停止;否则,下一个循环将进入步骤6。

2、算法的实现和简单验证

CCEA_G在上面提到的博客中有实现,MLCC的实现如下:

clc;clear;clearvars;
addpath('CEC2008\');
global initial_flag

NS = 100;   % 种群数
dim = 500;   % 种群维度
upper_bound = [100,100,100,5,600,32,1];    % 搜索区间:f1[-100,100],f2[-100, 100],f3[-100,100],f4[-5,5],f5[-600,600],f6[-32,32],f7[-1,1]
lower_bound = [-100,-100,-100,-5,-600,-32,-1];
bestYhistory = [];    %保存每次迭代的最佳值
sList = [5,10,25,50,100];   %组大小池
sHistory = [];
r = ones(1,5);

for func_num = 3

    initial_flag = 0;    % 换一个函数initial_flag重置为0
    sample_x = lhsdesign(NS, dim).*(upper_bound(func_num) - lower_bound(func_num)) + lower_bound(func_num).*ones(NS, dim);    % 生成NS个种群,并获得其评估值
    sample_y = benchmark_func(sample_x,func_num);
    [best_y, bestIndex] = min(sample_y);    %获取全局最小值以及对应的种群
    best_x = sample_x(bestIndex,:);
    v1 = best_y;
                        
    for i0 = 1 : 50     %迭代50次
        p = exp(r .* 7);
        p = p ./ sum(p);
        [~, index2] = max(p);    % 获取最大p值对应的索引
        s = sList(1,index2);     % 子空间的数目
        sHistory = [sHistory;s];
        index = randperm(dim);      %随机划分子空间
        for i1 = 1 : s
            index1 = index(((i1 - 1) * (dim / s) + 1) : (i1 * (dim / s)));
            sub_x = sample_x(:,index1);
            sub_x = SaNSDE(sub_x, sample_y, best_x, index1, 70, dim / s, lower_bound(func_num), upper_bound(func_num), @(x)benchmark_func(x,func_num));%100*70
            sample_x(:,index1) = sub_x;
            sample_y = benchmark_func(sample_x,func_num);   %100
            [~, bestIndex] = min(sample_y);    %获取全局最小值以及对应的种群
            best_x = sample_x(bestIndex,:);
        end

        [worse_y, worseIndex] = max(sample_y);    %获取全局最大值以及对应的种群
        randIndex = randi(NS);
        while randIndex == bestIndex || randIndex == worseIndex
            randIndex = randi(NS);     % 随机获取一个值
        end
       [sample_x(worseIndex,:),sample_y(worseIndex,:)] = NSDE(sample_x(worseIndex,:), NS, 50, s, -2, 2, 0.9, @(x)benchmark_func(x,func_num));% 50*100
       [sample_x(bestIndex,:),sample_y(bestIndex,:)] = NSDE(sample_x(bestIndex,:), NS, 50, s, -2, 2, 0.9, @(x)benchmark_func(x,func_num));% 权重向量在[-2,2]之间搜寻
       [sample_x(randIndex,:),sample_y(randIndex,:)] = NSDE(sample_x(randIndex,:), NS, 50, s, -2, 2, 0.9, @(x)benchmark_func(x,func_num));
       [best_y, bestIndex] = min(sample_y);    %获取全局最小值以及对应的种群
       best_x = sample_x(bestIndex,:);
       bestYhistory = [bestYhistory;best_y];
       v2 = best_y;
       r(1,index2) = (v1 - v2) / abs(v1);   %更新r向量
       v1 = v2;
    end
end
figure(1); 
plot(bestYhistory);
figure(2); 
plot(sHistory);

f3函数CCEA_G的优化效果:

 

f3函数MLCC的优化效果:

 f3函数MLCC的子种群个数选择图:

由此可见,动态确定分组大小,确实要好一些。 

如有错误,还望批评改正! 

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

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

相关文章

数据结构-图的存储结构

目录 图的存储结构邻接矩阵邻接表图的邻接矩阵和邻接表两种存储结构各有什么优缺点?图的存储结构 邻接矩阵 邻接矩阵的主要特点:

spring7:总结56

1.handler的形参解析&#xff08;即如何把请求参数转化为形参&#xff09; 注解参数解析原理 model and map解析原理 自定义对象处理原理 2.数据响应原理&#xff08;即如何把返回值传给前端&#xff09; 整体返回原理 详解其中的内容协商流程&#xff08;基于请求头&#x…

数据库分区的通俗解释

关于数据库分区&#xff0c;分表&#xff0c;分库&#xff0c;我通俗易懂的来举几个栗子&#xff0c;看过还不懂&#xff0c;你打我。。。 村里一家四口人(老爹叫A)有两儿子(分别是A1&#xff0c;A2)&#xff0c;长大了要自己种地了&#xff0c;就嚷嚷着要分家&#xff0c;把村…

虚拟机(Vmware)磁盘扩容(xfs格式)

先将虚拟机关机&#xff0c;按上图调整虚拟磁盘大小。 1.开启并进入虚拟机&#xff0c;打开终端&#xff0c;输入命令 df -Th 查看格式&#xff0c;图示中 /dev/mapper/centos-root 类型为xfs。 [mangolocalhost ~]$ df -Th Filesystem Type Size Used Ava…

luffy-(9)

内容概览 redis图形化客户端redis字符串操作redis hash操作redis列表操作redis管道redis其他操作django中集成rediscelery介绍 redis图形化客户端 安装图形化客户端redis-desktop-manager 新版本收费&#xff0c;可以使用老版本 QT平台&#xff1a;可以写图形化界面 python&…

腾讯云~Kafka 监控 Kafka Eagle 图形化版本

文章目录1. 安装包下载2. 开启kafka JMX3. 安装JDK&#xff0c;配置JAVA_HOME4. 上传安装包、解压5. 配置Kafka-eagle环境变量6. 配置Kafka_eagle7. 配置ke.sh8. 启动Kafka_eagle9. 防火墙10. 访问Kafka eagle1. 安装包下载 官网地址&#xff1a;EFAK 本文使用3.0.1版本 2. …

【保姆级·创建对象】如何利用resolveBeforeInstantiation()在预处理阶段返回一个Bean的实例对象

前情回顾 之前有篇文章我们有详细介绍了prepareMethodOverrides()方法并详细例举了一个lookup-method标签的例子 【保姆级】lookup-method标签实践与分析_AQin1012的博客-CSDN博客 本文我们来盘盘prepareMethodOverrides()方法后面的resolveBeaforeInstantiation()的函数&…

Android中SQLite数据库增删改查/使用ListView显示数据库内容(有完整源码)

android作业笔记 文章目录效果展示一、前言源码获取实验功能描述注意事项实现步骤二、代码展示activity_main.xml布局文件MyOpenHelper.javaMainActivity.javaList_item.xml三、&#xff08;补充&#xff09;ListView实现数据列表显示效果展示 编写SQLite数据库相关操作的代码…

【附源码】Python计算机毕业设计数据时代下的疫情管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

达梦数据库,数据库重置主键id从1开始

一、前言 今天中国国寿XX项目XC环境达梦遇到id主键自增顺序不对的问题&#xff0c;那么如何修改一个表的自增主键顺序呢&#xff1f;下边通过具体测试案例进行深入分析&#xff0c;通过delete/update/truncate/alter观察数据的变换总结出结论&#xff0c;欢迎各位喜欢达梦数据…

值得推荐的小型 C 语言开源项目:Triggerhappy

这几天在知乎上看到了一个好问题&#xff1a; 有哪些值得推荐的小型 C 语言开源项目&#xff1f; 题主很可能是想要一个这样的开源项目&#xff1a;功能小巧、代码质量高&#xff0c;可读性好&#xff0c;以便自己循序渐进地学习 C 语言。 作为一个嵌入式开发人员&#xff0…

趁年轻,大胆闯

趁年轻&#xff0c;大胆闯如果我是20岁&#xff0c;我会拿出未来的十年&#xff0c;全力已赴的赚钱&#xff0c;折腾&#xff0c;不要任何安全感。 出来创业&#xff0c;就是为100倍以上的赔率来的。

HTTPS

一、HTTPS是什么 HTTPS也是一个应用层协议&#xff0c;是在HTTP协议的基础上引入了一个加密层。 由于HTTP协议内容一般都是本文方式明文传输的&#xff0c;这就导致它在传输过程中会出现被篡改的情况。 经典案例就是万恶的“运营商劫持”&#xff01; 除了运营商可以劫持&a…

如何快速从零开始搭建一个前端项目

2022 年了&#xff0c;如何快速从零开始搭建一个合适的前端项目&#xff1f; 准备工作 首先本地需要安装好 node 环境以及包管理工具&#xff0c;推荐直接使用 pnpm&#xff0c;也可以通过 pnpm 来直接管理 nodejs 版本。 pnpm 安装&#xff1a; # Mac or Linux curl -fsSL…

SpringMVC 环境配置

文章目录引入1、MVC的概念2、Spring MVC基本原理一、导入坐标&#xff08;导包&#xff09;导入Spring MVC所需要的jar包二、新建springmvc-config.xml文件三、配置web.xml四、 创建Controller五、配置SpringMVC配置文件六、配置页面其他引入 Spring Web MVC是一种基于Java的实…

cv算法工程师学习教程

前言一&#xff0c;计算机系统 1.1&#xff0c;计算机系统书籍1.2&#xff0c;设计模式教程 二&#xff0c;编程语言 2.1&#xff0c;C 学习资料2.2&#xff0c;Python 学习资料 三&#xff0c;数据结构与算法 3.1&#xff0c;数据结构与算法课程3.2&#xff0c;算法题解 四&am…

数字信号处理及python实现(三)

数字信号处理及python实现三抽样引起的混叠抽样的频域视图样本重建信号拟合正弦波线性与多项式内插理想低通滤波器这是参考知乎的数字信号处理及matlab实现的python实现版本&#xff0c;参考连接 上一期:数字信号处理及python实现(二) 项目文件结构 test为测试文件&#xff…

【Vue】Vue开发实战之我的笔记(ch18-ch27)--20221115

参考https://blog.csdn.net/yfm120750310/article/details/111353963 18 | 为什么需要Vuex 18.1 为什么需要Vuex provide和inject虽然能够实现层层传递的数据管理&#xff0c;但对于一个大的管理系统而言会显得有些繁琐&#xff0c;我们需要一个大型的状态管理系统。 Vuex不…

甘特图是什么?如何快速搭建?

甘特图是什么&#xff1f; 甘特图是一种条状图&#xff0c;直观展示项目进展随时间的走势及联系。其中&#xff0c;项目时间由横轴表示&#xff0c;项目活动由纵轴表示。整体线条表示整个项目期间内&#xff0c;计划和实际的活动完成情况。甘特图起初用于美国胡佛水坝和美国洲…

cpe(通用平台枚举)命名规范及python CPE库实战

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。喜欢通过博客创作的方式对所学的知识进行总结与归纳,不仅形成深入且独到的理…