资源描述:
《matlab遗传算法学习和全局化算法》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、1遗传算法步骤1根据具体问题选择编码方式,随机产生初始种群,个体数目一定,每个个体表现为染色体的基因编码2选择合适的适应度函数,计算并评价群体中各个体的适应。3选择(selection)。根据各个个体的适应度,按照一定的规则或方法,从当前群体中选择出一些优良的个体遗传到下一代群体4交叉(crossover)。将选择过后的群体内的各个个体随机搭配成对,对每一对个体,以一定概率(交叉概率)交换它们中的部分基因。5变异(mutation)。对交叉过后的群体中的每一个个体,以某个概率(称为变异概率)改n变某一个或某一些基因位上的基因值为其他的等位基因6终止条件判断。若满足终止
2、条件,则以进化过程中得到的具有最大适应度的个体作为最优解输出,终止运算。否则,迭代执行Step2至Step5。适应度是评价群体中染色体个体好坏的标准,是算法进化的驱动力,是自然选择的唯一依据,改变种群结构的操作皆通过适应度函数来控制。在遗传算法中,以个体适应度的大小来确定该个体被遗传到下一代群体中的概率。个体的适应度越大,被遗传到下一代的概率就越大,相反,被遗传到下一代的概率就越小。1[a,b,c]=gaopt(bound,fun)其中,bound=[xm,xM]为求解区间上届和下届构成的矩阵。Fun为用户编写的函数。a为搜索的结果向量,由搜索的出的最优x向量与目标函
3、数构成,b为最终搜索种群,c为中间搜索过程变参数,其第一列为代数,后边列分别为该代最好的的个体与目标函数的值,可以认为寻优的中间结果。2ga函数。[X,F,FLAG,OUTPUT]=GA(fun,n,opts).n为自变量个数,opts为遗传算法控制选项,用gaoptimset()函数设置各种选项,InitialPopulation可以设置初始种群,用PopulationSize可以设置种群规模,SelectionFcn可以定义选择函数,3gatool函数用于打开,GATOOLisnowincludedinOPTIMTOOL。2.2通过GUI使用遗传算法在Matlab
4、工作窗口键入下列命令>>gatool,或通过Start打开其下子菜单GeneticAlgorithmTool,如图1。只要在相应的窗格选择相应的选项便可进行遗传算法的计算。其中fitnessfun窗格为适应度函数,填写形式为@fitnessfun,Numberofvariable窗格为变量个数。其它窗格参数根据情况填入。填好各窗格内容,单击Start按钮,便可运行遗传算法例子1应用实例已知某一生物的总量y(单位:万个)与时间t(月)之间的关系为y=k0(1-exp(-k1*t)),统计十个月得到数据见表1,试求关系式中的k0,k1。先编写目标函数,并以文件名myfun
5、g.m存盘。functiony=myfung(x)TOT=[2.05673.69044.98816.01896.83717.48818.00478.41518.74119.0000];t=1:10;[r,s]=size(TOT);y=0;fori=1:sy=y+(TOT(i)-x(:,1)*(1-exp(-x(:,2)*t(i))))^2%最小估计原则end打开遗传算法的GUI,在Fitnessfunction窗格中输入@myfung,在Numberofvariables窗格中输入数字2,在Stoppingcriteria选项中设置generations为300,fi
6、tnesslimit为0.001,stallgenerations为100,其它参数为缺省值,然后单击Start运行遗传算法得到k0=9.99559,k1=0.23018,即例子22matlab7GA工具箱_木子一车(转载)例子1求的最大值;也就是求负函数的最小值最大值为-38.8503,在点xmin=[11.62555.7250];clearf=@(x1,x2)(-(21.5+x1.*sin(4*pi*x1)+x2.*sin(20*pi*x2)))t1=-3:0.1:12.1;t2=4:1.8/(length(t1)-1):5.8;[x,y]=meshgrid(t1
7、,t2);mesh(x,y,f(x,y))方法1遗传算法f=@(x)-(21.5+x(1)*sin(4*pi*x(1))+x(2)*sin(20*pi*x(2)));opt1=gaoptimset;opt1.PopInitRange=[[-3.04.1];[12.15.8]];opt1.PopulationSize=1000;opt1.MutationFcn=@mutationuniform;[x,fval]=ga(f,2,opt1)[x,fval]=ga(f,2,[],[],[],[],[-3.0;4.1],[12.1;5.8]);方法2gatoo