收藏 分销(赏)

利用遗传算法求函数的极小值.doc

上传人:仙人****88 文档编号:11989908 上传时间:2025-08-26 格式:DOC 页数:7 大小:13.86KB 下载积分:10 金币
下载 相关 举报
利用遗传算法求函数的极小值.doc_第1页
第1页 / 共7页
利用遗传算法求函数的极小值.doc_第2页
第2页 / 共7页


点击查看更多>>
资源描述
1、 利用遗传算法求出下面函数的极小值 : z=2-exp[-(x2+y2)], x,y∈[-5,+5] 对于此函数 ,求某一极值、或说最值时,由于x、y定义域与系数相同, x与y相对于z来说是地位等同的,因此可以转换成求该函数极值: ;继而转换成了一种单变量函数。 函数的实现 : (1)ga_main脚本文件 % GA main program % Edited by Bian Xuezi % n   ---- 种群规模 % ger ---- 迭代次数 % pc   ---- 交叉概率 % pm   ---- 变异概率 % v   ---- 初始种群(规模为n) % f   ---- 目标函数值 % fit ---- 适应度向量 % vx   ---- 最优适应度值向量 % vmfit ---- 平均适应度值向量 clear all; close all; clc; tic; n=20; ger=100; pc=0.70; pm=0.009; % 生成初始种群 v=init_population(n,20); [N,L]=size(v); disp(sprintf('Number of generations:%d',ger)); disp(sprintf('Population size:%d',N)); disp(sprintf('Crossover probability:%.3f',pc)); disp(sprintf('Mutation probability:%.3f',pm)); % 待优化问题 xmin=-5;ymin=-5; xmax=5;ymax=5; f='-2+exp(-x.^2-y.^2)'; %初始化 sol=0.1; vmfit=[]; it=1; vx=[]; %C=[]; % 计算适应度,并画出图形 x=decode(v(:,1:10),xmin,xmax); y=decode(v(:,11:20),ymin,ymax); fit=eval(f); figure(1); [X,Y]=meshgrid(-5:0.1:5,-5:0.1:5); Z=-2+exp(-X.^2-Y.^2); mesh(X,Y,Z); grid on; hold on; plot3(x,y,fit,'k*'); title('染色体的初始位置'); xlabel('x'); ylabel('y'); zlabel('f(x,y)'); % 开始进化 while it<=ger    %Reproduction(Bi-classist Selection)    vtemp=roulette(v,fit);    %Crossover      v=crossover(vtemp,pc);    %Mutation    M=rand(N,L)<=pm;    %M(1,:)=zeros(1,L);    v=v-2.*(v.*M)+M;    %Results    x=decode(v(:,1:10),xmin,xmax);    y=decode(v(:,11:20),ymin,ymax);    fit=eval(f);    [sol,indb]=max(fit);    v(1,:)=v(indb,:);    media=mean(fit);    vx=[vx sol];    vmfit=[vmfit media];    it=it+1; end %%%% 最后的结果 disp(sprintf('\n'));   %空一行 % 显示最优解及最优值 disp(sprintf('Maximum found[x,f(x)]:[%.4f,%.4f,%.4f]',x(indb),y(indb),sol)); % 图形显示最优结果 figure(2); [X,Y]=meshgrid(-5:0.1:5,-5:0.1:5); Z=-2+exp(-X.^2-Y.^2); mesh(X,Y,Z); grid on; hold on; plot3(x,y,fit,'k*'); title('染色体的最终位置'); xlabel('x'); ylabel('y'); zlabel('f(x,y)'); % 图形显示最优及平均函数值变化趋势 figure(3); plot(vx); %title('最优,平均函数值变化趋势'); xlabel('Generations'); ylabel('f(x,y)'); hold on; plot(vmfit,'r'); hold off; runtime=toc (2)Crossover函数 %Crossover function v=crossover(vtemp,pc) [N,L]=size(vtemp); C(:,1)=rand(N,1)<=pc; I=find(C(:,1)==1); I'; j=1; for i=1:2:size(I)    if i>=size(I)        break;    end    site=fix(1+L*rand(1));    temp=vtemp(I(i,1),:);    vtemp(I(i,1),site:end)=vtemp(I(i+1,1),site:end);    vtemp(I(i+1,1),site:end)=temp(:,site:end);    %j=j+2; end v=vtemp; (3)decode函数 %Decodify bitstrings function x=decode(v,min,max) % x   ----真实值 % v   ----待解码的已编码的0-1串 v=fliplr(v); [s,c]=size(v); aux=0:1:c-1 ;%21; aux=ones(s(1),1)*aux; x1=sum((v.*2.^aux)'); x=min+(max-min)*x1./(2^c-1);   % ; (4)init_population函数 function v=init_population(n1,s1) v=round(rand(n1,s1)); (5)roulette函数 function vtemp=roulette(v,fit) N=size(v); fitmin=abs(min(fit)); fit=fitmin+fit; %fit S=sum(fit); for i=1:N    SI=S*rand(1);    for j=1:N        if SI<=sum(fit(1:j))        vtemp(i,:)=v(j,:);        break        end    end end
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服