2025年SCI一区智能优化算法:混沌进化优化算法(Chaotic Evolution Optimization, CEO),提供MATLAB代码

一、混沌进化优化算法

https://github.com/ITyuanshou/MATLABCode

1. 算法简介

混沌进化优化算法(Chaotic Evolution Optimization, CEO)是2025年提出的一种受混沌动力学启发的新型元启发式算法。该算法的主要灵感来源于二维离散忆阻映射的混沌进化过程,通过利用忆阻映射的超混沌特性,为进化过程引入随机搜索方向,增强了算法的全局搜索能力和收敛速度。CEO算法在2025年3月发表在中科院1区SCI期刊《Chaos, Solitons & Fractals》。

2. 算法原理
2.1 混沌映射

CEO算法采用二维离散忆阻超混沌映射来生成混沌候选个体,具体公式如下:

{ x n + 1 = a 1 x n ( 1 − x n ) + b 1 y n y n + 1 = a 2 y n ( 1 − y n ) + b 2 x n \begin{cases} x_{n+1} = a_1 x_n (1 - x_n) + b_1 y_n \\ y_{n+1} = a_2 y_n (1 - y_n) + b_2 x_n \end{cases} {xn+1=a1xn(1xn)+b1ynyn+1=a2yn(1yn)+b2xn

其中, a 1 , a 2 , b 1 , b 2 a_1, a_2, b_1, b_2 a1,a2,b1,b2 是控制参数,通常取值为 a 1 = 3.8 , a 2 = 3.8 , b 1 = 0.5 , b 2 = 0.5 a_1 = 3.8, a_2 = 3.8, b_1 = 0.5, b_2 = 0.5 a1=3.8,a2=3.8,b1=0.5,b2=0.5

2.2 变异操作
  1. 映射个体到混沌空间

    • 从当前种群中随机选择两个个体 x t x_t xt y t y_t yt
    • x t x_t xt y t y_t yt 映射到 [ − 0.5 , 0.5 ] [-0.5, 0.5] [0.5,0.5] [ − 0.25 , 0.25 ] [-0.25, 0.25] [0.25,0.25] 范围内,分别记为 x ′ x' x y ′ y' y
      x ′ = x t − l b u b − l b − 0.5 x' = \frac{x_t - lb}{ub - lb} - 0.5 x=ublbxtlb0.5
      y ′ = y t − l b u b − l b − 0.25 y' = \frac{y_t - lb}{ub - lb} - 0.25 y=ublbytlb0.25
      其中, l b lb lb u b ub ub 分别是当前种群变量的下界和上界。
  2. 生成混沌候选个体

    • 使用混沌映射生成 N N N 个混沌候选个体 x chaos x_{\text{chaos}} xchaos y chaos y_{\text{chaos}} ychaos
      x chaos ( n ) = k ⋅ e − cos ⁡ ( n π ) − 1 ⋅ x t x_{\text{chaos}}(n) = k \cdot e^{-\cos(n\pi)} - 1 \cdot x_t xchaos(n)=kecos()1xt
      y chaos ( n ) = y t ′ + x t y_{\text{chaos}}(n) = y'_t + x_t ychaos(n)=yt+xt
      其中, k k k 是一个常数,通常取值为 k = 1 k = 1 k=1
  3. 映射回实际位置

    • 将混沌候选个体映射回实际位置:
      x chaos ′ = x chaos ⋅ 0.5 ⋅ ( u b − l b ) + l b x_{\text{chaos}'} = x_{\text{chaos}} \cdot 0.5 \cdot (ub - lb) + lb xchaos=xchaos0.5(ublb)+lb
      y chaos ′ = y chaos ⋅ 0.25 ⋅ 2 ⋅ ( u b − l b ) + l b y_{\text{chaos}'} = y_{\text{chaos}} \cdot 0.25 \cdot 2 \cdot (ub - lb) + lb ychaos=ychaos0.252(ublb)+lb
  4. 生成进化方向

    • 计算进化方向 d x t n d_{x_t}^n dxtn d y t n d_{y_t}^n dytn
      d x t n = x chaos ′ n − x t d_{x_t}^n = x_{\text{chaos}'}^n - x_t dxtn=xchaosnxt
      d y t n = y chaos ′ n − y t d_{y_t}^n = y_{\text{chaos}'}^n - y_t dytn=ychaosnyt
  5. 变异操作

    • 使用进化方向更新个体:
      x t + 1 = x t + a ⋅ d x t n x_{t+1} = x_t + a \cdot d_{x_t}^n xt+1=xt+adxtn
      y t + 1 = y t + a ⋅ d y t n y_{t+1} = y_t + a \cdot d_{y_t}^n yt+1=yt+adytn
      其中, a a a 是搜索步长,通常取值为 a = 0.5 a = 0.5 a=0.5
2.3 交叉操作
  1. 生成试验向量
    • 对于每个维度 j j j,生成一个随机数 r j r_j rj,如果 r j < C R r_j < CR rj<CR j = j rand j = j_{\text{rand}} j=jrand,则试验向量 x trial n x_{\text{trial}}^n xtrialn 为变异个体 x t + 1 n x_{t+1}^n xt+1n,否则为当前个体 x t n x_t^n xtn
      x trial n = { x t + 1 n , if  r j < C R  or  j = j rand x t n , otherwise x_{\text{trial}}^n = \begin{cases} x_{t+1}^n, & \text{if } r_j < CR \text{ or } j = j_{\text{rand}} \\ x_t^n, & \text{otherwise} \end{cases} xtrialn={xt+1n,xtn,if rj<CR or j=jrandotherwise
      其中, C R CR CR 是交叉概率,通常取值为 C R = 0.7 CR = 0.7 CR=0.7 j rand j_{\text{rand}} jrand 是随机选择的一个维度。
2.4 选择操作
  1. 选择操作
    • 计算当前个体 x t x_t xt 和试验向量 x trial n x_{\text{trial}}^n xtrialn 的适应度值。
    • 如果 f ( x trial n ) < f ( x t ) f(x_{\text{trial}}^n) < f(x_t) f(xtrialn)<f(xt),则用 x trial n x_{\text{trial}}^n xtrialn 替换 x t x_t xt,否则保持 x t x_t xt 不变:
      x t + 1 = { x trial n , if  f ( x trial n ) < f ( x t ) x t , otherwise x_{t+1} = \begin{cases} x_{\text{trial}}^n, & \text{if } f(x_{\text{trial}}^n) < f(x_t) \\ x_t, & \text{otherwise} \end{cases} xt+1={xtrialn,xt,if f(xtrialn)<f(xt)otherwise
3. 算法特点
  1. 混沌特性:利用二维离散忆阻映射的超混沌特性,增强全局搜索能力。
  2. 快速收敛:通过在最优解附近进行局部搜索,加快算法的收敛速度。
  3. 简单易实现:算法结构简单,参数较少,易于实现和应用。
4.算法描述

在这里插入图片描述

输入
  • func:目标函数。
  • N:混沌采样数量。
  • Np:种群大小。
  • MaxFES:最大函数评估次数。
输出
  • Best:最优变量。
  • fBest:最优函数值。
算法步骤
  1. 初始化迭代计数器

    • t = 1 t = 1 t=1
  2. 初始化种群并评估种群

    • [Population, fit, fBest, Best] = Initialization(func, Np, Dim)
    • F E v a l s = N p FEvals = Np FEvals=Np
  3. 主循环

    • F E v a l s < M a x F E S FEvals < MaxFES FEvals<MaxFES 时,执行以下步骤:

      1. 重复

        • 从种群中选择两个不同的个体 [ x t , y t ] [x_t, y_t] [xt,yt]
        • x t x_t xt y t y_t yt 进行区间映射,得到 [ x t ′ , y t ′ ] [x_t', y_t'] [xt,yt],执行公式 (4)。
        • 通过执行公式 (2) 生成 N N N 个混沌个体 [ x chaos , y chaos ] [x_{\text{chaos}}, y_{\text{chaos}}] [xchaos,ychaos]
        • 通过执行公式 (5) 得到实际位置 [ x chaos ′ , y chaos ′ ] [x_{\text{chaos}}', y_{\text{chaos}}'] [xchaos,ychaos]
        • 如果 r a n d < 0.5 rand < 0.5 rand<0.5,则执行公式 (7) 进行变异操作,得到 [ x ˉ t + 1 n , y ˉ t + 1 n ] [\bar{x}_{t+1}^n, \bar{y}_{t+1}^n] [xˉt+1n,yˉt+1n]
        • 否则,执行公式 (8) 进行变异操作,得到 [ x ˉ t + 1 n , y ˉ t + 1 n ] [\bar{x}_{t+1}^n, \bar{y}_{t+1}^n] [xˉt+1n,yˉt+1n]
        • 生成随机数 C r = rand ( 0 , 1 ) C_r = \text{rand}(0, 1) Cr=rand(0,1)
        • 通过执行公式 (9) 进行交叉操作,得到 [ x trial n , y trial n ] [x_{\text{trial}}^n, y_{\text{trial}}^n] [xtrialn,ytrialn]
        • 通过执行公式 (10) 和 (11) 进行选择操作,得到 [ x t + 1 , y t + 1 ] [x_{t+1}, y_{t+1}] [xt+1,yt+1]
        • 更新种群和适应度值 [ P o p u l a t i o n , f i t ] [Population, fit] [Population,fit]
        • F E v a l s = F E v a l s + 2 ⋅ N FEvals = FEvals + 2 \cdot N FEvals=FEvals+2N
      2. 直到

        • 种群中的所有个体都被选择一次。
      3. 更新迭代计数器

        • t = t + 1 t = t + 1 t=t+1
  4. 结束主循环

  5. 返回结果

    • 返回最优变量 B e s t Best Best 和最优函数值 f B e s t fBest fBest
5.详细步骤说明
  1. 初始化

    • 初始化种群并评估每个个体的适应度值,确定当前最优解 B e s t Best Best 和最优函数值 f B e s t fBest fBest
  2. 主循环

    • 在主循环中,通过混沌映射生成混沌个体,并进行变异、交叉和选择操作,逐步更新种群,直到达到最大函数评估次数 M a x F E S MaxFES MaxFES
  3. 变异操作

    • 根据随机数 r a n d rand rand 的值,选择执行公式 (7) 或公式 (8) 进行变异操作,生成新的变异个体。
  4. 交叉操作

    • 通过公式 (9) 进行交叉操作,生成试验向量。
  5. 选择操作

    • 通过公式 (10) 和 (11) 进行选择操作,更新种群中的个体。
  6. 更新种群

    • 更新种群和适应度值,继续下一次迭代。
6. 参考文献

[1]Yingchao Dong, Shaohua Zhang, Hongli Zhang, Xiaojun Zhou, Jiading Jiang, Chaotic evolution optimization: A novel metaheuristic algorithm inspired by chaotic dynamics, Chaos, Solitons & Fractals, Volume 192, 2025, 116049, https://doi.org/10.1016/j.chaos.2025.116049.
[2]https://github.com/ITyuanshou/MATLABCode/blob/main/MATLABcode

二、核心MATLAB代码

https://github.com/ITyuanshou/MATLABCode

function [Best, fBest, history] = CEO(func, Np, Dim, Varmin, Varmax, N)
rand('state', sum(100*clock));

if mod(Np,2)~=0
    error('Np must be set to an even number greater than 2!')
end

% Search Range
if length(Varmin)== 1
    lu = repmat([Varmin; Varmax], 1, Dim);
else
    lu = [Varmin; Varmax];
end

% Initialize the main population
[Population,fit,fBest,Best] = Initialization(func,lu, Np, Dim);
history(1) = fBest;

% chaotic initial search domain
low_chacos = [-0.5 -0.25]; 
up_chacos = [0.5 0.25];

t = 1; % Initialization iteration number
counter = 0;
while 1
    oldfBest = fBest;
    rand_num = randperm(Np);
    ub = max(Population); % Upper limit of population per iteration
    lb = min(Population); % Lower limit of population per iteration
    
    for i = 1:2:Np
        index = rand_num(i:i+1);
        xy = Population(index,:); % Randomly select two individuals
        
        % Perform interval mapping on xt and yt by executing Eq. (4).
        xy_dot = ((xy -  lb)./(ub - lb)).*(repmat(up_chacos',1,Dim) - repmat(low_chacos',1,Dim)) + repmat(low_chacos',1,Dim);
        
        % N chaotic individuals are obtained by executing Eq. (2)
        [x_chaos,y_chaos] = EDM(xy_dot(1,:),xy_dot(2,:),N);
        
        chaos_total = [x_chaos;y_chaos]; % Merging particles created by chaos
        
        for k = 1 : 2 % Evaluate each chaotic sequence
            xy_chaos = chaos_total((k-1)*N+1 : k*N,:);
            % Executing Eq. (5) yields the actual position of the corresponding optimization problem.
            xy_chaos_dot = (( xy_chaos -  repmat(low_chacos(:,k),1,Dim) )./(repmat(up_chacos(:,k),1,Dim) - repmat(low_chacos(:,k),1,Dim) )).*(ub - lb) + lb; 
            
            if rand < 0.5 % 
                xy_hat = xy(k,:) + rand(N,1).*( xy_chaos_dot - xy(k,:) ); % Mutation Eq. (7)
            else
                xy_hat = Best + rand(N,1).*( xy_chaos_dot - xy(k,:) ); % Mutation Eq. (8)
            end
            
            CR = rand ;
            xy_trial = Binomial_crossover(xy(k,:), xy_hat, CR); % Crossover Eq. (9)
            xy_trial = boundConstraint (xy_trial, lu);
            fit_xy_trial = fitness(func,xy_trial);
            [fBest_xy_trial,index_best] = min(fit_xy_trial);
            xy_trial_star = xy_trial(index_best,:);
            if  fBest_xy_trial < fit(index(k)) % Selection Eq. (10)
                Population(index(k),:) = xy_trial_star;
                fit(index(k)) = fBest_xy_trial;
            end
        end
        
    end
    
    [fBest,index_best] = min(fit);
    Best = Population(index_best,:);
    
    t = t + 1;
    
    %  termination conditions
    if norm(oldfBest-fBest) < 1e-8 % can be changed
        counter = counter + 1;
        if counter > 50 % can be changed
            disp('满足停止条件');
            break;
        end
    else
        counter = 0;
    end
    
    if mod(t,100)==0
        fprintf('iter=%d  ObjVal=%g\n',t,fBest);
    end
    history(t) = fBest;
    
end

end

function [X,Y] = EDM(x0,y0,itermax)
% exponential discrete memristor (E-DM) map
k = 2.66;
x = x0; % trajectory domain [-1,1]
y = y0;% trajectory domain [-0.5,0.5]
xo = x;
yo = y;
% System iteration
for j = 1:itermax
    xn = k*(exp(-cos(pi.*yo))-1).*xo;
    yn = yo + xo;
    % Stored iteration value
    x =[x; xn];
    y =[y; yn];
    % Update the initial value of each iteration
    xo = xn;
    yo = yn;
end
X =x(2:end,:);
Y =y(2:end,:);
end

function u = Binomial_crossover(p, v, CR)
% Binomial crossover
[N,dim] = size(v);
j_rand = floor(rand(N,1) * dim) + 1;
t = rand(N, dim) < CR;
t(N, j_rand) = 1;
u = t .* v + (1 - t) .* p;
end

function fit = fitness(func,x)
% calculate fitness
SE = size(x,1);
fit = zeros(SE,1);
for i = 1:SE
    fit(i) = feval(func,x(i,:));
end
end






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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

网络安全之日志审计 网络安全审计制度

一、代码审计安全 代码编写安全: 程序的两大根本:变量与函数 漏洞形成的条件:可以控制的变量“一切输入都是有害的 ” 变量到达有利用价值的函数&#xff08;危险函数&#xff09;“一切进入函数的变量是有害的” 漏洞的利用效果取决于最终函数的功能&#xff0c;变量进入…

VScode+stfp插件,实现文件远程同步保存【2025实操有效】

目录 1 痛点2 准备工作3 操作步骤3.1 第一步&#xff0c;下载STFP插件3.2 第二步&#xff0c;修改配置文件3.3 第三步&#xff0c;测试是否成功 4 后记 1 痛点 我一直用vscode远程连接服务器&#xff0c;传代码文件等到服务器上面&#xff0c;突然有一次服务器那边尽心维修&am…

Java高频面试之SE-23

hello啊&#xff0c;各位观众姥爷们&#xff01;&#xff01;&#xff01;本baby今天又来了&#xff01;哈哈哈哈哈嗝&#x1f436; Java 中的 Stream 是 Java 8 引入的一种全新的数据处理方式&#xff0c;它基于函数式编程思想&#xff0c;提供了一种高效、简洁且灵活的方式来…

python-leetcode-乘积最大子数组

152. 乘积最大子数组 - 力扣&#xff08;LeetCode&#xff09; class Solution:def maxProduct(self, nums: List[int]) -> int:if not nums:return 0max_prod nums[0]min_prod nums[0]result nums[0]for i in range(1, len(nums)):if nums[i] < 0:max_prod, min_prod…

NavVis VLX三维扫描:高层建筑数字化的革新力量【沪敖3D】

在三维激光扫描领域&#xff0c;楼梯结构因其复杂的空间形态和连续垂直移动的实际需求&#xff0c;一直是技术难点之一。利用NavVis VLX穿戴式移动扫描系统成功完成一栋34层建筑的高效扫描&#xff0c;其中楼梯部分的数据一遍成形且无任何分层或形变。本文将深入分析该项目的技…

docker安装register私库

一、使用自己的私库 1、安装register私库 docker pull registry运行 docker run -d -v /data/registry:/var/lib/registry -p 5000:5000 --name registry registry:2参数-v /data/registry:/var/lib/registry&#xff0c;挂载目录 2、拉取需要的镜像 docker pull hello-w…

PCI_PCIe子系统学习(一)概念理清

文章目录 1、其它学习文章2、PCI和PCIe总线简单介绍2.1、PCI2.2、PCIe 3、引脚概述3.1、PCI3.1.1、PCI引脚概述3.1.2、PCI引脚定义3.1.2.1、32位 PCI (124针)3.1.2.2、64位 PCI (188针) 3.1.3、PCI引脚功能分类 3.2、PCIe3.2.1、PCIe引脚概述3.2.2、PCIe引脚定义3.2.2.1、PCIe …

解决Deepseek“服务器繁忙,请稍后再试”问题,基于硅基流动和chatbox的解决方案

文章目录 前言操作步骤步骤1&#xff1a;注册账号步骤2&#xff1a;在线体验步骤3&#xff1a;获取API密钥步骤4&#xff1a;安装chatbox步骤5&#xff1a;chatbox设置 价格方面 前言 最近在使用DeepSeek时&#xff0c;开启深度思考功能后&#xff0c;频繁遇到“服务器繁忙&am…

【SpringBoot】——分组校验、自定义注解、登入验证(集成redis)、属性配置方式、多环境开发系统学习知识

&#x1f3bc;个人主页&#xff1a;【Y小夜】 &#x1f60e;作者简介&#xff1a;一位双非学校的大三学生&#xff0c;编程爱好者&#xff0c; 专注于基础和实战分享&#xff0c;欢迎私信咨询&#xff01; &#x1f386;入门专栏&#xff1a;&#x1f387;【MySQL&#xff0…

TCP/IP 5层协议簇:物理层

目录 1. 物理层&#xff08;physical layer&#xff09; 2. 网线/双绞线 1. 物理层&#xff08;physical layer&#xff09; 工作设备&#xff1a;网线、光纤、空气 传输的东西是比特bit 基本单位如下&#xff1a;数字信号 信号&#xff1a;【模拟信号&#xff08;放大器&a…

【C/C++】理解C++内存与Linux虚拟地址空间的关系---带你通透C++中所有数据

每日激励&#xff1a;“不设限和自我肯定的心态&#xff1a;I can do all things。 — Stephen Curry” 绪论&#xff1a; 本质编写的原因是我在复习过程中突然发现虚拟地址空间和C内存划分我好想有点分不清时&#xff0c;进行查询各类资料和整理各类文章后得出的文章&#xff…

(论文)检测部分欺骗音频的初步调查

Paper–An Initial Investigation for Detecting Partially Spoofed Audio 摘要 所有现有的欺骗性语音数据库都包含整个欺骗性的攻击数据。 在实践中&#xff0c;使用仅部分欺骗的话语来装载成功的攻击是完全合理的。根据定义&#xff0c;部分欺骗的话语包含欺骗和真实段的混…

P9420 [蓝桥杯 2023 国 B] 子 2023

P9420 [蓝桥杯 2023 国 B] 子 2023 题目 分析代码 题目 分析 刚拿到这道题&#xff0c;我大脑简单算了一下&#xff0c;这个值太大了&#xff0c;直观感觉就很难&#xff01;&#xff01; 但是&#xff0c;你仔仔细细的一看&#xff0c;先从最简单的第一步入手&#xff0c;再…

第4章 4.4 EF Core数据库迁移 Add-Migration UpDate-Database

4.4.1 数据库迁移原理 总结一下就是&#xff1a; 1. 数据库迁移命令的执行&#xff0c;其实就是生成在数据库执行的脚本代码&#xff08;两个文件&#xff1a;数字_迁移名.cs 数字_迁移名.Designer.cs&#xff09;&#xff0c;用于对数据库进行定义和修饰。 2. 数据库迁移…

C++程序员内功修炼——Linux C/C++编程技术汇总

在软件开发的宏大版图中&#xff0c;C 语言宛如一座巍峨的高山&#xff0c;吸引着无数开发者攀登探索。而 Linux 操作系统&#xff0c;以其开源、稳定、高效的特性&#xff0c;成为了众多开发者钟爱的开发平台。将 C 与 Linux 相结合&#xff0c;就如同为开发者配备了一把无坚不…

ubuntu:桌面版磁盘合并扩容

下载gparted磁盘编辑器 apt-get install gparted 打开gparted 更改目标分区大小 当遇到这个报错时&#xff0c;需要在命令行执行原分区的挂载指令 查看该分区信息 记住该目录&#xff0c;并在命令行执行 mount -o remount -rw /# 示例&#xff1a;mount -o remount -rw /v…

使用 Containerd 通过 HTTP 协议拉取 Harbor 私有镜像仓库的镜像

在 Kubernetes 1.24及以上版本环境中&#xff0c;docker不再被支持&#xff0c;主要使用Containerd 是常用的容器运行。默认情况下&#xff0c;Containerd 使用 HTTPS 协议与镜像仓库通信。然而&#xff0c;在某些场景下&#xff08;如测试环境或内部网络&#xff09;&#xff…

【论文笔记-TPAMI 2024】FreqFusion:用于密集图像预测的频率感知特征融合

Frequency-aware Feature Fusion for Dense Image Prediction 用于密集图像预测的频率感知特征融合 Abstract&#xff1a;密集图像预测任务要求具有强类别信息和高分辨率精确空间边界细节的特征。为了实现这一点&#xff0c;现代分层模型通常利用特征融合&#xff0c;直接添加…

PDF扫描档智能方向识别:多模型投票机制的实践测试 救活古典书籍

2025-02-22 20:10物联全栈123 尊敬的诸位&#xff01;我是一名物联网工程师。关注我&#xff0c;持续分享最新物联网与AI资讯和开发实战。期望与您携手探寻物联网与 AI 的无尽可能 RAG知识库搭建的过程中&#xff0c;扫描档pdf的支持和准确率一直是个大家都不愿主动提起的事情…

【deepseek】本地部署+webui访问

背景 最近deepseek很火&#xff0c;但是官网的老是被限流使用&#xff0c;还有就是自己也想着玩一玩&#xff0c;于是准备在自己电脑跑一个 直接附上结果地址mydeepseek 准备工作 windows和linux都可 我这里选择linux&#xff0c;ubuntu系统 安装ollama 看下图&#xff0…