遗传算法实例求助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++; } }

弘速云香港VPSVPS线路有CN2+BGP、CN2 GIA,KVM虚拟化架构,裸金属月付564元

弘速云怎么样?弘速云是创建于2021年的品牌,运营该品牌的公司HOSU LIMITED(中文名称弘速科技有限公司)公司成立于2021年国内公司注册于2019年。HOSU LIMITED主要从事出售香港vps、美国VPS、香港独立服务器、香港站群服务器等,目前在售VPS线路有CN2+BGP、CN2 GIA,该公司旗下产品均采用KVM虚拟化架构。可联系商家代安装iso系统。点击进入:弘速云官方网站地址...

ReadyDedis:VPS全场5折,1G内存套餐月付2美元起,8个机房可选_服务器安装svn

ReadyDedis是一家2018年成立的国外VPS商家,由印度人开设,主要提供VPS和独立服务器租用等,可选数据中心包括美国洛杉矶、西雅图、亚特兰大、纽约、拉斯维加斯、杰克逊维尔、印度和德国等。目前,商家针对全部VPS主机提供新年5折优惠码,优惠后最低套餐1GB内存每月仅需2美元起,所有VPS均为1Gbps端口不限流量方式。下面列出几款主机配置信息。CPU:1core内存:1GB硬盘:25GB ...

Megalayer新加坡服务器国际带宽线路测评

前几天有关注到Megalayer云服务器提供商有打算在月底的时候新增新加坡机房,这个是继美国、中国香港、菲律宾之外的第四个机房。也有工单询问到官方,新加坡机房有包括CN2国内优化线路和国际带宽,CN2优化线路应该是和菲律宾差不多的。如果我们追求速度和稳定性的中文业务,建议还是选择CN2优化带宽的香港服务器。这里有要到Megalayer新加坡服务器国际带宽的测试服务器,E3-1230配置20M国际带...

遗传算法实例为你推荐
elemtypedef和Elem是什么意思?(数据结构)李智慧韩国艺人韩智慧最近的情况?企业资源管理系统企业管理系统都有什么功能chrome系统Chromenbsp;OS是操作系统吗?vga接口定义vga线有几种小四号字word里的小四号字在Photoshop里是指多少点字体?印度尼西亚国家代码谁知道世界各国的国家电话代码?天翼校园宽带天翼校园宽带 是怎么算时间的 一个月 是指从办理那天开始 往后 30天是一个月吗 还是 办理的那天所在的那个微信智能机器人有没有可以拉进微信群的聊天机器人papertiger亚瑟士 艾斯克斯 tiger有什么区别吗
google电话 精品网 wdcp 512m unsplash 圣诞节促销 京东商城双十一活动 河南m值兑换 老左来了 爱奇艺vip免费试用7天 四核服务器 如何注册阿里云邮箱 银盘服务是什么 web应用服务器 net空间 稳定空间 云服务是什么意思 乐视会员免费领取 双十二促销 阿里云邮箱怎么注册 更多