赞
踩
从今天起我想记录下我的学习历程,将成果总结起来,方便日后复习
关于MATLAB遗传算法的工具箱文件放在文章末尾需要的自取
首先,我先来简单说明下如何将工具箱添加到matlab中去
- %取得工具箱完整路径
- str = [matlabroot, '\toolbox\gatbx'];
- %添加到matlab的搜索路径中
- addpath(str)
- >> 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的分享
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。