遗传算法实例求助fortran语言编写的混合遗传算法例子那位大哥大姐有?

遗传算法实例  时间:2021-05-31  阅读:()

关于遗传算法选择概率的和的计算过程——数学达人请进!

首先y=x*x在[0,31]这个函数的极值是取31的时候,用遗传算法来解答这样的问题是有点多余的。

遗传算法的主要步骤是4步,初始化种群,选择,交叉,变异。

这里说的淘汰函数,很可能就是在选择选择算子,这个算子是根据最适合最优先的算法来实现。

举个简单的例子,你要用数字进行遗传算法,肯定得把他转化为2进制的染色体,【0-31】就是从00000-11111,每条染色体5个基因。

对于选择运算来说,每次要从种群选择最优的几个,第一次完全是随机的。

假如随机选4个染色体,选的4条染色体是1,2,3,4。

很明显他们的值是1,4,9,16,总和是30,那么选择4的概率就是30分之16,这样就可以尽可能的选择大的数值。

这里的淘汰域3,可能是每次淘汰3条染色体,或者每次只选择3条最优的染色体,视其选择的条数而定。

我看在程序里没有用到这个东西。

遗传算法以及进化算法不限定于特殊的程序,每个人有不同的理解,不必拘泥于概念。

遗传算法的程序应用,最好举例说明。

这种很主流的算法能搜到很多。

比如遗传算法合集,包括遗传算法简介、研究热点、著作、站点、参考论文下载等: /ai/work/ic-algorithm.html 看之前记得打开杀毒软件跟防火墙。

遗传算法有什么经典应用?

遗传算法(ic Algorithm)是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法。

遗传算法是从代表问题可能潜在的解集的一个种群(population)开始的,而一个种群则由经过基因(gene)编码的一定数目的个体(individual)组成。

每个个体实际上是染色体(chromosome)带有特征的实体。

染色体作为遗传物质的主要载体,即多个基因的集合,其内部表现(即基因型)是某种基因组合,它决定了个体的形状的外部表现,如黑头发的特征是由染色体中控制这一特征的某种基因组合决定的。

因此,在一开始需要实现从表现型到基因型的映射即编码工作。

求一个基本遗传算法的MATLAB代码

我发一些他们的源程序你,都是我在文献中搜索总结出来的: % 下面举例说明遗传算法 % % 求下列函数的最大值 % % f(x)=10*sin(5x)+7*cos(4x) x∈32313133353236313431303231363533e4b893e5b19e31333262356661[0,10] % % 将 x 的值用一个10位的二值形式表示为二值问题,一个10位的二值数提供的分辨率是每为 (10-0)/(2^10-1)≈0.01 。

% % 将变量域 [0,10] 离散化为二值域 [0,1023], x=0+10*b/1023, 其中 b 是 [0,1023] 中的一个二值数。

% % % %--------------------------------------------------------------------------------------------------------------% %--------------------------------------------------------------------------------------------------------------% % 编程 %----------------------------------------------- % 2.1初始化(编码) % initpop.m函数的功能是实现群体的初始化,popsize表示群体的大小,chromlength表示染色体的长度(二值数的长度), % 长度大小取决于变量的二进制编码的长度(在本例中取10位)。

%遗传算法子程序 %Name: initpop.m %初始化 function pop=initpop(popsize,chromlength) pop=round(rand(popsize,chromlength)); % rand随机产生每个单元为 {0,1} 行数为popsize,列数为chromlength的矩阵, % roud对矩阵的每个单元进行圆整。

这样产生的初始种群。

% 2.2.2 将二进制编码转化为十进制数(2) % decodechrom.m函数的功能是将染色体(或二进制编码)转换为十进制,参数spoint表示待解码的二进制串的起始位置 % (对于多个变量而言,如有两个变量,采用20为表示,每个变量10为,则第一个变量从1开始,另一个变量从11开始。

本例为1), % 参数1ength表示所截取的长度(本例为10)。

%遗传算法子程序 %Name: decodechrom.m %将二进制编码转换成十进制 function pop2=decodechrom(pop,spoint,length) pop1=pop(:,spoint:spoint+length-1); pop2=decodebinary(pop1); % 2.4 选择复制 % 选择或复制操作是决定哪些个体可以进入下一代。

程序中采用赌轮盘选择法选择,这种方法较易实现。

