您的位置 首页 游戏问答

遗传算法matlab程序代码(遗传算法简单易懂的例子)

怎样用matlab实现遗传算法?

f=inline(‘-(x+10*sin(5*x)+7*cos(4*x))’);[x,val]=ga(f,1,[],[],[],[],0,9);x,val=-val%注:由于遗传法的不确定性,每次得到的解可能不同。 ————————————————————————————————ga是matlab自带的遗传工具箱中的遗传算法函数,其中已经用到了选择、交叉、变异,你如果想知道其具体是怎么实现的,可以自己打开ga的源程序去看。

什么叫遗传算法,遗传算法有什么用?希望通俗一点儿?

首先有个很神奇的现象:人类以及动物的进化都是朝着好的方向发展,虽然有的往坏的方向发展了,但是总体肯定是往好的方向发展。

这看似不奇怪,但是我们知道,人类的基因组合是随机的,没有上帝约束。这种随机过程的结果却是一致的!!!!!我们的遗传算法就是从这里得到启发!比如我要求y=x1+x2的最大值,两个变量,我不用传统的数学方法,就用幼儿园的方法,把所有可能取值带进去算,然后找出最大的就行了!但是,有时候取值是连续的,没关系!使其离散化,就像把模拟信号化成数字信号一样!还有个问题,如果取值太多咋办?这就是遗传算法的精髓! 首先,我不用取所有可能取值,我只取几十个或者几百个(自己定),然后进行处理,怎样处理呢?让我们回到刚开始的人类进化问题,虽然没有上帝的帮忙,但是我们知道,自然界遵循优胜劣汰的发贼,遵循交叉变异的法则,虽然不能数字化,但是这是个趋势!我们就是把这种法则数学化!所取的几十个值我要剩下哪些?要抛弃哪些?要处理哪些?这都要我们自己选择,肯定是选择最合适的取值留下,经过一系列的处理,就生成了新的群体,然后再处理,自己约定处理到第几次就可以了,取出现过的最大值 不用担心取到的是不是最大值,因为数学上已经有了证明,这种方法是收敛的,概率是1,所以尽管放心的做,具体的做法要参考相关书籍,不难的。遗传算法的最大用处就是解决数学理论不能解决的问题!比如路径规划,调度问题……

求一个matlab的遗传算法程序

  • 自学遗传算法程序,感觉文库上找到的都不怎么会用,求大神呀
  • 先看这个结构里面的这些函数都是干什么用的,prob,概率。[1:keep],这里应该能大概看出来keep是整数,1:keep 等价于1:1:keep,比如1:10,就是1,2,3,4,5,6,7,8,9,10。步长为1,从1到keep.右上角的,这个符号,表示转置,比如1:10,是一个1行10列的矩阵,通过转置变成10行一列。其中,sum([1:keep]),表示对这个矩阵(从1到keep求和),但是这个语句 prob=flipud([1:keep]sum([1:keep])); 里面总觉得缺少了一个.。prob=flipud([1:keep].sum([1:keep])); 这样看来应该才能运行,我没尝试,在command window里面直接做是可以的,但是在脚本文件里面做,可能会报错。这个和矩阵运算有关,暂且放在这里。然后到外部,这样我们知道了在第一行flipud()函数体里面,实际上是在用1到keep的每一个数,除以1到keep的和值,得到一个长度为keep的矩阵。值得注意的是,这个矩阵的和值为1,在下面会用到这一点。然后flipud()函数的作用,是把矩阵倒置,比如[1,3,4,5],使用flipud()之后变成[5,4,3,1]。注意,这个操作和sort()函数不同,这个只是把以前的顺序倒置,并不排序。从这里大概可以看出来,其实这个keep的值,等于chromosomes,染色体数量。这样,对于不同的染色体,配对概率就不一样了。从这里可以看出来,染色体配对概率应该是第一条最高,然后依次递减。然后计算或然率,cumsum(),进行累加求和,比如matlab中给出的例子,我们用[1,2 ,3] 也可以写作1:3,来说,cumsum之后的结果是[1, 3, 6],也就是从第一个开始加和,一直加到这一项。这一点,非常类似高斯函数积分的感觉。用来计算概率cumulative distribution。然后odd变量,把0加在了cumsum结果的前面,比如刚刚的例子[0 cumsum([1, 2, 3])],就变成了[0, 1, 3,6]。注意这个地方他又转置了一次,因为在第一行计算prob的时候,他把一个行向量,转换成了列向量,然后现在要把0加在头上,所以在进行cumsun()运算的时候,又把结果从列向量转换成了行向量。仅从这两行代码里面,就大概只能看出这个意思了。不过简单一说,现在看不出来这个遗传算法的核心是什么样的,一般的神经网络里面只有连锁交换定律的应用,一般没有基因分离定律的应用。看这个样子,这是分离出来然后自由配对的做法,应该是比较高端的东西吧。

