MATLAB:遗传算法(GA)求解国际基准测试函数Ackely函数在不同维度搜索空间上的全局最小数值

本文介绍了使用遗传算法在10D,30D和50D搜索空间下寻找Ackley函数最优值的过程。通过初始化种群、交叉和变异操作,以及轮盘赌选择策略,逐步迭代并记录适应度值,最终绘制出平均收敛曲线。代码详细解释了每一步操作,适合初学者参考学习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 Q:测试算法在搜索10D,30D和50D搜索空间下,寻找Ackely函数最优值时算法的平均收敛曲线

本题是计算智能课程的一次作业,由于本人水平一般,就借助博客边写边学…其实主要是记录一下给自己回顾用的。欢迎大佬指导建议,也欢迎和me一样刚刚入门(连matlab都用不明白)的小白一起加油学习鸭~

由于是新人小白,为了让自己更好的理解每行代码,就几乎对每一行代码都加了个人理解标注,所以看起来比较繁琐,请前来一起学习的小白鸭沉下心来慢慢看~

文章最后也附有一个没有过多注解的版本,大家也可以直接拿去~

% 遗传算法参数设置

maxgen = 500; % 迭代次数

sizepop = 100; % 种群大小

pc = 0.7; % 交叉概率

pm = 0.01; % 变异概率

D = [10, 30, 50]; % 搜索空间维度

% 迭代求解Ackley函数的最小值

for k = 1:length(D)%1.2.3循环

        d = D(k);%利用索引获取维度,例如第一轮k=1,d就等于10

        % 初始化种群

        pop = -32 + 64*rand(sizepop,d);%rand用于生成100(种群大小)行,10(维度)列矩阵,该矩阵内元素均为0-1之间,再*64-32后即可得到元素均为-32~32之间的100行10列矩阵

        fit = ackley(pop);%将矩阵输入测试函数(矩阵每一行代表一个个体,每一列代表一个维度/变量x_i

        bestfit = min(fit);%由于求最小值,所以最小值就是最佳适应度,记录初代最佳适应度

        best = pop(find(fit==bestfit, 1 ),:);%找到最佳适应度与个体适应度相同的行,将该行赋值保留作为最佳个体

        % 初始化记录

        fit_rec = zeros(maxgen,1);%创建一个500(迭代次数)行的列向量(数组)

        fit_rec(1) = bestfit;%将初代最佳适应度储存在第一行

        best_rec = zeros(maxgen,d);%创建一个500(迭代次数)行10(维度)列的数组

        best_rec(1,:) = best;%将初代最佳个体保留在第一行

        % 迭代

        for i = 2:maxgen%开始迭代

                % 选择操作

                idx = roulette(fit, sizepop);%轮盘赌得到索引列向量,下面代码有分析

                n

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hi_Xiaole.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值