遗传算法

主函数
clear all
clc 
popsize=20; 							%群体大小  
chromlength=10; 						%字符串长度(个体长度) 
pc=0.8;   							%交叉概率
pm=0.006;                                 %变异概率
pop=initpop(popsize,chromlength);             %随机产生初始群体 
for i=1:30                                  %30为迭代次数
[objvalue]=calobjvalue(pop);                   %计算目标函数 
fitvalue=calfitvalue(objvalue);                  %计算群体中每个个体的适应度
[newpop]=selection(pop,fitvalue);               %复制 
[newpop]=crossover(pop,pc);                   %交叉 
[newpop]=mutation(pop,pc);                    %变异 
[bestindividual,bestfit]=best(pop,fitvalue);		  %求出群体中适应值最大的个体及其适应值 
y(i)=max(bestfit); 
n(i)=i;  
pop5=bestindividual;  
x(i)=decodechrom(pop5,1,chromlength)*10/1023; 
pop=newpop; 
end  
fplot('11*sin(7*x)-7*cos(3*x)',[0 11])
hold on
plot(x,y,'r*')
hold off
f=max(y)

function [objvalue]=calobjvalue(pop)
temp1=decodechrom(pop,1,10); %将pop每行转化成十进制数
x=temp1*10/1023; %将二值域 中的数转化为变量域 的数
objvalue=10*sin(5*x)+7*cos(4*x); %计算目标函数值
end

%初始化
function pop=initpop(popsize,chromlength)  
pop=round(rand(popsize,chromlength));  
% rand随机产生每个单元为{0,1}行数为popsize,列数为chromlength的矩阵,
% roud对矩阵的每个单元进行圆整。这样产生的初始种群。
end

%将二进制编码转换成十进制
function pop2=decodechrom(pop,spoint,length)
pop1=pop(:,spoint:spoint+length-1);
pop2=decodebinary(pop1);
end
%计算个体的适应值  
function fitvalue=calfitvalue(objvalue)
global Cmin;
Cmin=0;
[px,py]=size(objvalue);
for i=1:px
    if objvalue(i)+Cmin>0
        temp=Cmin+objvalue(i);
    else
        temp=0.0;
    end
    fitvalue(i)=temp;
end
fitvalue=fitvalue'

%选择复制  
function [newpop]=selection(pop,fitvalue)
totalfit=sum(fitvalue); %求适应值之和
fitvalue=fitvalue/totalfit; %单个个体被选择的概率
fitvalue=cumsum(fitvalue); %如 fitvalue=[1 2 3 4],则 cumsum(fitvalue)=[1 3 6 10] 
[px,py]=size(pop);
ms=sort(rand(px,1)); %从小到大排列
fitin=1;
newin=1;
while newin<=px
    if(ms(newin))<fitvalue(fitin)
        newpop(newin)=pop(fitin);
        newin=newin+1;
    else
        fitin=fitin+1;
    end
end

%交叉  
function [newpop]=crossover(pop,pc)
[px,py]=size(pop);
newpop=ones(size(pop));
for i=1:2:px-1
    if(rand<pc)
        cpoint=round(rand*py);
        newpop(i,:)=[pop(i,1:cpoint),pop(i+1,cpoint+1:py)];
        newpop(i+1,:)=[pop(i+1,1:cpoint),pop(i,cpoint+1:py)];
    else
        newpop(i,:)=pop(i);
        newpop(i+1,:)=pop(i+1);
    end
end  

%变异  
function [newpop]=mutation(pop,pm)
[px,py]=size(pop);
newpop=ones(size(pop));
for i=1:px
    if(rand<pm)
        mpoint=round(rand*py);
        if mpoint<=0
            mpoint=1;
        end
        newpop(i)=pop(i);
        if any(newpop(i,mpoint))==0
            newpop(i,mpoint)=1;
        else
            newpop(i,mpoint)=0;
        end
    else
        newpop(i)=pop(i);
    end
end

%求出群体中适应值最大的值  
function [bestindividual,bestfit]=best(pop,fitvalue)
[px,py]=size(pop);
bestindividual=pop(1,:);
bestfit=fitvalue(1);
for i=2:px
    if fitvalue(i)>bestfit
        bestindividual=pop(i,:);
        bestfit=fitvalue(i);
    end
end

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
本书可作为高等院校计算机、自动化、信息、管理、控制与系统工程等专业本科生或研究生的教材或参考书,也可供其他相关专业的师生及科研和工程技术人员自学或参考。作 者:雷英杰 等编著。第一章 遗传算法概述 1.1 遗传算法的概念 1.2 遗传算法的特点 1.2.1 遗传算法的优点 1.2.2 遗传算法的不足之处 1.3 遗传算法与传统方法的比较 1.4 遗传算法的基本用语 1.5 遗传算法的研究方向 1.6 基于遗传算法的应用 第二章 基本遗传算法及改进 2.1 遗传算法的运行过程 2.1.1 完整的遗传算法运算流程 2.1.2 遗传算法的基本操作 2.2 基本遗传算法 2.2.1 基本遗传算法的数学模型 2.2.2 基本遗传算法的步骤 2.2.3 遗传算法的具体例证 2.3 改进的遗传算法 2.3.1 改进的遗传算法一 2.3.2 改进的遗传算法二 2.3.3 改进的遗传算法三 2.3.4 改进的遗传算法四 2.4 多目标优化中的遗传算法 2.4.1 多目标优化的概念 2.4.2 多目标优化问题的遗传算法 第三章 遗传算法的理论基础 3.1 模式定理 3.2 积木块假设 3.3 欺骗问题 3.4 遗传算法的未成熟收敛问题及其防止 3.4.1 遗传算法的未成熟收敛问题 3.4.2 未成熟收敛的防止 3.5 性能评估 3.6 小生境技术和共享函数 第四章 遗传算法的基本原理与方法 4.1 编码 4.1.1 编码方法 4.1.2 编码评估策略 4.2 选择 4.3 交叉 4.4 变异 4.5 适应度函数 4.5.1 适应度函数的作用 4.5.2 适应度函数的设计主要满足的条件 4.5.3 适应度函数的种类 4.5.4 适应度尺度的变换 4.6 控制参数选择 4.7 约束条件的处理 第五章 遗传算法工具箱函数 5.1 工具箱结构 5.1.1 种群表示和初始化 5.1.2 适应度计算 5.1.3 选择函数 5.1.4 交叉算子 5.1.5 变异算子 5.1.6 多子群支持 5.2 遗传算法中的通用函数 5.2.1 函数 bs2rv 5.2.2 函数 crtbase 5.2.3 函数 crtbp 5.2.4 函数 crtrp 5.2.5 函数 migrate 5.2.6 函数 mut 5.2.7 函数 mutate 5.2.8 函数 mutbga 5.2.9 函数 ranking 5.2.10 函数 recdis 5.2.11 函数 recint 5.2.12 函数 reclin 5.2.13 函数 recmut 5.2.14 函数 recombin 5.2.15 函数 reins 5.2.16 函数 rep 5.2.17 函数 rws 5.2.18 函数 scaling 5.2.19 函数 select 5.2.20 函数 sus 5.2.21 函数 xovdp 5.2.22 函数 xovdprs 5.2.23 函数 xovmp 5.2.24 函数 xovsh 5.2.25 函数 xovshrs 5.2.26 函数 xovsp 5.2.27 函数 xovsprs 第六章 遗传算法工具箱的应用 第七章 遗传算法应用举例 第八章 使用MATLAB遗传算法工具 第九章 使用MATLAB直接搜索工具

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值