解决Matlab(R2016a) Sheffield GATBX遗传工具箱的一些问题

  • 简介:学习遗传算法并用Matlab实现算法的时候碰到了如下问题:
    未找到 'gadst'

  • 解决办法:Google了一下解决办法,就是说Matlab自带的Toolbox里面的是GA(另一个),所以我们用的gadst没用balabala…然后呢,当然就是去下载Sheffield的GATBX工具箱咯。然而,下好再配置好后测试一下,又报错:
    解决Matlab(R2016a) Sheffield GATBX遗传工具箱的一些问题_第1张图片
    打开文件夹看看:

解决Matlab(R2016a) Sheffield GATBX遗传工具箱的一些问题_第2张图片

纳尼 ????WTF!!!

虽然Matlab给出了解决办法(要更改文件扩展名,请将目录改变为文件的文件夹,键入:
movefile crtbp.M crtbp.m_bad; movefile crtbp.m_bad crtbp.m,然后改变目录返回。),但是这么多文件怎么改呢??好吧,我直接给改好后的文件吧。重新添加一下路径,然后让我们来测试一下吧!

目标是求 y = x.cos(5pi*x) + 3.5 在[-1,2.5]区间上的最大值。

目标函数文件: fun_sigv.m

% filename: fun_sigv.m
function y = fun_sigv(x)
y = x.*cos(5*pi*x) + 3.5;
end

算法实现脚本文件:yichuan.m

% filename: yichuan.m
% 遗传算法的测试
opt_minmax = 1; %目标优化类型:1 最大化, -1最小化
num_ppu = 50; %种群规模:个体个数
num_gen = 60; %最大遗传代数
len_ch = 20; %基因长度
gap = 0.9; % 代沟
sub = -1; %变量取值下限
up = 2.5; %变量取值上限
cd_gray = 1; % 是否选择格雷编码方式: 1 是; 0 否
sc_log = 0; % 是否选择对数标度: 1 是; 0 否
trace = zeros(num_gen, 2); % 遗传迭代性能跟踪器
fieldd = [len_ch; sub; up; 1-cd_gray; sc_log; 1; 1]; %区域描述器
chrom = crtbp(num_ppu, len_ch); % 初始化生成种群
k_gen = 0;
x = bs2rv(chrom, fieldd); % 翻译初始化种群为十进制
fun_v = fun_sigv(x); % 计算目标函数值
tx = sub:.01:up;
plot(tx, fun_sigv(tx)), xlabel('x'), ylabel('y'), title('一元函数优化结果'), hold on;

while k_gen < num_gen
    fit_v = ranking(-opt_minmax*fun_v); % 计算目标函数的适应度(基于秩的适应度计算)
    selchrom = select('rws', chrom, fit_v, gap); % 使用轮盘赌方式选择
    selchrom = recombin('xovsp', selchrom); % 交叉(单点交叉)
    selchrom = mut(selchrom); % 变异(离散变异)
    x = bs2rv(selchrom, fieldd); % 子代个体翻译
    fun_v_sel = fun_sigv(x); % 计算子代个体对应目标函数值
    [chrom, fun_v] = reins(chrom, selchrom, 1, 1, opt_minmax*fun_v,...
        opt_minmax*fun_v_sel); % 根据目标函数值将子代个体插入新群种
    [f, id] = max(fun_v); % 寻找当前种群最优解
    x = bs2rv(chrom, fieldd); %二进制串到实值的转换
    f = f* opt_minmax;
    fun_v = fun_v * opt_minmax;
    k_gen = k_gen + 1;
    trace(k_gen, 1) = f; % 矩阵的秩,即对角元素之和
    trace(k_gen, 2) = mean(fun_v);
end

plot(x(id), f, 'r*'), figure, plot(trace(:, 1), 'r-*'), hold on;
plot(trace(:, 2), 'b-o'), legend('各子代种群最优解', '各子代种群平均值'),...
    xlabel('迭代次数'), ylabel('目标函数优化情况'), title('一元函数优化过程');
   

在命令行里面输入yichuan.m,就会出现结果:

解决Matlab(R2016a) Sheffield GATBX遗传工具箱的一些问题_第3张图片

问题终于解决了!

你可能感兴趣的:(工具Fix)