遗传算法的过程在这里先不介绍了,可能在接下来的几篇文章会介绍,这里介绍些实用的。

(1)Sheffield遗传算法工具箱的安装

我共享了下修改过文件名和后缀名的原版工具箱,地址为:http://pan.baidu.com/s/1inVKE

安装方法

将整个文件夹复制到matlab安装文件夹中的toolbox文件夹

例如:C:\Program Files\MATLAB\R2013b\toolbox文件夹。

然后在Command Window里面输入:

str = ['C:\Program Files\MATLAB\R2013b\toolbox\gatbx']

addpath(str)

可能有些同学出现过这个问题,

Undefined function or method 'crtbp' for input arguments of type 'double'

或者是:

Cannot find an exact (case-sensitive) match for 'crtbp.m'
The closest match is C:\Program Files\MATLAB\R2012a\toolbox\gatbx\CRTBP.M

To change the file extension, cd to the file's folder, type:

movefile CRTBP.M CRTBP.m_bad; movefile CRTBP.m_bad CRTBP.m

and then cd back.

这是因为新旧Matlab版本对于M文件的文件名要求不尽相同,将其全部改为小写文件名和文件后缀名即可。

(2)应用实例(1)——单变量函数求最值

类似模板的东西,求解此函数最大值:

有如下代码:

%% Do Some Cleaning
clc
clear all;
close all;
%% Set the initial parameters
lb = 1; ub = 2;%x belongs to [1,2]
%% Plot
figure(1);
hold on;
ezplot('sin(10*pi*X)/X',[lb,ub]);
xlabel('x/X')
ylabel('y/Y')
%% Define the parameters of GA
NIND = 40;%size of the group
MAXGEN = 20;%max generations
PRECI = 20;%length of a individual
GGAP = 0.95;%gap
px = 0.7;%the possibility of cross production
pm = 0.1;%the possibility of mutation
trace = zeros(2,MAXGEN);%init value of algorithm寻优函数
FieldD = [PRECI;lb;ub;1;0;1;1];%区域描述器
Chrom = crtbp(NIND,PRECI);%creat random discrete group
%% Optimizations
gen = 0;%counter of generations
X = bs2rv(Chrom,FieldD);%bin to dec
ObjV = sin(10 * pi * X) ./ X;%cal the f(x)
while gen < MAXGEN
FitnV = ranking(ObjV);%allocate the adaptness
SelCh = select('sus',Chrom,FitnV,GGAP);%select
SelCh = recombin('xovsp',SelCh,px);%recombine
SelCh = mut(SelCh, pm);%mutate
X = bs2rv(SelCh,FieldD);%to dec
ObjVSel = sin(10 * pi * X)./ X;%cal the next-gen's target f(x)
[Chrom, ObjV] = reins(Chrom, SelCh, 1, 1, ObjV, ObjVSel);%reinsert them to father-gen
X = bs2rv(Chrom, FieldD);
gen = gen + 1;%counter+=1
%get every gen's answers and it's nums, Y stant for best f(x), I for
%nums;
[Y I] = min(ObjV);
trace(1,gen) = X(I);
trace(2,gen) = Y;
end
%% Plot
plot(trace(1,:),trace(2,:),'bo');%plot every gen's answer
grid on;
plot(X,ObjV,'b*');
hold off
%% Plot the evolution
figure(2);
plot(1:MAXGEN,trace(2,:));
grid on
xlabel('count of generations')
ylabel('answer')
title('procedure')
bestY = trace(2,end)
bestX = trace(1,end)

运行结果:

(3)应用实例(2)——双变量函数求最值

那么有如下代码:

%% Do Some Cleaning
clc
clear all;
close all;
%% Set the initial parameters
lbx = -2; ubx = 2;%x belongs to [-2,2]
lby = -2; uby = 2;%y belongs to [-2,2]
%% Plot
figure(1);
ezmesh('y*sin(2*pi*x) + x*cos(2*pi*y)',[lbx,ubx,lby,uby],50);
xlabel('x/X')
ylabel('y/Y')
hold on;
%% Define the parameters of GA
NIND = 40;%size of the group
MAXGEN = 20;%max generations
PRECI = 20;%length of a individual
GGAP = 0.95;%gap
px = 0.7;%the possibility of cross production
pm = 0.01;%the possibility of mutation
trace = zeros(3,MAXGEN);%init value of algorithm寻优函数
FieldD = [PRECI PRECI;lbx lby;ubx uby;1 1;0 0;1 1;1 1];%Field discriber
Chrom = crtbp(NIND,PRECI*2);%creat random discrete group
%% Optimizations
gen = 0;%counter of generations
XY = bs2rv(Chrom,FieldD);%bin to dec
X = XY(:,1);
Y = XY(:,2);
ObjV = Y.*sin(2*pi*X) + X.*cos(2*pi*Y);%cal the f(x,y)
while gen < MAXGEN
FitnV = ranking(-ObjV);%allocate the adaptness
SelCh = select('sus',Chrom,FitnV,GGAP);%select
SelCh = recombin('xovsp',SelCh,px);%recombine
SelCh = mut(SelCh, pm);%mutate
XY = bs2rv(SelCh,FieldD);%bin to dec
X = XY(:,1);
Y = XY(:,2);
ObjVSel = Y.*sin(2*pi*X) + X.*cos(2*pi*Y);%cal the next-gen's target f(x)
[Chrom, ObjV] = reins(Chrom, SelCh, 1, 1, ObjV, ObjVSel);%reinsert them to father-gen
XY = bs2rv(Chrom,FieldD);
gen = gen + 1;%counter+=1
%get every gen's answers and it's nums, Y stant for best f(x), I for
%nums;
[Y, I] = max(ObjV);
trace(1:2,gen) = XY(I,:);
trace(3,gen) = Y;
end
%% Plot
plot3(trace(1,:),trace(2,:),trace(3,:),'bo');%plot every gen's answer
grid on;
plot3(XY(:,1),XY(:,2),ObjV,'b*');
hold off
%% Plot the evolution
figure(2);
plot(1:MAXGEN,trace(3,:));
grid on
xlabel('count of generations')
ylabel('answer')
title('procedure')
bestX = trace(1,end)
bestY = trace(2,end)
bestZ = trace(3,end)

运行结果:

(4)应用实例(3)——遗传算法接力优化(采用系统GAtool工具箱)

优化此函数:

第一个文件(主文件):

%主程序:本程序采用遗传算法接力进化,
%将上次进化结束后得到的最终种群作为下次输入的初始种群
clc;
close all;
clear all;
%进化的代数
T=100;
optionsOrigin=gaoptimset('Generations',T/2);
[x,fval,reason,output,finnal_pop]=ga(@ff,2,optionsOrigin);
%进行第二次接力进化
options1=gaoptimset('Generations',T/2,'InitialPopulation',finnal_pop,...
'PlotFcns',@gaplotbestf);
[x,fval,reason,output,finnal_pop]=ga(@ff,2,options1);
Bestx=x
BestFval=fval

评价函数文件,与主文件一起保存,名字为ff.m

%子函数:适应度函数同时也是目标函数,函数存储名称为ch14_2f.m
function f=ff(x)
g1=1.5+x(1)*x(2)-x(1)-x(2);
g2=-x(1)*x(2);
if(g1>0||g2>10)
f=100;
else
f=exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1);
end

程序结果:

至此,第一部分结束,下一篇将介绍遗传算法的基本内容。

