当前位置:   article > 正文

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

谢菲尔德遗传算法工具箱

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

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

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

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

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

简单一元函数的优化 

遗传算法优化程序代码:

  1. %% 简单一元函数优化
  2. clc, clear
  3. close all
  4. %% 画出函数图
  5. figure(1);
  6. hold on;
  7. lb = 1; ub = 2; %函数自变量范围[1,2]
  8. ezplot('sin(10 * pi * X) / X', [lb, ub]');
  9. xlabel('自变量/X')
  10. ylabel('函数值/Y')
  11. %% 定义遗传算法参数
  12. nind = 40; %种群大小
  13. maxgen = 20; %最大遗传迭代次数
  14. preci = 20; %个体长度
  15. ggap = 0.95; %代沟
  16. px = 0.7; %交叉概率
  17. pm = 0.01; %变异概率
  18. trace = zeros(2, maxgen); %寻优结果初始化
  19. fieldd = [preci; lb; ub; 1; 0; 1; 1]; %区域描述器
  20. chrom = crtbp(nind, preci); %种群初始化(任意离散随机种群)
  21. %% 优化
  22. gen = 0; %代计数器
  23. X = bs2rv(chrom, fieldd); %初始种群二进制转十进制
  24. objv = sin(10 * pi * X) ./ X; %计算目标函数值
  25. while gen < maxgen
  26. fitnv = ranking(objv); %分配适应度值
  27. selch = select('sus', chrom, fitnv, ggap); %选择
  28. selch = recombin('xovsp', selch, px); %交叉
  29. selch = mut(selch, pm); %变异
  30. X = bs2rv(selch, fieldd); %子代个体十进制转换
  31. objvsel = sin(10 * pi * X) ./ X;
  32. [chrom, objv] = reins(chrom, selch, 1, 1, objv, objvsel); %重插入子代到父代,得到新种群
  33. X = bs2rv(chrom, fieldd);
  34. gen = gen + 1;
  35. %获取每代的最优解及其序号,Y为最优解,i为个体的序号
  36. [Y, i] = min(objv);
  37. trace(1, gen) = X(i);
  38. trace(2, gen) = Y;
  39. end
  40. plot(trace(1, :), trace(2, :), 'bo'); %绘制每一代的最优点
  41. grid on;
  42. plot(X, objv, 'b*');
  43. %% 画进化图
  44. figure(2);
  45. plot(1 : maxgen, trace(2, :));
  46. grid on;
  47. xlabel('遗传代数')
  48. ylabel('解的变化')
  49. title('进化过程')
  50. best_y = trace(2, end);
  51. best_x = trace(1, end);
  52. fprintf(['最优解:\nX=', num2str(best_x), '\nY=', num2str(best_y), '\n'])

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

                   

  

 多元函数优化

 遗传算法优化程序代码:

  1. %% 多元函数优化
  2. clc, clear
  3. close all
  4. %% 画出函数图
  5. figure(1);
  6. lbx = -2; ubx = 2;
  7. lby = -2; uby = 2;
  8. ezmesh('x*cos(2*pi*y) + y*sin(2*pi*x)', [lbx, ubx, lby, uby], 50);
  9. hold on;
  10. %% 定义遗传算法参数
  11. nind = 40; %种群大小
  12. maxgen = 50; %最大遗传迭代次数
  13. preci = 20; %个体长度
  14. ggap = 0.95; %代沟
  15. px = 0.7; %交叉概率
  16. pm = 0.01; %变异概率
  17. trace = zeros(3, maxgen); %寻优结果初始化
  18. fieldd = [preci preci;lbx lby;ubx uby;1 1;0 0;1 1;1 1]; %区域描述器
  19. chrom = crtbp(nind, preci * 2); %种群初始化(任意离散随机种群)
  20. %% 优化
  21. gen = 0; %代计数器
  22. XY = bs2rv(chrom, fieldd); %初始种群二进制转十进制
  23. X = XY(:, 1); Y = XY(:, 2);
  24. objv = X .* cos(2*pi*Y) + Y .* sin(2*pi*X); %计算目标函数值
  25. while gen < maxgen
  26. fitnv = ranking(-objv); %分配适应度值
  27. selch = select('sus', chrom, fitnv, ggap); %选择
  28. selch = recombin('xovsp', selch, px); %交叉
  29. selch = mut(selch, pm); %变异
  30. XY = bs2rv(selch, fieldd); %子代个体十进制转换
  31. X = XY(:, 1); Y = XY(:, 2);
  32. objvsel = X .* cos(2*pi*Y) + Y .* sin(2*pi*X);
  33. [chrom, objv] = reins(chrom, selch, 1, 1, objv, objvsel); %重插入子代到父代,得到新种群
  34. XY = bs2rv(chrom, fieldd);
  35. gen = gen + 1;
  36. %获取每代的最优解及其序号,Y为最优解,i为个体的序号
  37. [Y, i] = max(objv);
  38. trace(1:2, gen) = XY(i, :);
  39. trace(3, gen) = Y;
  40. end
  41. plot3(trace(1, :), trace(2, :), trace(3, :), 'bo'); %绘制每一代的最优点
  42. grid on;
  43. plot3(XY(:, 1), XY(:, 2), objv, 'b*');
  44. hold off
  45. %% 画进化图
  46. figure(2);
  47. plot(1 : maxgen, trace(3, :));
  48. grid on;
  49. xlabel('遗传代数')
  50. ylabel('解的变化')
  51. title('进化过程')
  52. best_z = trace(3, end);
  53. best_y = trace(2, end);
  54. best_x = trace(1, end);
  55. fprintf(['最优解:\nX=', num2str(best_x), '\nY=', num2str(best_y), '\nZ=', num2str(best_z), '\n'])

 结果展示

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


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


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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/554905
推荐阅读
相关标签
  

闽ICP备14008679号