利用MATLAB实现遗传算法和MATLAB神经网络工具箱的使用

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验一利用MATLA实现遗传算法

一、实验目的

1、熟悉MATLA语言编程环境

2、掌握MATLA语言命令

3、学会利用MATLA编程实现遗传算法

二、实验原理

MATLA是美国Math Works公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,MATLA可以进

行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计等领域。通过学习遗传算法原理,使用 MATLA编写程序,实现其求解策略。

三、实验内容

通过MATLA编程,利用遗传算法求解:

f (x) 200exp( 0.05x)sin(x), 求maxf (x),x [-2,2] .

三、实验要求

1 、程序设计

2、调试

3、实验结果

4、撰写实验报告

实验二MATLAB申经网络工具箱的使用

一、实验目的

1、掌握MATLA语言命令

2、提高MATLA程序设计能力

3、学会使用MATLA申经网络工具箱

二、实验原理

MATLA语言是Math Works公司推出的一套高性能计算机编程语言,集数学计算、图形显示、语言设计于一体,其强大的扩展功能为用户提供了广阔的应用空间。它附带有 30多个工具箱,申经网络工具箱就是其中之一。利用该工具箱可以方便的构建申经网络的结构模型、设计、训练等,实现申经网络算法。

三、实验内容

通过MATLA编程,利用神经网络工具箱预测公路运量:

公路运量主要包括公路客运量和公路货运量两个方面。据研究,某地区的公路运量主要与该地区的人数、机动车数量和公路面积有关,上表给出了该地区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

IfCroIfMut.m

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

%子程序:判断遗传运算是否需要进行交叉或变异,函数名称存储为 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);

涯程序:用遗传算法求解y=200*exp (-0.05*x ) .*sin (x)在[-2 2]区间上的最大值

clc;

clear all;

close all;

global BitLength

global boundsbegin

global boundsend

bounds=[-2 2];

precision=0.0001;

boundsbegin=bounds(:,1); boundsend=bounds(:,2);

BitLength=cell(log2((boundsend-boundsbegin)'./precision));

popsize=50;

Generationnmax=12; pcrossover=0.90;

pmutation=0.09; population=round(rand(popsize,BitLength));

[Fitvalue,cumsump]=fitnessfun(population);

cumsump Generation=1;

while Generation

for j=1:2:popsize seln=selection(population,cumsump);

scro=crossover(popuoation,seln,pcrossover);

scnew(j,:)=scro(1,:); scnew(j+1,:)=scro(2,:);

smnew(j,:)=mutation(scnew(j,:),pmutation); smnew(j+1,:)=mutation(scnew(j+1,:),pmutation); end

相关文档
最新文档