% 根据方程 pi=fi/∑fi=fi/fsum ,选择步骤: % 1) 在第 t 代,由(1)式计算 fsum 和 pi % 2) 产生 {0,1} 的随机数 rand( .),求 s=rand( .)*fsum % 3) 求 ∑fi≥s 中最小的 k ,则第 k 个个体被选中 % 4) 进行 N 次2)、3)操作,得到 N 个个体,成为第 t=t+1 代种群 %遗传算法子程序 %Name: selection.m %选择复制 function [newpop]=selection(pop,alue) totalfit=sum(alue); %求适应值之和 alue=alue/totalfit; %单个个体被选择的概率 alue=cumsum(alue); %如 alue=[1 2 3 4],则 cumsum(alue)=[1 3 6 10] [px,py]=size(pop); ms=sort(rand(px,1)); %从小到大排列 fitin=1; newin=1; while newin<=px if(ms(newin))<alue(fitin) newpop(newin)=pop(fitin); newin=newin+1; else fitin=fitin+1; end end % 2.5 交叉 % 交叉(crossover),群体中的每个个体之间都以一定的概率 pc 交叉,即两个个体从各自字符串的某一位置 % (一般是随机确定)开始互相交换,这类似生物进化过程中的基因分裂与重组。

例如,假设2个父代个体x1,x2为: % x1=0100110 % x2=1010001 % 从每个个体的第3位开始交叉,交又后得到2个新的子代个体y1,y2分别为: % y1=0100001 % y2=1010110 % 这样2个子代个体就分别具有了2个父代个体的某些特征。

利用交又我们有可能由父代个体在子代组合成具有更高适合度的个体。

% 事实上交又是遗传算法区别于其它传统优化方法的主要特点之一。

%遗传算法子程序 %Name: crossover.m %交叉 function [newpop]=crossover(pop,pc) [px,py]=size(pop); newpop=ones(size(pop)); for i=1:2:px-1 if(rand<pc) cpoint=round(rand*py); newpop(i,:)=[pop(i,1:cpoint),pop(i+1,cpoint+1:py)]; newpop(i+1,:)=[pop(i+1,1:cpoint),pop(i,cpoint+1:py)]; else newpop(i,:)=pop(i); newpop(i+1,:)=pop(i+1); end end % 2.6 变异 % 变异(mutation),基因的突变普遍存在于生物的进化过程中。

变异是指父代中的每个个体的每一位都以概率 pm 翻转,即由“1”变为“0”, % 或由“0”变为“1”。

遗传算法的变异特性可以使求解过程随机地搜索到解可能存在的整个空间,因此可以在一定程度上求得全局最优解。

%遗传算法子程序 %Name: mutation.m %变异 function [newpop]=mutation(pop,pm) [px,py]=size(pop); newpop=ones(size(pop)); for i=1:px if(rand<pm) mpoint=round(rand*py); if mpoint<=0 mpoint=1; end newpop(i)=pop(i); if any(newpop(i,mpoint))==0 newpop(i,mpoint)=1; else newpop(i,mpoint)=0; end else newpop(i)=pop(i); end end 很多哈,也很麻烦,但是设计程序就是如此!得耐心点才行。

最近又作了些总结,要有兴趣百度HI我吧。

我有M文件,运行成功

求助fortran语言编写的混合遗传算法例子那位大哥大姐有?