智能算法之Matlab实现(1)——遗传算法(1)的更多相关文章

  1. 【智能算法】超详细的遗传算法(Genetic Algorithm)解析和TSP求解代码详解

    喜欢的话可以扫码关注我们的公众号哦,更多精彩尽在微信公众号[程序猿声] 文章声明 此文章部分资料和代码整合自网上,来源太多已经无法查明出处,如侵犯您的权利,请联系我删除. 00 目录 遗传算法定义 生 ...

  2. 群智能优化算法-测试函数matlab源码

    群智能优化算法测试函数matlab源代码 global M; creatematrix(2); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %画ackley图. %%%% ...

  3. KFCM算法的matlab程序(用FCM初始化聚类中心)

    KFCM算法的matlab程序(用FCM初始化聚类中心) 在“聚类——KFCM”这篇文章中已经介绍了KFCM算法,现在用matlab程序对iris数据库进行实现,用FCM初始化聚类中心,并求其准确度与 ...

  4. 【智能算法】用模拟退火(SA, Simulated Annealing)算法解决旅行商问题 (TSP, Traveling Salesman Problem)

    喜欢的话可以扫码关注我们的公众号哦,更多精彩尽在微信公众号[程序猿声] 文章声明 此文章部分资料和代码整合自网上,来源太多已经无法查明出处,如侵犯您的权利,请联系我删除. 01 什么是旅行商问题(TS ...

  5. 算法(二)之遗传算法(SGA)

    算法(二)之遗传算法(SGA) 遗传算法(Genetic Algorithm)又叫基因进化算法或进化算法,是模拟达尔文的遗传选择和自然淘汰的生物进化过程的计算模型,属于启发式搜索算法一种. 下面通过下 ...

  6. GMM算法的matlab程序

    GMM算法的matlab程序 在“GMM算法的matlab程序(初步)”这篇文章中已经用matlab程序对iris数据库进行简单的实现,下面的程序最终的目的是求准确度. 作者:凯鲁嘎吉 - 博客园 h ...

  7. GMM算法的matlab程序(初步)

    GMM算法的matlab程序 在https://www.cnblogs.com/kailugaji/p/9648508.html文章中已经介绍了GMM算法,现在用matlab程序实现它. 作者:凯鲁嘎 ...

  8. KFCM算法的matlab程序

    KFCM算法的matlab程序 在“聚类——KFCM”这篇文章中已经介绍了KFCM算法,现在用matlab程序对iris数据库进行简单的实现,并求其准确度. 作者:凯鲁嘎吉 - 博客园 http:// ...

  9. FCM算法的matlab程序2

    FCM算法的matlab程序2 在“FCM算法的matlab程序”这篇文章中已经用matlab程序对iris数据库进行实现,并求解准确度.下面的程序是另一种方法,是最常用的方法:先初始化聚类中心,在进 ...

随机推荐

  1. C# 全局Hook在xp上不回调

    最近做了个捕捉全局鼠标,获取目标窗体内的控件文本信息,点击的按钮信息.用的全局钩子.在win10上运行正常,部署到xp系统上就没有反应.查了些资料,解决了此问题. 原本安装钩子的写法如下: Nativ ...

  2. Linux 7.X 解锁用户账号

    Linux 7.X 解锁用户账号 使用指令:sudo passwd -u tomcat ,解锁. 但是会有如下提示信息: 因为 55 失败登录而锁定账户 此时,需执行指令:pam_tally2 -u ...

  3. Leetcode216. Combination Sum III组合总数3

    找出所有相加之和为 n 的 k 个数的组合.组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字. 说明: 所有数字都是正整数. 解集不能包含重复的组合. 示例 1: 输入: k = ...

  4. c++新特性实验(2)类型特性

    1. 基本类型 1.1 增加 long long long long int signed long long signed long long int unsigned long long unsi ...

  5. 配置android studio环境

    配置java jdk 1.1运行exe 程序 1.2配置jdk 环境变量 添加环境变量 ;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin .;%JAVA_HOME%\lib;% ...

  6. leyou_01_环境搭建

    1.乐优商城项目搭建 前端技术: 基础的HTML.CSS.JavaScript(基于ES6标准) JQuery Vue.js 2.0以及基于Vue的框架:Vuetify 前端构建工具:WebPack ...

  7. Sublime setting 个性修改

    { // 编辑器字体大小 "font_size": 10, // 设置行间距 "line_padding_bottom":5, "line_paddi ...

  8. 关于python的列表操作(二):排序,统计

    # 列表操作 num_list = [2, 5, 8, 6, 7, 9, 5, 7] # 升序 num_list.sort() print(num_list) # 降序 num_list.sort(r ...

  9. Python之路,Day2 - Python基础(转载Alex)

    Day2-转自金角大王 本节内容 列表.元组操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码 1. 列表.元组操作 列表是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存 ...

  10. Asio与Boost.Asio

    译自http://think-async.com/Asio/AsioAndBoostAsio Asio有两种变体:(非Boost)Asio和Boost.Asio.本文概要描述二者的不同. 1. 源代码 ...