ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

【优化求解】遗传优化隶属度函数matlab源码

2021-02-01 21:31:11  阅读:201  来源: 互联网

标签:MaxX 优化 ones 0.5 MinX 源码 matlab CodeL


遗传算法(Genetic Algorithm, GA)是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解(所找到的解是全局最优解)的方法。

参数编码、初始群体的设定、适应度函数的设计、遗传操作设计、控制参数设定五个要素组成了遗传算法的核心内容。

 1)种群初始化。我们需要首先通过随机生成的方式来创造一个种群,一般该种群的数量为100~500,这里我们采用二进制将一个染色体(解)编码为基因型。随后用进制转化,将二进制的基因型转化成十进制的表现型。

2)适应度计算(种群评估)。这里我们直接将目标函数值作为个体的适应度。

3)选择(复制)操作。根据种群中个体的适应度大小,通过轮盘赌等方式将适应度高的个体从当前种群中选择出来。其中轮盘赌即是与适应度成正比的概率来确定各个个体遗传到下一代群体中的数量。

      具体步骤如下:

     (1)首先计算出所有个体的适应度总和Σfi。

     (2)其次计算出每个个体的相对适应度大小fi/Σfi,类似于softmax。

     (3)再产生一个0到1之间的随机数,依据随机数出现在上述哪个概率区域内来确定各个个体被选中的次数。

4)交叉(交配)运算。该步骤是遗传算法中产生新的个体的主要操作过程,它用一定的交配概率阈值(pc,一般是0.4到0.99)来控制是否采取单点交叉,多点交叉等方式生成新的交叉个体。

     具体步骤如下:

     (1)先对群体随机配对。

     (2)再随机设定交叉点的位置。

     (3)再互换配对染色体间的部分基因。 

5)变异运算。该步骤是产生新的个体的另一种操作。一般先随机产生变异点,再根据变异概率阈值(pm,一般是0.0001到0.1)将变异点的原有基因取反。

6)终止判断。如果满足条件(迭代次数,一般是200~500)则终止算法,否则返回step2。

                   

 

我们首先从函数出发,既然是寻找全局最优解,我们可以想象一个多元函数的图像。遗传算法中每一条染色体,对应着遗传算法的一个解决方案,一般我们用适应性函数(fitness function)来衡量这个解决方案的优劣。所以从一个基因组到其解的适应度形成一个映射。可以把遗传算法的过程看作是一个在多元函数里面求最优解的过程。可以这样想象,这个多维曲面里面有数不清的“山峰”,而这些山峰所对应的就是局部最优解。而其中也会有一个“山峰”的海拔最高的,那么这个就是全局最优解。而遗传算法的任务就是尽量爬到最高峰,而不是陷落在一些小山峰。(另外,值得注意的是遗传算法不一定要找“最高的山峰”,如果问题的适应度评价越小越好的话,那么全局最优解就是函数的最小值,对应的,遗传算法所要找的就是“最深的谷底”)

clear all;
close all;
global rin yout timef

G=50;
Size=30;
CodeL=10;

MinX(1)=zeros(1);
MaxX(1)=10*ones(1);
MinX(2)=zeros(1);
MaxX(2)=30*ones(1);
MinX(3)=zeros(1);
MaxX(3)=100*ones(1);
MinX(4)=-0.5*ones(1);
MaxX(4)=0.5*ones(1);
MinX(5)=-0.5*ones(1);
MaxX(5)=0.5*ones(1);
MinX(6)=-0.5*ones(1);
MaxX(6)=0.5*ones(1);
MinX(7)=-0.5*ones(1);
MaxX(7)=0.5*ones(1);
MinX(8)=-0.5*ones(1);
MaxX(8)=0.5*ones(1);
MinX(9)=-0.5*ones(1);
MaxX(9)=0.5*ones(1);
MinX(10)=-0.5*ones(1);
MaxX(10)=0.5*ones(1);
MinX(11)=-0.5*ones(1);
MaxX(11)=0.5*ones(1);

E=round(rand(Size,11*CodeL));    %Initial Code!

BsJ=0;