#include<iostream.h> #include<stdio.h> #include<stdlib.h> #include<math.h> #define MaxGen 30 #define chrom_length 4 #define PopSize 20 #define Upper_Num 5 #define Down_Num 6 #define Point_Num 11 #define INFINITY 9999 #define pc 0.6 #define pm 0.05 #define E 2.78 double d=2,l=10; double weight=0.5; int gen; struct individual{ int chrom[chrom_length]; double value; double fitness; }; struct Point{ double x; double y; }m_point[Point_Num]={{0,0},{d,0},{2*d,0},{3.5*d,0},{5*d,0}, {2*d,l},{3*d,l},{4*d,l},{0,l+d},{d,l+d},{5*d,l+d}}; double best=INFINITY; int Best[chrom_length]; struct individual population[PopSize]; double Upper_Array[Upper_Num][35]={ 4,3,2,3,4,4,3,1,3,4,2,1,0,1,2,3.5,5,17,15,15,14,12,13,13,15,9,10,11,12,13,13,11,13,10,12,5,4,3,4,5,5,4,2,2,3,3,2,1,0,1,2.5,4,16,14,14,13,11,12,12,14,8,9,10,11,12,12,10,12,9,11,6,5,4,5,4,6,5,3,3,2,4,3,2,1,0,1.5,3,15,13,13,17,10,11,11,13,7,8,9,10,11,11,9,11,8,10, 7.5,6.5,5.5,6.5,5.5,7.5,6.5,4.5,4.5,3.5,5.5,4.5,3.5,2.5, 1.5,0,1.5,13.5,11.5,11.5,10.5,8.5,9.5,9.5,11.5,5.5,6.5,7.5,8.5,9.5,9.5,7.5,9.5,6.5,8.5,9,8,7,6,5,9,8,6,6,5,7,6,5,4,3,1.5,0,12,10,10,9,7,8,8,10,4,5,6,7,8,8,6,8,5,7 }; double Down_Array[Down_Num][12]={ 0,2,4,4,3,2,3,4,5,8.47214,8,6, 2,0,2,5,4,3,2,3,4,9.47214,9,7, 4,2,0,6,5,4,3,2,3,10.47214,10,8, 4,5,6,0,1,2,3,4,5,4.47214,4,2, 3,4,5,1,0,1,2,3,4,5.47214,5,3, 5,4,3,5,4,3,2,1,0,9.47214,9,7 }; int murr(int n){ int i,sum=1; for(i=n;i>0;i--) sum*=i; return sum; } double min(double x,double y){ return (x>y?y:x); } double length(double x1,double y1,double x2,double y2){ return (sqrt(pow((x1-x2),2)+pow((y1-y2),2))); } double max(double x,double y){ return(x>y?x:y); } void Gener_Init(){//初始化 int i,j; for(i=0;i<PopSize;i++) { do { for(j=0;j<chrom_length;j+=2) population[i].chrom[j]=rand()%5; }while(population[i].chrom[0]==population[i].chrom[2]); do{ for(j=1;j<chrom_length;j+=2) population[i].chrom[j]=rand()%6; }while(population[i].chrom[1]==population[i].chrom[3]); } } void Add_Value(){//目标函数 int i,j,t1,t2,t3,t4; double Umin_Value,Dmin_Value; double l1,l2; for(i=0;i<PopSize;i++){ Umin_Value=0; Dmin_Value=0; for(j=0;j<35;j++) Umin_Value+=min(Upper_Array[population[i].chrom[0]][j], Upper_Array[population[i].chrom[2]][j]); for(j=0;j<12;j++) Dmin_Value+=min(Down_Array[population[i].chrom[1]][j], Down_Array[population[i].chrom[3]][j]); t1=population[i].chrom[0]; t2=population[i].chrom[1]+5; t3=population[i].chrom[2]; t4=population[i].chrom[3]+5; l1=length(m_point[t1].x, m_point[t1].y, m_point[t2].x, m_point[t2].y); l2=length(m_point[t3].x, m_point[t3].y, m_point[t4].x, m_point[t4].y); population[i].value=weight*(Umin_Value+Dmin_Value)+(1-weight)*(l1+l2)*100; } } void selection(){//选择 int i,index; double p,temp=0,total=0; double cfitness[PopSize]; struct individual newpopulation[PopSize]; for(i=0;i<PopSize;i++){ temp=max(population[i].value,temp); total+=population[i].value; } temp+=100; for(i=0;i<PopSize;i++){ population[i].fitness=(temp-population[i].value)/(PopSize*temp-total); cfitness[i]=population[i].fitness; } for(i=1;i<PopSize;i++) cfitness[i]+=cfitness[i-1]; for(i=0;i<PopSize;i++){ p=rand()%1000/1000.0; index=0; while(p>cfitness[index]) index++; newpopulation[i]=population[index]; } for(i=0;i<PopSize;i++){ population[i]=newpopulation[i]; } } void Crossing(){// int i,j;// int index[PopSize],temp,point; double p; for(i=0;i<PopSize;i++) index[i]=i; for(i=0;i<PopSize;i++){ point=rand()%(PopSize-i); temp=index[i]; index[i]=index[point+i]; index[point+i]=temp; } for(i=0;i<PopSize;i+=2){ p=rand()%1000/1000.0; if(p<pc){ point=rand()%2; if(point==0) for(j=0;j<chrom_length;j+=2) { temp=population[index[i]].chrom[j]; population[index[i]].chrom[j] =population[index[i+1]].chrom[j]; population[index[i+1]].chrom[j]=temp; } else for(j=1;j<chrom_length;j+=2) { temp=population[index[i]].chrom[j]; population[index[i]].chrom[j] =population[index[i+1]].chrom[j]; population[index[i+1]].chrom[j]=temp; } } } } void Muta_Opeator(){// int i,j,s,q; double p; for(i=0;i<PopSize;i++) for(j=0;j<chrom_length;j++){ p=rand()%1000/1000.0; if(p<pm){ q=rand()%4; switch(q){ case 0: s=rand()%5; while(s==population[i].chrom[2]) s=rand()%5; population[i].chrom[q]=s; break; case 1: s=rand()%6; while(s==population[i].chrom[3]) s=rand()%6; population[i].chrom[q]=s; break; case 2: s=rand()%5; while(s==population[i].chrom[0]) s=rand()%5; population[i].chrom[q]=s; break; case 3: s=rand()%6; while(s==population[i].chrom[1]) s=rand()%6; population[i].chrom[q]=s; break; } } } } void print(){ int i,temp=-1; double average,sum=0; cout<<endl; for(i=0;i<PopSize;i++) sum+=population[i].value; average=sum/PopSize; for(i=0;i<PopSize;i++){ if(best>=population[i].value){ best=population[i].value; temp=i; } } if(temp!=-1){ for(i=0;i<chrom_length;i++) Best[i]=population[temp].chrom[i]; } cout<<"Generation="<<gen<<" Average="<<average <<" Best_Value="<<best<<endl; cout<<"Best_Chrom"; for(i=0;i<chrom_length;i++) cout<<Best[i]<<" "; cout<<endl; } void main(){ int q=5,k; double p[35],sum; int i,j; do{ for(i=0;i<35;i++){ k=rand()%(3*q); p[i]=pow(q,k)*pow(E,-1*q)/(murr(k)); sum+=p[i];} }while(sum==1.0); for(i=0;i<Upper_Num;i++) for(j=0;j<35;j++) Upper_Array[i][j]*=p[j]; do{ for(i=0;i<12;i++){ k=rand()%(3*q); p[i]=pow(q,k)*pow(E,-1*q)/(murr(k)); sum+=p[i];} }while(sum==1.0); for(i=0;i<Down_Num;i++) for(j=0;j<12;j++) Down_Array[i][j]*=p[j]; gen=0; Gener_Init(); while(gen<MaxGen){ Add_Value(); print(); selection(); Crossing(); Muta_Opeator(); // print(); gen++; } }

