怎么用遗传算法求一函数的极小值,编写matlab程序。 需要很多的子函数子程序:新物种交叉操作,函数名称存储为crossover.mfunction scro=crossover(population,seln,pc);BitLength=size(population,2);pcc=IfCroIfMut(pc);根据交叉概率决定是否进行交叉操作,1则是,0则否if pcc=1chb=round(rand*(BitLength-2))+1;在[1,BitLength-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)]elsescro(1,:)=population(seln(1),:);scro(2,:)=population(seln(2),:);end子程序:计算适应度函数,函数名称存储为fitnessfun.mfunction[Fitvalue,cumsump]=fitnessfun(population);global BitLengthglobal boundsbeginglobal boundsendpopsize=size(population,1);有popsize个个体for i=1:popsizex=transform2to10(population(i,:));将二进制转换为十进制转化为[-2,2]区间的实数xx=boundsbegin+x*(boundsend-boundsbegin)/(power(2,BitLength)-1);Fitvalue(i)=targetfun(xx);计算函数值,即适应度end给适应度函数加上一个大小合理的数以便保证种群适应度值为正数Fitvalue=。
用MATLAB的遗传算法求极小值已知r,a两个未知量,经过中间复杂的过程得到目标y,y不连续、非线性,r=1:0.1:3,a=0:0.1:1.5,a
遗传算法陷入极小值问题
用MATLAB的遗传算法求极小值 你想自己编代码还是用Matlab的遗传算法工具箱?自己编代码的话,这样的问题应该可以通过二进制编码解决。
谁会用MATLAB遗传算法求函数y=(x2+1)/x1+x3^2*x2+x3^2+x3*x2的极小值 下载个GAOToolbox工具箱,很简单就实现了
遗传算法解决多元函数的问题,目标函数:一个含有30个变量的函数求极小值问题约束条件:每个变量均为0~100之间的自然数编码方式:我采用的是二进制编码,8位表示一个变量,那么每个可行解(染色体)即为240位的二进制数.遗传代数:200种群大小:100交叉概率:0.6变异概率:0.4运行结果很不理想,本人GA初学者,怎么样改进?编码设计是否合理?参数应该选择多少?或者提供一种您认为针对该问题适用的编码
matlab遗传算法求函数极小值!!!急!! 如果没有其他约束条件,直接用ga求解:fi=inline('-2.113-0.1326*x(1)+10.49*x(2)+0.1505*x(1)^2-2.924*x(1)*x(2)+10.11*x(2)^2','x');ga(fi,2,[],[],[],[],[0 18],[0.1 36])Optimization terminated:average change in the fitness value less than options.TolFun.ans=0.1000 18.0000即最小值在x=0.1、y=18处。直接画出函数的图像来,可以验证结论的正确性:ezmesh('-2.113-0.1326*x+10.49*y+0.1505*x^2-2.924*x*y+10.11*y^2',[0 0.1],[18 36])另外,从图中注意到,x 对f(x,y)的影响不大,但如果我们取y=18,画出f(x,18)的函数图像来:syms x yf=-2.113-0.1326*x+10.49*y+0.1505*x^2-2.924*x*y+10.11*y^2;y=18;ezplot(subs(f),[0 0.1])可见,尽管x对f的影响比较小,但函数值还是随着x增大而减小的。综上分析,ga的计算结果是正确的。至于你之前说到的约束条件y=31.1688*exp(-0.755*x)如果画去曲线来:ezplot('31.1688*exp(-0.755*x)',[0 0.1])可以看到,y在18-36的范围内,倒是和你给的范围不矛盾(但应该更小一些才对)。
遗传算法解决多元函数的问题, 如果变量取值为自然数,即不是连续取值,8位二进制够了,其实7位就行了.如果变量不是取自然数,而是连续取值,8位二进制就少了,量化误差太大.还有,变异概率貌似太大了点.