matlab的遗传算法程序

  • 【问题】在-5=Xi=5,i=1,2区间内,求解f(x1,x2)=-20*exp(-0.2*sqrt(0.5*(x1.^2+x2.^2)))-exp(0.5*(cos(2*pi*x1)+cos(2*pi*x2)))+22.71282的最小值。【要求】种群大小UnRegistered20,最大代数100,变异率0.1,交叉率0.7怎么做?急求。有个参考答案,不过要求不同【分析】种群大小10,最大代数1000,变异率0.1,交叉率0.3【程序清单】%源函数的matlab代码function[eval]=f(sol)numv=size(sol,2);x=sol(1:numv);eval=-20*exp(-0.2*sqrt(sum(x.^2)numv))-exp(sum(cos(2*pi*x))numv)+22.71282;%适应度函数的matlab代码function[sol,eval]=fitness(sol,options)numv=size(sol,2)-1;x=sol(1:numv);eval=f(x);eval=-eval;%遗传算法的matlab代码bounds=ones(2,1)*[-55];[p,endPop,bestSols,trace]=ga(bounds,fitness)注:前两个文件存储为m文件并放在工作目录下,运行结果为p=0.0000 -0.00000.0055大家可以直接绘出f(x)的图形来大概看看f(x)的最值是多少,也可是使用优化函数来验证。matlab命令行执行命令:fplot(x+10*sin(5*x)+7*cos(4*x),[0,9])evalops是传递给适应度函数的参数,opts是二进制编码的精度,termops是选择maxGenTerm结束函数时传递个maxGenTerm的参数,即遗传代数。xoverops是传递给交叉函数的参数。mutops是传递给变异函数的参数。
  • matlab自带的有遗传算法工具箱,也就是两个函数,分别是x = ga(fitnessfcn,nvars,A,b,Aeq,beq,LB,UB,nonlcon,options)options = gaoptimset(param1,value1,param2,value2,…)在帮助文件(doc gagaoptimset)里面自己好还看看它的用法就可以了,每一个参数都有详细的说明,应该可以帮助到你。

matlab 遗传算法中选择交叉变异的程序段 能请帮忙解释一下么?看不懂啊~~~超急的。解释得越详细越好啊

  • Ji=1.F;%****** Step 1 : Evaluate BestJ ******BestJ(k)=min(Ji);fi=F; %Fitness Function[Oderfi,Indexfi]=sort(fi); %Arranging fi small to biggerBestfi=Oderfi(Size); %Let Bestfi=max(fi)BestS=E(Indexfi(Size),:); %Let BestS=E(m), m is the Indexfi belong to max(fi)bfi(k)=Bestfi;%****** Step 2 : Select and Reproduct Operation****** fi_sum=sum(fi); fi_Size=(Oderfifi_sum)*Size; fi_S=floor(fi_Size); %Selecting Bigger fi value kk=1; for i=1:1:Size for j=1:1:fi_S(i) %Select and Reproduce TempE(kk,:)=E(Indexfi(i),:); kk=kk+1; %kk is used to reproduce end end %************ Step 3 : Crossover Operation ************pc=0.60;n=ceil(20*rand);for i=1:2:(Size-1) temp=rand; if pctemp %Crossover Condition for j=n:1:20 TempE(i,j)=E(i+1,j); TempE(i+1,j)=E(i,j); end endendTempE(Size,:)=BestS;E=TempE; %************ Step 4: Mutation Operation **************%pm=0.001;%pm=0.001-[1:1:Size]*(0.001)Size; %Bigger fi, smaller Pm%pm=0.0; %No mutationpm=0.1; %Big mutation for i=1:1:Size for j=1:1:2*CodeL temp=rand; if pmtemp %Mutation Condition if TempE(i,j)==0 TempE(i,j)=1; else TempE(i,j)=0; end end end end %Guarantee TempPop(30,:) is the code belong to the best individual(max(fi))TempE(Size,:)=BestS;E=TempE;end
  • 比例选择 单点交叉 01变异

我的matlab程序本身没问题,但是图却出不来?因为程序比较复杂,也贴不出来,主要就是用遗传算法

  • if chromosome(:,V + 3)==1 plot(chromosome(:,V + 1),chromosome(:,V + 2),*); end
  • 因为chromosome(:,V + 3)==1的值为0

求一个遗传算法解多元线性回归的MATLAB程序

  • MATLAB的遗传算法工具箱可以直接用吗,毕业设计卡在这里了!求高手详细解答!
  • 遗传算法一般是求解非线性回归,多元线性回归可采用回归分析工具箱

跪求遗传算法matlab程序

  • 额。。。这个应该去问老师

返回顶部