HaloCloud:日本软银vps100M/200M/500M带宽,,¥45.00元/月

halocloud怎么样?halocloud是一个于2019下半年建立的商家,主要提供日本软银VPS,广州移动VDS,株洲联通VDS,广州移动独立服务器,Halo邮局服务,Azure香港1000M带宽月抛机器等。日本软银vps,100M/200M/500M带宽,可看奈飞,香港azure1000M带宽,可以解锁奈飞等流媒体,有需要看奈飞的朋友可以入手!点击进入:halocloud官方网站地址日本vp...

提速啦:美国多IP站群云服务器 8核8G 10M带宽 7IP 88元/月

提速啦(www.tisula.com)是赣州王成璟网络科技有限公司旗下云服务器品牌,目前拥有在籍员工40人左右,社保在籍员工30人+,是正规的国内拥有IDC ICP ISP CDN 云牌照资质商家,2018-2021年连续4年获得CTG机房顶级金牌代理商荣誉 2021年赣州市于都县创业大赛三等奖,2020年于都电子商务示范企业,2021年于都县电子商务融合推广大使。资源优势介绍:Ceranetwo...

pacificrack:$12/年-1G内存/1核/20gSSD/500g流量/1Gbps带宽

pacificrack在最新的7月促销里面增加了2个更加便宜的,一个月付1.5美元,一个年付12美元,带宽都是1Gbps。整个系列都是PR-M,也就是魔方的后台管理。2G内存起步的支持Windows 7、10、Server 2003\2008\2012\2016\2019以及常规版本的Linux!官方网站:https://pacificrack.com支持PayPal、支付宝等方式付款7月秒杀VP...

遗传算法实例为你推荐
短信通道客户要我开通短信通道,他来租用,可行吗?chinapaychinapay是什么垃圾东西!自动识别查询快递单号怎样在网上查快递单号csonline2反恐精英online2什么时候出mac地址克隆怎么克隆MAC地址?cpu监控电脑硬件监控软件有哪些?webproxy无法连接Internet是什么原因y码S`M`XXL`L`XL身高体重分别是多少?视频技术视频编辑是干什么的,主要是做一些什么工作呢?这个职位好不好?发展前景怎么样?华为总裁女儿为啥姓孟任正非女儿为什么姓孟?
cybermonday fastdomain 加勒比群岛 vultr美国与日本 光棍节日志 本网站服务器在美国 中国智能物流骨干网 架设服务器 大容量存储器 100mbps gtt 国外ip加速器 德隆中文网 镇江高防 空间服务器 中国联通宽带测试 什么是dns 机柜尺寸 中国域名根服务器 西部主机 更多