收藏 分销(赏)

遗传算法matlab实现源程序.doc

上传人:xrp****65 文档编号:5910876 上传时间:2024-11-23 格式:DOC 页数:10 大小:83.50KB 下载积分:10 金币
下载 相关 举报
遗传算法matlab实现源程序.doc_第1页
第1页 / 共10页
遗传算法matlab实现源程序.doc_第2页
第2页 / 共10页


点击查看更多>>
资源描述
附页: 一.遗传算法源程序: clc; clear; population; %评价目标函数值 for uim=1:popsize     vector=population(uim,:);     obj(uim)=hanshu(hromlength,vector,phen); end %obj %min(obj) clear uim; objmin=min(obj); for sequ=1:popsize     if obj(sequ)==objmin         opti=population(sequ,:);     end end clear sequ; fmax=22000; %== for gen=1:maxgen %选择操作 %将求最小值的函数转化为适应度函数 for indivi=1:popsize     obj1(indivi)=1/obj(indivi); end clear indivi; %适应度函数累加总合 total=0; for indivi=1:popsize     total=total+obj1(indivi); end clear indivi; %每条染色体被选中的几率 for indivi=1:popsize     fitness1(indivi)=obj1(indivi)/total; end clear indivi; %各条染色体被选中的范围 for indivi=1:popsize     fitness(indivi)=0;     for j=1:indivi         fitness(indivi)=fitness(indivi)+fitness1(j);     end end clear j; fitness; %选择适应度高的个体 for ranseti=1:popsize     ran=rand;     while (ran>1||ran<0)         ran=rand;     end     ran;     if ran<=fitness(1)         newpopulation(ranseti,:)=population(1,:);     else         for fet=2:popsize             if (ran>fitness(fet-1))&&(ran<=fitness(fet))                 newpopulation(ranseti,:)=population(fet,:);             end         end     end end clear ran; newpopulation; %交叉 for int=1:2:popsize-1     popmoth=newpopulation(int,:);                          popfath=newpopulation(int+1,:);                      popcross(int,:)=popmoth;     popcross(int+1,:)=popfath;     randnum=rand;     if(randnum< P>         cpoint1=round(rand*hromlength);                  cpoint2=round(rand*hromlength);                    while (cpoint2==cpoint1)                              cpoint2=round(rand*hromlength);         end         if cpoint1>cpoint2                                  tem=cpoint1;             cpoint1=cpoint2;             cpoint2=tem;         end         cpoint1;         cpoint2;         for term=cpoint1+1:cpoint2                                for ss=1:hromlength                 if popcross(int,ss)==popfath(term)                     tem1=popcross(int,ss);                     popcross(int,ss)=popcross(int,term);                     popcross(int,term)=tem1;                 end             end             clear tem1;         end         for term=cpoint1+1:cpoint2                                for ss=1:hromlength                 if popcross(int+1,ss)==popmoth(term)                     tem1=popcross(int+1,ss);                     popcross(int+1,ss)=popcross(int+1,term);                     popcross(int+1,term)=tem1;                 end             end             clear tem1;         end     end     clear term; end clear randnum; popcross; %变异操作 newpop=popcross; for int=1:popsize     randnum=rand;     if randnum         cpoint12=round(rand*hromlength);                  cpoint22=round(rand*hromlength);                 if (cpoint12==0)             cpoint12=1;         end         if (cpoint22==0)             cpoint22=1;         end         while (cpoint22==cpoint12)                             cpoint22=round(rand*hromlength);             if cpoint22==0;                 cpoint22=1;             end         end         temp=newpop(int,cpoint12);         newpop(int,cpoint12)=newpop(int,cpoint22);         newpop(int,cpoint22)=temp;     end end newpop; clear cpoint12; clear cpoint22; clear randnum; clear int; for ium=1:popsize     vector1=newpop(ium,:);     obj1(ium)=hanshu(hromlength,vector1,phen); end clear ium; obj1max=max(obj1); for ar=1:popsize     if obj1(ar)==obj1max         newpop(ar,:)=opti;     end end %遗传操作结束 二.粒子群算法源程序: %------初始格式化-------------------------------------------------- clear all; clc; format long; %------给定初始化条件---------------------------------------------- c1=1.4962;%学习因子1 c2=1.4962;%学习因子2 w=0.7298;%惯性权重 MaxDT=100;%最大迭代次数 D=2;%搜索空间维数(未知数个数) N=40;%初始化群体个体数目 eps=10^(-6);%设置精度(在已知最小值时候用) %------初始化种群的个体(可以在这里限定位置和速度的范围)------------ for i=1:N for j=1:D x(i,j)=randn;%随机初始化位置 v(i,j)=randn;%随机初始化速度 end end %------先计算各个粒子的适应度,并初始化Pi和Pg---------------------- for i=1:N p(i)=fitness(x(i,:),D); y(i,:)=x(i,:); end pg=x(1,:);%Pg为全局最优 for i=2:N if fitness(x(i,:),D)<FITNESS(pg,D) pg=x(i,:); end end %------进入主要循环,按照公式依次迭代,直到满足精度要求------------ for t=1:MaxDT t for i=1:N v(i,:)=w*v(i,:)+c1*rand*(y(i,:)-x(i,:))+c2*rand*(pg-x(i,:)); x(i,:)=x(i,:)+v(i,:); if fitness(x(i,:),D)<p(i) p(i)=fitness(x(i,:),D); y(i,:)=x(i,:); end if p(i)<FITNESS(pg,D) pg=y(i,:); end end Pbest(t)=fitness(pg,D); end %------进入主要循环,按照公式依次迭代,直到满足精度要求------------ for t=1:MaxDT for i=1:N v(i,:)=w*v(i,:)+c1*rand*(y(i,:)-x(i,:))+c2*rand*(pg-x(i,:)); x(i,:)=x(i,:)+v(i,:); if fitness(x(i,:),D)<p(i) p(i)=fitness(x(i,:),D); y(i,:)=x(i,:); end if p(i)<FITNESS(pg,D) pg=y(i,:); end end Pbest(t)=fitness(pg,D); end %------最后给出计算结果 disp('*************************************************************') disp('函数的全局最优位置为:') Solution=pg' disp('最后得到的优化极值为:') Result=fitness(pg,D) disp('*************************************************************') [X,Y]=meshgrid(-500:2:500); Z=X.*sin(sqrt(X))+Y.*(sin(sqrt(Y))); hold on contour(X,Y,Z) plot(x(:,1),x(:,2),'*'); hold off
展开阅读全文

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


开通VIP      成为共赢上传

当前位置:首页 > 应用文书 > 其他

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

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

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

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

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

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

客服