谢菲尔德大学的MATLAB遗传算法工具箱(附代码文件)

从今天起我想记录下我的学习历程,将成果总结起来,方便日后复习

关于MATLAB遗传算法的工具箱文件放在文章末尾需要的自取

首先,我先来简单说明下如何将工具箱添加到matlab中去

  1. 将工具箱文件夹复制到本地计算机中的工具箱目录下,路径为matlabroot\toolbox。其中matlabroot为matlab的安装目录
  2. 将工具箱所在的文件夹添加到MATLAB的搜索路径中,可以通过调用addpath命令来添加,如: 
    %取得工具箱完整路径
    str = [matlabroot, '\toolbox\gatbx'];
    %添加到matlab的搜索路径中
    addpath(str)
  3.  可以使用函数ver查看gatbx工具箱的名字、发行版本等
    >> v = ver('gatbx')
    
    v = 
    
      包含以下字段的 struct:
    
           Name: 'Genetic Algorithm Toolbox'
        Version: '1.2'
        Release: ''
           Date: '15-Apr-94'

接下来就直接放个案例看看吧

简单一元函数的优化 

遗传算法优化程序代码:

%% 简单一元函数优化
clc, clear
close all

%% 画出函数图
figure(1);
hold on;
lb = 1; ub = 2;  %函数自变量范围[1,2]
ezplot('sin(10 * pi * X) / X', [lb, ub]');
xlabel('自变量/X')
ylabel('函数值/Y')

%% 定义遗传算法参数
nind = 40;      %种群大小
maxgen = 20;    %最大遗传迭代次数
preci = 20;     %个体长度
ggap = 0.95;    %代沟
px = 0.7;       %交叉概率
pm = 0.01;      %变异概率
trace = zeros(2, maxgen);               %寻优结果初始化
fieldd = [preci; lb; ub; 1; 0; 1; 1];   %区域描述器
chrom = crtbp(nind, preci);             %种群初始化(任意离散随机种群)

%% 优化
gen = 0;                                %代计数器
X = bs2rv(chrom, fieldd);               %初始种群二进制转十进制
objv = sin(10 * pi * X) ./ X;            %计算目标函数值
while gen < maxgen
    fitnv = ranking(objv);                      %分配适应度值
    selch = select('sus', chrom, fitnv, ggap);  %选择
    selch = recombin('xovsp', selch, px);       %交叉
    selch = mut(selch, pm);                     %变异
    X = bs2rv(selch, fieldd);                   %子代个体十进制转换
    objvsel = sin(10 * pi * X) ./ X;
    [chrom, objv] = reins(chrom, selch, 1, 1, objv, objvsel);   %重插入子代到父代,得到新种群
    X = bs2rv(chrom, fieldd);
    gen = gen + 1;
    %获取每代的最优解及其序号,Y为最优解,i为个体的序号
    [Y, i] = min(objv);
    trace(1, gen) = X(i);
    trace(2, gen) = Y;
end
plot(trace(1, :), trace(2, :), 'bo');   %绘制每一代的最优点
grid on;
plot(X, objv, 'b*');

%% 画进化图
figure(2);
plot(1 : maxgen, trace(2, :));
grid on;
xlabel('遗传代数')
ylabel('解的变化')
title('进化过程')
best_y = trace(2, end);
best_x = trace(1, end);
fprintf(['最优解:\nX=', num2str(best_x), '\nY=', num2str(best_y), '\n'])

 运行后会输出两张图,左图为目标函数图,图二为进化图

                   

  

 多元函数优化

 遗传算法优化程序代码:

%% 多元函数优化
clc, clear
close all

%% 画出函数图
figure(1);
lbx = -2; ubx = 2;
lby = -2; uby = 2;
ezmesh('x*cos(2*pi*y) + y*sin(2*pi*x)', [lbx, ubx, lby, uby], 50);
hold on;

%% 定义遗传算法参数
nind = 40;      %种群大小
maxgen = 50;    %最大遗传迭代次数
preci = 20;     %个体长度
ggap = 0.95;    %代沟
px = 0.7;       %交叉概率
pm = 0.01;      %变异概率
trace = zeros(3, maxgen);               %寻优结果初始化
fieldd = [preci preci;lbx lby;ubx uby;1 1;0 0;1 1;1 1]; %区域描述器
chrom = crtbp(nind, preci * 2);         %种群初始化(任意离散随机种群)

%% 优化
gen = 0;                                                %代计数器
XY = bs2rv(chrom, fieldd);                              %初始种群二进制转十进制
X = XY(:, 1); Y = XY(:, 2); 
objv = X .* cos(2*pi*Y) + Y .* sin(2*pi*X);             %计算目标函数值
while gen < maxgen
    fitnv = ranking(-objv);                             %分配适应度值
    selch = select('sus', chrom, fitnv, ggap);          %选择
    selch = recombin('xovsp', selch, px);               %交叉
    selch = mut(selch, pm);                             %变异
    XY = bs2rv(selch, fieldd);                          %子代个体十进制转换
    X = XY(:, 1); Y = XY(:, 2);
    objvsel = X .* cos(2*pi*Y) + Y .* sin(2*pi*X);
    [chrom, objv] = reins(chrom, selch, 1, 1, objv, objvsel);   %重插入子代到父代,得到新种群
    XY = bs2rv(chrom, fieldd);
    gen = gen + 1;
    %获取每代的最优解及其序号,Y为最优解,i为个体的序号
    [Y, i] = max(objv);
    trace(1:2, gen) = XY(i, :);
    trace(3, gen) = Y;
end
plot3(trace(1, :), trace(2, :), trace(3, :), 'bo');   %绘制每一代的最优点
grid on;
plot3(XY(:, 1), XY(:, 2), objv, 'b*');
hold off

%% 画进化图
figure(2);
plot(1 : maxgen, trace(3, :));
grid on;
xlabel('遗传代数')
ylabel('解的变化')
title('进化过程')
best_z = trace(3, end);
best_y = trace(2, end);
best_x = trace(1, end);
fprintf(['最优解:\nX=', num2str(best_x), '\nY=', num2str(best_y), '\nZ=', num2str(best_z), '\n'])

 结果展示

 遗传算法工具箱提供了一种求解非线性、多模型、多目标、等复杂系统优化问题的通用框架,它不依赖问题的具体领域,对问题的种类具有很强的鲁棒性,所以它广泛应用于各个科学领域。


第一次写,内容有些简短,主要还是受到我的室友刘锐的启发


链接:https://pan.baidu.com/s/1LLp1y2O1tMwSRcrKvF7EAA 
提取码:ih1x 
--来自百度网盘超级会员V3的分享

Supongo que te gusta

Origin blog.csdn.net/panmingqian/article/details/121813045
Recomendado
Clasificación