遗传算符MATLAB程序-入门必看

上传人:cn****1 文档编号:552774790 上传时间:2023-08-04 格式:DOC 页数:47 大小:233.50KB
返回 下载 相关 举报
遗传算符MATLAB程序-入门必看_第1页
第1页 / 共47页
遗传算符MATLAB程序-入门必看_第2页
第2页 / 共47页
遗传算符MATLAB程序-入门必看_第3页
第3页 / 共47页
遗传算符MATLAB程序-入门必看_第4页
第4页 / 共47页
遗传算符MATLAB程序-入门必看_第5页
第5页 / 共47页
点击查看更多>>
资源描述

《遗传算符MATLAB程序-入门必看》由会员分享,可在线阅读,更多相关《遗传算符MATLAB程序-入门必看(47页珍藏版)》请在金锄头文库上搜索。

1、Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-date遗传算符MATLAB程序-入门必看轮盘赌算法% 下面举例说明遗传算法 % 求下列函数的最大值 % f(x)=10*sin(5x)+7*cos(4x) x0,10 % 将 x 的值用一个 10 位的二值形式表示为二值问题,一个 10 位的二值数提供的分辨率是每为 (10-0)/(210-1)0.01 。 % 将变量域 0,10 离散化为二值域 0,1023, x=0+1

2、0*b/1023, 其中 b 是 0,1023 中的一个二值数。 % M文件函数定义语句: function 输出变量=函数名称(输入变量1,输入变量2,) 语句; %输入变量与输出变量的关系 end; %非必须的 例如: function c=myadd(a,b) c=a+b; 调用方式: c=myadd(1,2) % 输出结果为c=a+b=1+2=3% 2.1 初始化(编码)% initpop.m 函数的功能是实现群体的初始化,popsize 表示群体的大小,chromlength 表示染色体的长度(二值数的长度),% 长度大小取决于变量的二进制编码的长度(在本例中取10位)。%遗传算法子

3、程序%Name: initpop.m (实现群体的初始化)%初始化function pop=initpop(popsize,chromlength) %定义M文件函数(实现种群初始化的函数)pop=round(rand(popsize,chromlength); % rand()随机产生函数。rand 随机产生每个单元为 0,1 行数为 popsize,列数为 chromlength 的矩阵,此式子为输出变量pop与输入变量popsize和chromlength的关系式。% round 对矩阵的每个单元进行圆整,round函数的作用是按指定的位数对数值进行四舍五入。这样产生的初始种群。% r%

4、 2.2 计算目标函数值% 2.2.1 将二进制数转化为十进制数(1)%遗传算法子程序%Name: decodebinary.m %产生 2n 2(n-1) . 1 的行向量,然后求和,将二进制转化为十进制function pop2=decodebinary(pop) %定义M文件函数(将二进制数转化为十进制数的函数)px,py=size(pop); %求pop的行数和列数。px为种群数,染色体的长度为pyfor i=1:py pop1(:,i)=2.(py-i).*pop(:,i); %pop1(:,i)表示pop1矩阵的第i列全部元素endpop2=sum(pop1,2); %求 pop1

5、 的每行之和 %matlab中sum()函数的用法%a=sum(x); %对x矩阵的列求和 a=sum(x,2); %对x矩阵的行求和 a=sum(x(:); %x矩阵的所有元素求和%A(:,j)表示提取A矩阵的第j列全部元素 A(i,:)表示提取A矩阵的第i行元素, A(i, j)表示提取A矩阵的第i行第j列的元素。% 2.2.2 将二进制编码转化为十进制数(2)% decodechrom.m 函数的功能是将染色体(或二进制编码) 的特定位置转换为十进制,参数 spoint 表示待解码的二进制串的起始位置% (对于多个变量而言,如有两个变量,采用 20 为表示,每个变量 10 为,则第一个变

6、量从1 开始,另一个变量从 11 开始。本例为 1),% 参数 1ength 表示所截取的长度(本例为 10)。%遗传算法子程序%Name: decodechrom.m(将染色体二进制编码转换成十进制)function pop2=decodechrom(pop,spoint,length) %参数 spoint 表示待解码的二进制串的起始位置pop1=pop(:,spoint:spoint+length-1); %提取矩阵pop的第spoint到spoint+length-1列,形成一个新矩阵pop1。pop2=decodebinary(pop1); %解二进制码% 2.2.3 计算目标函数值

7、% calobjvalue.m 函数的功能是实现目标函数的计算,其公式采用本文示例仿真,可根据不同优化问题予以修改。%遗传算法子程序%Name: calobjvalue.m%实现目标函数的计算function objvalue=calobjvalue(pop)temp1=decodechrom(pop,1,10); %将pop每行转化成十进制数,1代表待解码的二进制串起始位置,10代表截取的长度x=temp1*10/1023; %将二值域中的数转化为变量域的数objvalue=10*sin(5*x)+7*cos(4*x); %计算目标函数值% 2.3 计算个体的适应值%遗传算法子程序%Name

8、:calfitvalue.m%计算个体的适应值% A=3 4 2;1 5 3;4 7 1 A = 3 4 2 1 5 3 4 7 1 A(1)=3;A(2) =1;A(3)=4;A(4)=4;A(5)=5%根据2.2.3计算出的目标函数值计算个体的适应值function fitvalue=calfitvalue(objvalue) %定义函数 global Cmin; %global表示全局Cmin=0;px,py=size(objvalue); % objvalue为列向量矩阵for i=1:px if objvalue(i)+Cmin0 % objvalue(i)表示矩阵objvalue的

9、第i个元素(从上往下数)temp=Cmin+objvalue(i);elsetemp=0.0;endfitvalue(i)=temp; %列向量矩阵 fitvalue为px个循环中temp的值构成的。endfitvalue=fitvalue; %运算符表示向量的复共轭,最终的fitvalue为行向量矩阵% 2.4 选择复制其算法为:设置选择算法执行次数 j=0在区间(0, totalFitness)内产生一随机数rands,totalFitness表示种群个体适应度之和i=0,sum=0;其中i表示第i个个体,sum表示0 i的个体的适应度值之和sum = sum +fitness(i) ,如

10、果 sumrands,转;否则转i+,转返回第 i 个个体indivalsij+,如果 j = 个体总数 totalIndavial,选择操作结束,否则转% 选择或复制操作是决定哪些个体可以进入下一代。程序中采用赌轮盘选择法选择,这种方法较易实现。% 根据方程pi=fi/fi=fi/fsum(fsum表示总概率和,一般设为1),选择步骤:% 1)在第t代,由(1)式计算 fsum和pi% 2)产生0,1 的随机数 rand( .),求 s=rand( .)*fsum% 3)求fis中最小的k,则第k个个体被选中% 4)进行N次 2)、3)操作,得到N个个体,成为第t=t+1代种群%遗传算法子程

