珠海市企业网站制作品牌,广告策划书籍,莒县建设局门户网站,手机软件开发用什么语言一、混沌进化优化算法
https://github.com/ITyuanshou/MATLABCode
1. 算法简介
混沌进化优化算法#xff08;Chaotic Evolution Optimization, CEO#xff09;是2025年提出的一种受混沌动力学启发的新型元启发式算法。该算法的主要灵感来源于二维离散忆阻映射的混沌进化过…一、混沌进化优化算法
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_{n1} a_1 x_n (1 - x_n) b_1 y_n \\ y_{n1} a_2 y_n (1 - y_n) b_2 x_n \end{cases} {xn1a1xn(1−xn)b1ynyn1a2yn(1−yn)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 a13.8,a23.8,b10.5,b20.5。
2.2 变异操作 映射个体到混沌空间 从当前种群中随机选择两个个体 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′ub−lbxt−lb−0.5 y ′ y t − l b u b − l b − 0.25 y \frac{y_t - lb}{ub - lb} - 0.25 y′ub−lbyt−lb−0.25 其中 l b lb lb 和 u b ub ub 分别是当前种群变量的下界和上界。 生成混沌候选个体 使用混沌映射生成 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)k⋅e−cos(nπ)−1⋅xt 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 k1。 映射回实际位置 将混沌候选个体映射回实际位置 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′xchaos⋅0.5⋅(ub−lb)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′ychaos⋅0.25⋅2⋅(ub−lb)lb 生成进化方向 计算进化方向 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 dxtnxchaos′n−xt d y t n y chaos ′ n − y t d_{y_t}^n y_{\text{chaos}}^n - y_t dytnychaos′n−yt 变异操作 使用进化方向更新个体 x t 1 x t a ⋅ d x t n x_{t1} x_t a \cdot d_{x_t}^n xt1xta⋅dxtn y t 1 y t a ⋅ d y t n y_{t1} y_t a \cdot d_{y_t}^n yt1yta⋅dytn 其中 a a a 是搜索步长通常取值为 a 0.5 a 0.5 a0.5。
2.3 交叉操作
生成试验向量 对于每个维度 j j j生成一个随机数 r j r_j rj如果 r j C R r_j CR rjCR 或 j j rand j j_{\text{rand}} jjrand则试验向量 x trial n x_{\text{trial}}^n xtrialn 为变异个体 x t 1 n x_{t1}^n xt1n否则为当前个体 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_{t1}^n, \text{if } r_j CR \text{ or } j j_{\text{rand}} \\ x_t^n, \text{otherwise} \end{cases} xtrialn{xt1n,xtn,if rjCR or jjrandotherwise 其中 C R CR CR 是交叉概率通常取值为 C R 0.7 CR 0.7 CR0.7 j rand j_{\text{rand}} jrand 是随机选择的一个维度。
2.4 选择操作
选择操作 计算当前个体 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_{t1} \begin{cases} x_{\text{trial}}^n, \text{if } f(x_{\text{trial}}^n) f(x_t) \\ x_t, \text{otherwise} \end{cases} xt1{xtrialn,xt,if f(xtrialn)f(xt)otherwise
3. 算法特点
混沌特性利用二维离散忆阻映射的超混沌特性增强全局搜索能力。快速收敛通过在最优解附近进行局部搜索加快算法的收敛速度。简单易实现算法结构简单参数较少易于实现和应用。
4.算法描述 输入
func目标函数。N混沌采样数量。Np种群大小。MaxFES最大函数评估次数。
输出
Best最优变量。fBest最优函数值。
算法步骤 初始化迭代计数器 t 1 t 1 t1 初始化种群并评估种群 [Population, fit, fBest, Best] Initialization(func, Np, Dim) F E v a l s N p FEvals Np FEvalsNp 主循环 当 F E v a l s M a x F E S FEvals MaxFES FEvalsMaxFES 时执行以下步骤 重复 从种群中选择两个不同的个体 [ 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 rand0.5则执行公式 (7) 进行变异操作得到 [ x ˉ t 1 n , y ˉ t 1 n ] [\bar{x}_{t1}^n, \bar{y}_{t1}^n] [xˉt1n,yˉt1n]否则执行公式 (8) 进行变异操作得到 [ x ˉ t 1 n , y ˉ t 1 n ] [\bar{x}_{t1}^n, \bar{y}_{t1}^n] [xˉt1n,yˉt1n]生成随机数 C r rand ( 0 , 1 ) C_r \text{rand}(0, 1) Crrand(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_{t1}, y_{t1}] [xt1,yt1]更新种群和适应度值 [ 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 FEvalsFEvals2⋅N 直到 种群中的所有个体都被选择一次。 更新迭代计数器 t t 1 t t 1 tt1 结束主循环 返回结果 返回最优变量 B e s t Best Best 和最优函数值 f B e s t fBest fBest
5.详细步骤说明 初始化 初始化种群并评估每个个体的适应度值确定当前最优解 B e s t Best Best 和最优函数值 f B e s t fBest fBest。 主循环 在主循环中通过混沌映射生成混沌个体并进行变异、交叉和选择操作逐步更新种群直到达到最大函数评估次数 M a x F E S MaxFES MaxFES。 变异操作 根据随机数 r a n d rand rand 的值选择执行公式 (7) 或公式 (8) 进行变异操作生成新的变异个体。 交叉操作 通过公式 (9) 进行交叉操作生成试验向量。 选择操作 通过公式 (10) 和 (11) 进行选择操作更新种群中的个体。 更新种群 更新种群和适应度值继续下一次迭代。
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)~0error(Np must be set to an even number greater than 2)
end% Search Range
if length(Varmin) 1lu repmat([Varmin; Varmax], 1, Dim);
elselu [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 1oldfBest fBest;rand_num randperm(Np);ub max(Population); % Upper limit of population per iterationlb min(Population); % Lower limit of population per iterationfor i 1:2:Npindex rand_num(i:i1);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 chaosfor k 1 : 2 % Evaluate each chaotic sequencexy_chaos chaos_total((k-1)*N1 : 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)elsexy_hat Best rand(N,1).*( xy_chaos_dot - xy(k,:) ); % Mutation Eq. (8)endCR 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;endendend[fBest,index_best] min(fit);Best Population(index_best,:);t t 1;% termination conditionsif norm(oldfBest-fBest) 1e-8 % can be changedcounter counter 1;if counter 50 % can be changeddisp(满足停止条件);break;endelsecounter 0;endif mod(t,100)0fprintf(iter%d ObjVal%g\n,t,fBest);endhistory(t) fBest;endendfunction [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:itermaxxn k*(exp(-cos(pi.*yo))-1).*xo;yn yo xo;% Stored iteration valuex [x; xn];y [y; yn];% Update the initial value of each iterationxo xn;yo yn;
end
X x(2:end,:);
Y y(2:end,:);
endfunction 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;
endfunction fit fitness(func,x)
% calculate fitness
SE size(x,1);
fit zeros(SE,1);
for i 1:SEfit(i) feval(func,x(i,:));
end
end