智能算法之Matlab实现(1)——遗传算法(1)
遗传算法的过程在这里先不介绍了,可能在接下来的几篇文章会介绍,这里介绍些实用的。
(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)的更多相关文章
- 【智能算法】超详细的遗传算法(Genetic Algorithm)解析和TSP求解代码详解
喜欢的话可以扫码关注我们的公众号哦,更多精彩尽在微信公众号[程序猿声] 文章声明 此文章部分资料和代码整合自网上,来源太多已经无法查明出处,如侵犯您的权利,请联系我删除. 00 目录 遗传算法定义 生 ...
- 群智能优化算法-测试函数matlab源码
群智能优化算法测试函数matlab源代码 global M; creatematrix(2); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %画ackley图. %%%% ...
- KFCM算法的matlab程序(用FCM初始化聚类中心)
KFCM算法的matlab程序(用FCM初始化聚类中心) 在“聚类——KFCM”这篇文章中已经介绍了KFCM算法,现在用matlab程序对iris数据库进行实现,用FCM初始化聚类中心,并求其准确度与 ...
- 【智能算法】用模拟退火(SA, Simulated Annealing)算法解决旅行商问题 (TSP, Traveling Salesman Problem)
喜欢的话可以扫码关注我们的公众号哦,更多精彩尽在微信公众号[程序猿声] 文章声明 此文章部分资料和代码整合自网上,来源太多已经无法查明出处,如侵犯您的权利,请联系我删除. 01 什么是旅行商问题(TS ...
- 算法(二)之遗传算法(SGA)
算法(二)之遗传算法(SGA) 遗传算法(Genetic Algorithm)又叫基因进化算法或进化算法,是模拟达尔文的遗传选择和自然淘汰的生物进化过程的计算模型,属于启发式搜索算法一种. 下面通过下 ...
- GMM算法的matlab程序
GMM算法的matlab程序 在“GMM算法的matlab程序(初步)”这篇文章中已经用matlab程序对iris数据库进行简单的实现,下面的程序最终的目的是求准确度. 作者:凯鲁嘎吉 - 博客园 h ...
- GMM算法的matlab程序(初步)
GMM算法的matlab程序 在https://www.cnblogs.com/kailugaji/p/9648508.html文章中已经介绍了GMM算法,现在用matlab程序实现它. 作者:凯鲁嘎 ...
- KFCM算法的matlab程序
KFCM算法的matlab程序 在“聚类——KFCM”这篇文章中已经介绍了KFCM算法,现在用matlab程序对iris数据库进行简单的实现,并求其准确度. 作者:凯鲁嘎吉 - 博客园 http:// ...
- FCM算法的matlab程序2
FCM算法的matlab程序2 在“FCM算法的matlab程序”这篇文章中已经用matlab程序对iris数据库进行实现,并求解准确度.下面的程序是另一种方法,是最常用的方法:先初始化聚类中心,在进 ...
随机推荐
- VC++1.5太伟大了
功能样样俱全,一点不比现在的VS系列差 VC++1.5全貌,虽然很古老,但是已经可以了. 新建的文档试图,多文档工程,很像样 文档试图,单文档工程,已经非常像样了,和记事本差不多了 这是资源编辑器,寒 ...
- Win3.2有人用过么
老牌子的操作系统. 了,有人用过么,我还在用,感觉挺不错的,哈哈哈哈哈. 1.0那一代,画面粗糙,几乎不能算GUI操作系统. 2.0,画面较1.0一代明显改善,可惜的是,手头没货. 3.0 ...
- VMWare下载安装以及创建虚拟机教程
参考博客https://blog.csdn.net/qq_39135287/article/details/83993574 下载 1.打开官网https://www.vmware.com/cn.ht ...
- javascript基础:bom
一.BOM 1.概念:Browser Object Model 浏览器对象模型 * 将浏览器的各个组成部分封装成对象 2.组成: * Window:窗口对象 1 ...
- 实战课堂 | DMS企业版教你用一条SQL搞定跨实例查询
背景 数据管理DMS企业版提供了安全.高效地管理大规模数据库的服务.面对多元的数据库实例,为了更方便地查询被“散落”在各个地方的业务数据,我们在DMS企业版中提供了跨数据库实例查询服务. 什么是跨实例 ...
- Django项目:CRM(客户关系管理系统)--31--23PerfectCRM实现King_admin数据删除
登陆密码设置参考 http://www.cnblogs.com/ujq3/p/8553784.html # king_urls.py # ————————02PerfectCRM创建ADMIN页面—— ...
- 不同尺寸设计图 rem 断点数据记录
320px宽的设计图 @media screen and (min-width: 320px) { html { font-size: 100px; } } @media screen and (mi ...
- NYoj536 矩阵链乘
经典问题没啥说的 #include<stdio.h> #include<string.h> #define max 100+1 #define min(a,b) (a<b ...
- C#基础之Async和Await 的异步编程
官方文档地址:https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/concepts/async/ Coffee cup = ...
- java-Map-system
一 概述 0--星期日1--星期一... 有对应关系,对应关系的一方是有序的数字,可以将数字作为角标. public String getWeek(int num){ if(num<0 || n ...