1、matlab遗传算法学习和全局化算法精品毕业设计完整版1 遗传算法步骤1 根据具体问题选择编码方式,随机产生初始种群,个体数目一定,每个个体表现为染色体的基因编码2 选择合适的适应度函数,计算并评价群体中各个体的适应。3 选择(selection)。根据各个个体的适应度,按照一定的规则或方法,从当前群体中选择出一些优良的个体遗传到下一代群体4 交叉(crossover)。将选择过后的群体内的各个个体随机搭配成对,对每一对个体,以一定概率(交叉概率)交换它们中的部分基因。5 变异(mutation)。对交叉过后的群体中的每一个个体,以某个概率(称为变异概率)改n 变某一个或某一些基因位上的基因值
2、为其他的等位基因6 终止条件判断。若满足终止条件,则以进化过程中得到的具有最大适应度的个体作为最优解输出,终止运算。否则,迭代执行Step2 至Step5。适应度是评价群体中染色体个体好坏的标准,是算法进化的驱动力,是自然选择的唯一依据,改变种群结构的操作皆通过适应度函数来控制。在遗传算法中,以个体适应度的大小来确定该个体被遗传到下一代群体中的概率。个体的适应度越大,被遗传到下一代的概率就越大,相反,被遗传到下一代的概率就越小。1 a,b,c=gaopt(bound,fun)其中,bound=xm,xM为求解区间上届和下届构成的矩阵。Fun为用户编写的函数。a为搜索的结果向量,由搜索的出的最优
3、x向量与目标函数构成,b为最终搜索种群,c为中间搜索过程变参数,其第一列为代数,后边列分别为该代最好的的个体与目标函数的值,可以认为寻优的中间结果。2 ga函数。X,F, FLAG,OUTPUT = GA(fun, n,opts).n为自变量个数,opts为遗传算法控制选项,用gaoptimset()函数设置各种选项,InitialPopulation可以设置初始种群,用PopulationSize可以设置种群规模,SelectionFcn可以定义选择函数,3 gatool 函数用于打开,GATOOL is now included in OPTIMTOOL。2.2 通过GUI 使用遗传算法在
4、Matlab 工作窗口键入下列命令gatool, 或通过Start 打开其下子菜单Genetic Algorithm Tool,如图1。只要在相应的窗格选择相应的选项便可进行遗传算法的计算。其中fitnessfun 窗格为适应度函数, 填写形式为fitnessfun,Number of variable 窗格为变量个数。其它窗格参数根据情况填入。填好各窗格内容,单击Start 按钮,便可运行遗传算法例子1 应用实例已知某一生物的总量y(单位:万个)与时间t(月)之间的关系为y=k0(1-exp(-k1*t),统计十个月得到数据见表1,试求关系式中的k0,k1。先编写目标函数,并以文件名myfu
5、ng.m 存盘。function y=myfung(x)TOT=2.0567 3.6904 4.9881 6.0189 6.8371 7.4881 8.0047 8.4151 8.7411 9.0000;t=1:10;r,s=size(TOT);y=0;for i=1:sy=y+(TOT(i)-x(:,1)*(1-exp(-x(:,2)*t(i)2 %最小估计原则end打开遗传算法的GUI,在Fitness function 窗格中输入myfung,在Number of variables 窗格中输入数字2,在Stopping criteria 选项中设置generations 为300,fi
6、tness limit 为0.001,stall generations 为100,其它参数为缺省值,然后单击Start 运行遗传算法得到k0=9.99559,k1=0.23018,即例子2 2 matlab 7 GA工具箱_木子一车(转载)例子1求的最大值;也就是求负函数的最小值最大值为-38.8503,在点 xmin=11.6255 5.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,t2);mes
7、h(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.0 4.1;12.1 5.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);方法2 gatool 的用法在matlab7命令行输入 gatool,见附图。在 PopulationSize
8、=10000; 请注意Mutation函数的选择。f(x1*,x2*)=-my_func1(x1*,x2*)=38.84741978236206,where x1*=11.62378; x2*=5.72501方法3 全局优化算法gs = GlobalSearch(Display,iter);f=(x)-(21.5+x(1)*sin(4*pi*x(1)+x(2)*sin(20*pi*x(2);opts = optimset(Algorithm,interior-point);problem = createOptimProblem(fmincon,objective,f,x0,1/2 1/3,l
9、b,-3 4.1,ub,12.1 5.8,options,opts);xming,fming,flagg,outptg,manyminsg = run(gs,problem)方法4 multistart 方法ms =MultiStart(TolFun,1e-10,TolX,1e-10);opts=optimset(Algorithm, interior-point);f=(x)-(21.5+x(1)*sin(4*pi*x(1)+x(2)*sin(20*pi*x(2);problem=createOptimProblem(fmincon,x0,0,0,objective,f,lb,-3,4.1,
10、ub,12.1,5.8,options,opts);xminm,fminm,flagm,outptm,someminsm=run(ms,problem,300);%stpoints=RandomStartPointSet;%默认产生10个起始点此方法得不到最优解;查看局部解的分布范围 enter hist(someminsm.Fval).方法4.1 对上个方法的改进;首先根据上个方法搜索的最佳点,取现在的方法的搜索范围为上个最优解的周围区域,缩小搜索范围clearms=MultiStart;opts=optimset(Algorithm,interior-point);f=(x)(-(21.5
11、+x(1).*sin(4*pi*x(1)+x(2).*sin(20*pi*x(2);problem=createOptimProblem(fmincon,x0,12,5,objective,f,lb,10,4,ub,12.1,5.8,options,opts);xminm,fminm,flagm,outptm,manyminsm=run(ms,problem,200)xminm = 11.6255 5.7250fminm = -38.8503flagm = 1outptm = funcCount: 8660 localSolverTotal: 200 localSolverSuccess: 2
12、00 localSolverIncomplete: 0 localSolverNoSolution: 0 message: 1x129 charmanyminsm = 1x78 GlobalOptimSolution Properties: X Fval Exitflag OutputX0方法4.2 pts = -4*rand(200,2) + 13*rand(200,2);tpoints = CustomStartPointSet(pts);rpts = RandomStartPointSet(NumStartPoints,200);allpts = tpoints,rpts;ms=Mult
13、iStart;opts=optimset(Algorithm, interior-point,LargeScale,off);f=(x)(-(21.5+x(1).*sin(4*pi*x(1)+x(2).*sin(20*pi*x(2);problem=createOptimProblem(fmincon,x0,12.1,5.6,objective,f,lb,9,4,ub,12.1,5.8,options,opts);xmin,fmin,flag,outpt,allmins = run(ms,problem,allpts)3 【问题】求f(x)=x+10*sin(5x)+7*cos(4x)的最大值
14、,其中0=x Export to Workspace and select Export problem and options to a MATLAB structure named例子5 多起始点优化(MultiStart Global Optimization)gs = GlobalSearch;ms = MultiStart;xstart = randn(3,1);options = optimset(Algorithm,interior-point);假设你想解决一个问题并假设局部解相邻0.01之内,并且函数值在函数精度之内;求解时间少于2000s;gs = GlobalSearch
15、(TolX,0.01,MaxTime,2000);gs = GlobalSearch;ms = MultiStart; xmin,fmin,flag,outpt,allmins = run(ms,problem,k);%k为要使用的起点数目,k可以由RandomStartPointSet函数产生;5.1 RandomStartPointSet Object for Start Pointsstpoints = RandomStartPointSet;%默认产生10个起始点,如果想产生stpoints = RandomStartPointSet(NumStartPoints,40);Runnin
16、g a solver is nearly identical for GlobalSearch and MultiStart. The only difference in syntax is MultiStart takes an additional input describing the start points.startpts = RandomStartPointSet(ArtificialBound,100,NumStartPoints,50);x fval eflag output manymins = run(ms,problem,startpts)5.2 CustomSta
17、rtPointSet Object for Start PointsTo use a specific set of starting points, package them in a CustomStartPointSet as follows:Place the starting points in a matrix. Each row of the matrix represents one starting point. MultiStart runs all the rows of the matrix, subject to filtering with the StartPointsToRun property. For more information, see MultiStart Algorithm.Create a CustomStartPointSet object from the matrix:tpoints = CustomStartPointSet(ptmatrix);
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1