11、序%Name: selection.m%选择复制% A=1 2 3;4 5 6 A = 1 2 3 4 5 6 cumsum(A)ans = 1 2 3 5 7 9 B=1 2 3; cumsum(B)ans = 1 3 6% rand(m,n) 表示产生m*n矩阵,rand(m,n,p) 表示产生p个m*n矩阵,rand(m,n,p,q) 表示产生p*q个m*n矩阵%function newpop=selection(pop,fitvalue) %定义选择函数, 有没有都可。totalfit=sum(fitvalue); %求适应值之和fitvalue=fitvalue/totalfit;

12、%适应值=单个个体被选择的概率fitvalue=cumsum(fitvalue);%fitvalue为行向量矩阵,cumsum(fitvalue)表示元素依次累加的新行矩阵。px,py=size(pop); % px为种群数,染色体的长度为pyms=sort(rand(px,1); %sort( ) 从小到大排列。rand(px,1)是任意产生px个元素的行向量矩阵。i=1;j=1; while j=px if(ms(j)fitvalue(i) %ms为产生的随机的行矩阵;fitvalue为元素依次累加的新的行矩阵。 newpop(j)=pop(i); % newpop( )为输出函数,pop

13、为初始种群2.1中。 j=j+1; else i=i+1; end end% 2.5 交叉交叉算法步骤可描述为:设置交叉次数 j=0;在群体的范围内随机产生两个整数,其值在区间 1,totalIndival 之间产生一个随机数randc,randc0,1若rands pc,不执行交叉操作,直接转 随机产生在区间0,indavalLength内的整数crossSite作为交叉点,执行交叉操作j+;如果 j countIndival/2,终止交叉操作,否则转2% 交叉(crossover),群体中的每个个体之间都以一定的概率 pc 交叉,即两个个体从各自字符串的某一位置% (一般是随机确定)开始互

14、相交换,这类似生物进化过程中的基因分裂与重组。例如,假设 2 个父代个体 x1,x2 为:% x1=0100110% x2=1010001% 从每个个体的第 3 位开始交叉,交又后得到 2 个新的子代个体 y1,y2 分别为:% y10100001% y21010110% 这样2个子代个体就分别具有了 2 个父代个体的某些特征。利用交又我们有可能由父代个体在子代组合成具有更高适合度的个体。%事实上交又是遗传算法区别于其它传统优化方法的主要特点之一。%遗传算法子程序%Name: crossover.m%交叉%pc交叉概率,交叉概率过大( 0.75-1 ),高适应值的个体容易被破坏,交叉率过小 (0-0.25) ,算法退化成随机搜索,合适的范围在 0.25-0.75 之间。function newpop=crossover(pop,pc)px,py=size

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号