for kg=1:1:G
    time(kg)=kg;

    for s=1:1:Size
        m=E(s,:);
        y1=0;y2=0;y3=0;y4=0;y5=0;y5=0;y6=0;y7=0;y8=0;y9=0;y10=0;y11=0;y12=0;

        m1=m(1:1:CodeL);
        for i=1:1:CodeL
            y1=y1+m1(i)*2^(i-1);
        end
        Kfuzzy(s,1)=(MaxX(1)-MinX(1))*y1/1023+MinX(1);

        m2=m(CodeL+1:1:2*CodeL);
        for i=1:1:CodeL
            y2=y2+m2(i)*2^(i-1);
        end
        Kfuzzy(s,2)=(MaxX(2)-MinX(2))*y2/1023+MinX(2);

        m3=m(2*CodeL+1:1:3*CodeL);
        for i=1:1:CodeL
            y3=y3+m3(i)*2^(i-1);
        end
        Kfuzzy(s,3)=(MaxX(3)-MinX(3))*y3/1023+MinX(3);

        m4=m(3*CodeL+1:1:4*CodeL);
        for i=1:1:CodeL
            y4=y4+m4(i)*2^(i-1);
        end
        Kfuzzy(s,4)=(MaxX(4)-MinX(4))*y4/1023+MinX(4);

        m5=m(4*CodeL+1:1:5*CodeL);
        for i=1:1:CodeL
            y5=y5+m5(i)*2^(i-1);
        end
        Kfuzzy(s,5)=(MaxX(5)-MinX(5))*y5/1023+MinX(5);

        m6=m(5*CodeL+1:1:6*CodeL);
        for i=1:1:CodeL
            y6=y6+m6(i)*2^(i-1);
        end
        Kfuzzy(s,6)=(MaxX(6)-MinX(6))*y6/1023+MinX(6);

        m7=m(6*CodeL+1:1:7*CodeL);
        for i=1:1:CodeL
            y7=y7+m7(i)*2^(i-1);
        end
        Kfuzzy(s,7)=(MaxX(7)-MinX(7))*y7/1023+MinX(7);

        m8=m(7*CodeL+1:1:8*CodeL);
        for i=1:1:CodeL
            y8=y8+m8(i)*2^(i-1);
        end
        Kfuzzy(s,8)=(MaxX(8)-MinX(8))*y8/1023+MinX(8);

        m9=m(8*CodeL+1:1:9*CodeL);
        for i=1:1:CodeL
            y9=y9+m9(i)*2^(i-1);
        end
        Kfuzzy(s,9)=(MaxX(9)-MinX(9))*y9/1023+MinX(9);

        m10=m(9*CodeL+1:1:10*CodeL);
        for i=1:1:CodeL
            y10=y10+m10(i)*2^(i-1);
        end
        Kfuzzy(s,10)=(MaxX(10)-MinX(10))*y10/1023+MinX(10);

        m11=m(10*CodeL+1:1:11*CodeL);
        for i=1:1:CodeL
            y11=y11+m11(i)*2^(i-1);
        end
        Kfuzzy(s,11)=(MaxX(11)-MinX(11))*y11/1023+MinX(11);
        
        %****** Step 1 : Evaluate BestJ ******
        Kfuzzyi=Kfuzzy(s,:);

        [Kfuzzyi,BsJ]=mychap5_2f(Kfuzzyi,BsJ);

        BsJi(s)=BsJ;
    end

    [OderJi,IndexJi]=sort(BsJi);
    BestJ(kg)=OderJi(1);
    BJ=BestJ(kg);
    Ji=BsJi+1e-10;

    %Guarantee TempE(Size,:) belong to the best individual
    TempE(Size,:)=BestS;
    E=TempE;
    %*******************************************************
end

Bestfi
BestS
Kfuzzyi
Best_J=BestJ(G)
figure(1);
plot(time,BestJ);
xlabel('Times');ylabel('Best J');
figure(2);
plot(timef,rin,'r',timef,yout,'b');
xlabel('Time(s)');ylabel('rin,yout');

完整代码或者代写添加QQ1575304183

往期回顾>>>>>>

【优化求解】混沌粒子群matlab源码

【优化求解】土狼算法matlab源码

【优化求解】基于混沌反向学习改进灰狼算法matlab源码

【优化求解】粒子群优化灰狼算法matlab源码

【优化求解】改进灰狼算法求解重油热解模型matlab源码

【多目标优化求解】多目标灰狼优化算法MOGWOmatlab源码

【多目标优化求解】基于金鹰算法(MOGEO)的多目标优化求解matlab源码

【优化求解】蜉蝣算法matlab源码

【优化求解】平衡优化器算法matlab源码

【优化求解】麻雀算法matlab源码

【优化求解】探路者优化算法matlab源码

【优化求解】改进的萤火虫算法matlab源码

【优化求解】磷虾群算法(Krill Herd Algorithm,KHA)

【优化求解】差分进化算法(Differential Evolution)matlab源码

【优化求解】冠状病毒群体免疫优化算法(CHIO)matlab源码

【优化求解】金鹰优化求解算法(GEO)matlab源码

【优化求解】基于黄金正弦算法GoldSA智能优化算法

标签:MaxX,优化,ones,0.5,MinX,源码,matlab,CodeL
来源: https://blog.csdn.net/qq_34763204/article/details/113529662

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有