利用MATLAB实现遗传算法和MATLAB神经网络工具箱的使用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一利用MATLAB实现遗传算法
一、实验目的
1、熟悉MATLAB语言编程环境
2、掌握MATLAB语言命令
3、学会利用MATLAB编程实现遗传算法
二、实验原理
MATLAB是美国Math Works公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计等领域。通过学习遗传算法原理,使用MATLAB编写程序,实现其求解策略。
三、实验内容
通过MATLAB编程,利用遗传算法求解:
x
x
=求[-2,2]
f-
)
(
f.
x
,
max∈
ex p
05
x
sin(
),
.0
)
(x
)
200
(
三、实验要求
1、程序设计
2、调试
3、实验结果
4、撰写实验报告
实验二 MATLAB神经网络工具箱的使用
一、实验目的
1、掌握MATLAB语言命令
2、提高MATLAB程序设计能力
3、学会使用MATLAB神经网络工具箱
二、实验原理
MATLAB语言是Math Works公司推出的一套高性能计算机编程语言,集数学计算、图形显示、语言设计于一体,其强大的扩展功能为用户提供了广阔的应用空间。它附带有30多个工具箱,神经网络工具箱就是其中之一。利用该工具箱可以方便的构建神经网络的结构模型、设计、训练等,实现神经网络算法。
三、实验内容
通过MATLAB编程,利用神经网络工具箱预测公路运量:
公路运量主要包括公路客运量和公路货运量两个方面。据研究,某地区的公路运量主要与该地区的人数、机动车数量和公路面积有关,上表给出了该地区20年的公路运量相关数据。根据有关部门数据,该地区2010和2011年的人数分别为73.39和75.55万人,机动车数量分别为3.9635和4.0975万辆,公路面积分别为0.9880和1.0268万平方千米。请利用BP网络预测该地区2010和2011年的公路客运量和公路货运量。
某地区20年公路运量数据
三、实验要求
1、程序设计
2、调试
3、实验结果
4、撰写实验报告
运用遗传算法求解函数最大值:
所有的子程序为M文件
%子程序:计算适应度函数,函数名称存储为fitnessfu.m
function[Fitvalue,sumsump]=fitnessfun(population);
global BitLength
global boundsbegin
global boundsend
popsize=size(population,1);
for i=1:popsize
x=transform2to10(population(i,:));
xx=boundsbegin+x*(boundsend-boundsbegin)/(power((boundsend),BitLength)-1); Fitvalue(i)=targetfun(xx);
end
Fitvalue(i)=Fitvalue'+230;
fsum=sum(Fitvalue);
Pperpopulation=Fitvalue/fsum;
cumsump(1)=Pperpopulation(1);
for i=2:popsize
cumsump(i)=cumsumo(i-1)+Pperpopulation(i);
end
cumsump=cumsump';
%子程序:新种群交叉操作,函数名称存储为crossover.m
function scro=crossover(population,seln,pc)
BitLength=size(population,2);
pcc=IfCroIfMut(pc);
if pcc==1
chb=round(rand*(BitLength-2))+1;
scro(1,:)=[population(seln(1),1:chb),population(seln(2),chb+1:BitLength)];
scro(2,:)=[population(seln(2),1:chb),population(seln(1),chb+1:BitLength)]; else
scro(1,:)=population(seln(1),:);
scro(2,:)=population(seln(2),:);
end
%子程序:新种群变异操作,函数名称存储为mutation.m
function snnew=mutation(snew,pmutation);
BitLength=size(snew,2);
snnew=snew;
pmm=IfCroIfMut(pmutation);
if pmm==1
chb=round(rand*(BitLlength-1))+1;
end
%子程序:判断遗传运算是否需要进行交叉或变异,函数名称存储为IfCroIfMut.m function pcc=IfCroIfMut(mutORcro);
test(1:100)=0;
1=round(100*mutORcro);
test(1:1)=1;
n=round(rand*99)+1;
pcc=test(n);
%子程序:新种群选择操作,函数名称存储为selection.m
function seln=selection(population,cumsump);
for i=1:2
r=rand;
prand=cumsump-r;
j=1;
whlie prand(j)<0
j=j+1;
end
seln(i)=j;
end
%子程序:将二进制数转换为十进制数,函数名称存储为transform2to10.m function x=transform2to10(Population);
BitLength=size(Population,2);
x=Population(BitLength);
for i=1:BitLength-1
x=x+Population(BitLength-i)*power(2,i);
end
%子程序:对于优化最大值或者极大值函数问题,目标函数可以作为适应度函数,%函数名称存储为targetfun.m
function
y=targetfun(x);
y=200*exp(-0.05*x).*sin(x);