精华内容
下载资源
问答
  • 2016-11-12 22:20:25

    1.随机初始果蝇群体位置。
    Init X_axis
    Init Y_axis

    2.附与果蝇个体利用嗅觉搜寻食物之随机方向与距离。
    Xi= X_axis + Random Value
    Yi= Y_axis + Random Value

    3.由于无法得知食物位置,因此先估计与原点之距离(Dist),再计算
    味道浓度判定值(S),此值为距离之倒数。
    Disti=√(X_i^2+Y_i^2 );Si=1/Disti

    4.味道浓度判定值(S)代入味道浓度判定函数(或称为 Fitness function)
    以求出该果蝇个体位置的味道浓度(Smelli)。
    Smelli = Function(Si)

    5.找出此果蝇群体的中味道浓度最高的果蝇(求极大值)
    [bestSmell bestIndex] = max(Smell)

    6.保留最佳味道浓度值与 x、y 坐标,此时果蝇群体利用视觉往该位
    置飞去。
    Smellbest = bestSmell
    X_axis = X(bestIndex)
    Y_axis = Y(bestIndex)

    最后:进入迭代寻优,重复执行步骤 2-5,并判断味道浓度是否优于前一
    迭代味道浓度,若是则执行步骤 6。

    寻找极小值:

    %清空运行环境
    clc
    clear
    %随机初始果蝇群体位置
    X_axis=10*rand();
    Y_axis=10*rand();
    
    maxgen=100; %迭代次数
    sizepop=20; %种群规模
    
    %果蝇寻优开始
    for i=1:sizepop
    %附与果蝇个体利用嗅觉搜寻食物之随机方向与距离
    X(i)=X_axis+2*rand()-1;
    Y(i)=Y_axis+2*rand()-1;
    %由于无法得知食物位置,因此先估计与原点之距离(Dist),再计算味道浓度判定值(S),此值为距离之倒数
    D(i)=(X(i)^2+Y(i)^2)^0.5;
    S(i)=1/D(i);
    %味道浓度判定值(S)代入味道浓度判定函数(或称为Fitness function)以求出该果蝇个体位置的味道浓度Smell
    Smell(i)=10+S(i)^2;
    end
    %找出此果蝇群体的中味道浓度最低的果蝇(求极小值)。
    [bestSmell bestindex]=min(Smell);
    %保留最佳味道浓度值与x、y 坐标,此时果蝇群体利用视觉往该位置飞去。
    X_axis=X(bestindex);
    Y_axis=Y(bestindex);
    Smellbest=bestSmell;
    
    
    %果蝇迭代寻优开始
    for g=1:maxgen
    %附与果蝇个体利用嗅觉搜寻食物之随机方向与距离。
    for i=1:sizepop
    X(i)=X_axis+2*rand()-1;
    Y(i)=Y_axis+2*rand()-1;
    %由于无法得知食物位置,因此先估计与原点之距离(Dist),再计算味道浓度判定值(S),此值为距离之倒数。
    D(i)=(X(i)^2+Y(i)^2)^0.5;
    S(i)=1/D(i);
    %判定值(S)代入判定函数以求出该果蝇位置的味道浓度(Smelli)。
    Smell(i)= 10+S(i)^2;
    end
    %找出此果蝇群体的中味道浓度最低的果蝇(求极小值)。
    [bestSmell bestindex]=min(Smell);
    %判断味道浓度是否优于前一迭代味道浓度,若是则保留最佳味道浓度值与x、y 坐标,此时果蝇群体利用视觉往该位置飞去。
    if bestSmell<Smellbest
    X_axis=X(bestindex);
    Y_axis=Y(bestindex);
    Smellbest=bestSmell;
    end
    %每代最优Smell值纪录到yy 数组中,并记录最优迭代坐标
    yy(g)=Smellbest;
    Xbest(g)=X_axis;
    Ybest(g)=Y_axis;
    end
    
    %绘制迭代味到浓度与果蝇飞行路径趋势图
    figure(1)
    plot(yy)
    title('Optimization process','fontsize',12)
    xlabel('Iteration Number','fontsize',12);
    ylabel('Smell','fontsize',12);
    figure(2)
    plot(Xbest,Ybest,'b.');
    title('Fruit fly flying route','fontsize',14)
    xlabel('X-best','fontsize',12);
    ylabel('Y-best','fontsize',12);
    

    寻找极大值:

    % 清空运行环境 。
    clc
    clear
    % 随机初始果蝇群体位置 。
    X_axis=10*rand();
    Y_axis=10*rand();
    %设置参数
    maxgen=100; %迭代次数
    sizepop=100; %种群规模
    
    
    %果蝇寻优开始
    for i=1:sizepop
    %附与果蝇个体利用嗅觉搜寻食物之随机方向与距离
    X(i)=X_axis+2*rand()-1;
    Y(i)=Y_axis+2*rand()-1;
    %由于无法得知食物位置,因此先估计与原点之距离D,再计算味道浓度判定值(S),此值为距离之倒数
    D(i)=((X(i)-1)^2+Y(i)^2)^0.5;
    S(i)=1/D(i);
    % 味道浓度判定值 (S) 代入味道浓度判定函数( ( 或称为  Fitness function)以求出 该果蝇个体位置的味道浓度 (Smelli) 。
    Smell(i)=8-S(i)^2+2*S(i);
    end
    %找出此果蝇群体的中味道浓度最高的果蝇(求极大值)
    [bestSmell bestindex]=max(Smell);
    %保留最佳味道浓度值与 x x 、y y  坐标 , 此时果蝇群体利用视觉往该位置飞去 。
    X_axis=X(bestindex);
    Y_axis=Y(bestindex);
    Smellbest=bestSmell;
    
    
    %果蝇迭代寻优开始
    for g=1:maxgen
    %附与果蝇个体利用嗅觉搜寻食物之随机方向与距离
    for i=1:sizepop
    X(i)=X_axis+2*rand()-1;
    Y(i)=Y_axis+2*rand()-1;
    %*** 由于无法得知食物位置, 因此先估计与原点之距离 (Dist),再计算味道浓度判定值 (S),此值为距离之倒数
    D(i)=(X(i)^2+Y(i)^2)^0.5;
    S(i)=1/D(i);
    
    %判定值 (S) 代入判定函数以求出该果蝇位置的味道浓度 (Smelli) 。
    Smell(i)=8-S(i)^2+2*S(i);
    end
    %找出此果蝇群体的中味道浓度最高的果蝇( 求极大值)
    [bestSmell bestindex]=max(Smell);
    %判断味道浓度是否优于前一迭代味道浓度, 若是则保留最佳味道浓度值与 x x 、y y  坐标 , 此时果蝇群体利用视觉往该位置飞去 。
    if bestSmell>Smellbest
    X_axis=X(bestindex);
    Y_axis=Y(bestindex);
    Smellbest=bestSmell;
    end
    %每代最优 smell值纪录到数组中,并记录最优迭代坐标
    yy(g)=Smellbest;
    Xbest(g)=X_axis;
    Ybest(g)=Y_axis;
    end
    
    %绘制迭代味到浓度与果蝇飞行路径趋势图
    figure(1)
    plot(yy)
    title('Optimization process','fontsize',12)
    xlabel('Iteration Number','fontsize',12);
    ylabel('Smell','fontsize',12);
    figure(2)
    plot(Xbest,Ybest,'b.');
    title('Fruit fly flying route','fontsize',14)
    xlabel('X-best','fontsize',12);
    ylabel('Y-best','fontsize',12);

    下面给出一个难以求出极小值的函数:

    %清空
    clc
    clear
    %随机初始果蝇群体位置
    X_axis=10*rand();
    Y_axis=10*rand();
    %设置参数
    maxgen=100; %迭代次数
    sizepop=20; %种群规模
    kkk=0;
    %种群寻优开始,利用嗅觉寻找食物
    for i=1:sizepop
    for j=1:2
    %附与果蝇个体利用嗅觉搜寻食物之随机方向与距离
    X(i,j)=X_axis+2*rand()-1;
    Y(i,j)=Y_axis+2*rand()-1;
    %由于无法得知食物位置,因此先估计与原点之距离(Dist),再计算味道浓度判定值(S),此值为距离之倒数
    D(i,j)=(X(i,j)^2+Y(i,j)^2)^0.5;
    S(i,j)=1/D(i,j);
    end
    %味道浓度判定值(S)代入味道浓度判定函数(或称为Fitness function)以求出该果蝇个体位置的味道浓度
    Smell(i)=0.5+(sin((S(i,1)^2+S(i,2)^2)^0.5)^2-0.5)./(1+0.001*(S(i,1)^2+S(i,2)^2))^2;
    end
    %找出此果蝇群体中味道浓度最低的果蝇(求极小值)
    [bestSmell bestindex]=min(Smell);
    %保留最佳味道浓度值与x,y坐标,此时果蝇群体利用视觉往该位置飞去
    X_axis=X(bestindex);
    Y_axis=Y(bestindex);
    Smellbest=bestSmell;
    %果蝇迭代寻优开始
    for g=1:maxgen
    %附与果蝇个体利用嗅觉搜寻食物之随机方向与距离
    for i=1:sizepop
    %附与果蝇个体利用嗅觉搜寻食物之随机方向与距离
    for j=1:2
    X(i,j)=X_axis+2*rand()-1;
    Y(i,j)=Y_axis+2*rand()-1;
    %由于无法得知食物位置,因此先估计与原点之距离(Dist),再计算味道浓度判定值(S),此值为距离之倒数
    D(i,j)=(X(i,j)^2+Y(i,j)^2)^0.5;
    S(i,j)=1/D(i,j);
    end
    %味道浓度判定值(S)代入味道浓度判定函数(或称为Fitness function)以求出该果蝇个体位置的味道浓度
    Smell(i)=0.5+(sin((S(i,1)^2+S(i,2)^2)^0.5)^2-0.5)./(1+0.001*(S(i,1)^2+S(i,2)^2))^2;
    end
    %找出此果蝇群体中味道浓度最低的果蝇(求极小值)
    [bestSmell bestindex]=min(Smell);
    %判断味道浓度是否优于前一迭代味道浓度,若是则保留最佳味道浓度值与x,y坐标,此时果蝇群体利用视觉往该位置飞去
    if bestSmell
    kkk=kkk+1;
    X_axis=X(bestindex);
    Y_axis=Y(bestindex);
    Smellbest=bestSmell;
    end
    %每代最优Smell值记录到yy数组中,并记录最优迭代坐标
    yy(g)=Smellbest;
    Xbest(g)=X_axis;
    Ybest(g)=Y_axis;
    end
    %绘制迭代味道浓度与果蝇飞行路径趋势图
    figure(1)
    plot(yy)
    title('Optimization process','fontsize',12)
    xlabel('Iteration Number','fontsize',12);
    ylabel('Smell','fontsize',12);
    figure(2)
    plot(Xbest,Ybest,'b');
    title('Fruit flying toute','fontsize',14)
    xlabel('X-best','fontsize',12);
    ylabel('Y-best','fontsize',12);
    更多相关内容
  • 优化求解】果蝇优化算法matlab源码.md
  • 果蝇优化算法MATLAB实现

    万次阅读 多人点赞 2018-10-12 23:28:13
    果蝇优化算法--Matlab实现 1果蝇优化算法原理介绍 果蝇是一种广泛存在于温带和热带地区的昆虫,具有优于其他物种的嗅觉和视觉能力. 在寻找食物时,果蝇个体先利用自身嗅觉器官嗅到食物的气味,并向周围的果蝇发送气味...

    果蝇优化算法--Matlab实现

    1果蝇优化算法原理介绍

    果蝇是一种广泛存在于温带和热带地区的昆虫,具有优于其他物种的嗅觉和视觉能力. 在寻找食物时,果蝇个体先利用自身嗅觉器官嗅到食物的气味,并向周围的果蝇发送气味信息,或者从周围的果蝇接收气味信息;之后果蝇利用其视觉器官,通过比较得出当前群体中收集到最好气味信息的果蝇位置,群体中的其他果蝇均飞向该位置,并继续展开搜索. 图 1展示了果蝇群体搜索食物的简要过程.
    果蝇优化算法图

    1.1步骤分析

    根据果蝇群体觅食的行为特点,标准 FOA寻优
    大致分为以下几个步骤.
    Step 1:初始化.
    设置种群规模(popsize),最大迭代次数(maxgen),果蝇群体位置范围(LR)和果蝇的单次飞行范围(FR)等相关参数值. 果蝇群体中每个个体的位置信息由其对应的(X; Y )二维坐标给出,其初始位置由下面的公式定义:

    \left \ X_a_x_i_s=rand(LR) \right.
    Y_a_x_i_s=rand(LR)

    Step 2:嗅觉搜索过程.
    Step 2.1:当群体中的每一只果蝇利用其嗅觉搜索时,赋予它一个随机的飞行方向和距离. 果蝇个体 新的位置由下式给出:
    X_i=X_a_x_i_s+rand(FR)

    Y_i=Y_a_x_i_s+rand(FR)

    Step 2.2:因为食物味道的来源位置是未知的,因此先利用下式计算果蝇个体距离原点的距离DISTi:
    Dist_i=\sqrt{X_i^{2}+Y_i^{2}}

    然后通过下式计算其味道浓度判定值Si:
    S_i=1/Dist_i

    Step 2.3:通过下式计算当前群体中每个果蝇个体的味道浓度值Smelli:
    Smell_i=fitness(S_i)

    fitness表示味道浓度判断函数,在利用FOA进行优化问题求解时,它是目标函数或适应度函数.
    Step 2.4:选择当前群体中具有最佳味道浓度值的果蝇,记录其味道浓度值和相应位置
    [bestSmell,bestIndex]=min(Smell)

    Step 3:视觉搜索过程.
    保持最佳味道浓度值和对应果蝇位置信息,群体中的其他果蝇均利用视觉飞向此位置,即
    Smellbest=bestSmell

    X_a_x_i_s=X(bestIndex)

    Y_a_x_i_s=Y(bestIndex)

    Step 4:重复Step 2和Step 3,直到算法迭代次数达到maxgen.
    由 FOA的计算步骤可知,标准 FOA采用基于种群的全局随机搜索策略,通过跟踪当前最优解的信息来指导种群的下一步搜索,使得种群能够以当前最优解为中心开展局部随机搜索,并朝着更优的方向搜索前进.
     

    2果蝇优化算法程序设计

    根据果蝇算法步骤,设计MATlab程序如下

    %% FOA封装程序
    clc;
    clear;
    for gen=1:30
    %% 初始化参数
    maxgen=100; %最大迭代次数
    sizepop=50;
    dim=30;
    L=1;
    %% 初始化矩阵
    X_best=zeros(maxgen,dim);
    Y_best=zeros(maxgen,dim);
    Smell_best=zeros(1,maxgen);
    %% 初始化果蝇坐标;
    X_axis=10*rand(1,dim);
    Y_axis=10*rand(1,dim);
    %% 生成果蝇群
    [Si,X,Y]=gengrate_foa(X_axis,Y_axis,sizepop,dim,L);
    %% 寻找最优个体
    [BestSmell,Index]=find_Sum_Square(Si);
    SmellBest=BestSmell;               %SmellBest为全局最优
    %% 取出最优个体的两个维度的X,Y坐标
    X_axis=X(Index,:);
    Y_axis=Y(Index,:);
    for g=1:maxgen
        %% 生成果蝇群
        [Si,X,Y]=gengrate_foa(X_axis,Y_axis,sizepop,dim,L);
        %% 寻找最优个体
        [BestSmell,Index]=find_Sum_Square(Si);
        if BestSmell<SmellBest
            X_axis=X(Index,:);
            Y_axis=Y(Index,:);    
            %更新极值
            SmellBest=BestSmell;
        end
        Smell_best(g)=SmellBest;
        X_best(g,:)=X_axis;
        Y_best(g,:)=Y_axis;
    end
        S(gen)=SmellBest;
    end
    %% 输出最终值
    SmellBest
    %% 绘制图像
    figure(1)
    plot(Smell_best,'b');   %绘制每一代最优浓度值
    figure(2)
    hold on
    plot(X_best(:,1),Y_best(:,1),'r.');%绘制果蝇群X_axis,Y_axis的变化
    plot(X_best(:,2),Y_best(:,2),'b.');
    plot(X_best(:,3),Y_best(:,3),'k.');
    figure(3)
    plot(X(:,1),Y(:,1),'b.');%绘制最后一代的果蝇群;
    mean(S)
    min(S)
    std(S)

    将FOA果蝇群生成,和计算果蝇味道浓度值Smill_{i}封装成函数,输入的是种群坐标,种群个数,维度和步长值,输出的是每个果蝇的坐标和果蝇的味道浓度判定值S_i

    function [Si,X,Y]=gengrate_foa(X_axis,Y_axis,sizepop,dim,L)
        Di=zeros(sizepop,dim);
        Si=zeros(sizepop,dim);
        
        X_axis=repmat(X_axis,sizepop,1);    %将种群坐标扩充;
        Y_axis=repmat(Y_axis,sizepop,1);
        X=X_axis+2*L*rand(sizepop,dim)-L;%求出每个果蝇的坐标矩阵;
        Y=Y_axis+2*L*rand(sizepop,dim)-L;
        Di1=X.^2;   %求出X^2和Y^2;
        Di2=Y.^2;
        Di=Di1+Di2; %X^2+Y^2;
        Di=Di.^0.5; %开根号;
        
        Si=1./Di;   %Si=1/Di;
    
    end

    求果蝇味道浓度值Smill_{i},对每个测试函数都不同,此处用了SumSquare函数,这个函数的表达式是

                                                                                     F(x)=\sum_{i=1}^{n}ix^2

    其三维函数图像如下图

     

     

                                                       SumSquare函数图像

    其函数编写如下,函数输入只需要果蝇个体的味道判定值S_i,带入函数中解出最优的味道浓度值和其索引,就能对应着找到最优的果蝇个体了。

    %% 果蝇浓度判定函数;
    %Function:Sum Square
    %表达式:f(x)=Sum(i*(Xi)^2);
    function [BestSmell,Index]=find_Sum_Square(Si)
    
    [si_m,si_n]=size(Si);
    sum_2=zeros(1,si_n);
    for d=1:si_n
        sum_2(d)=d;
    end
    
    Si_2=Si.^2;         %所有元素平方;
    Smell=Si_2.*sum_2;
    Smell=sum(Smell,2);
    [BestSmell,Index]=min(Smell);
    end

     


    对函数进行测试

    试验设置独立运行30次,并记录每次的寻优结果,最后求一下30次寻优结果的均值,最小值和均方差。

    对测试结果绘制图片,figure(1)绘制的是每次迭代的种群最优值,可以看到最优值一直在降低,最终趋向于收敛于0(函数最优值),这就说明果蝇群每一次迭代都在向最优值前进,一点点寻优。

    迭代曲线

     

    figure(2)绘制的是果蝇群坐标随着迭代次数增长的变化,一点点在向外面扩散,这里设置的函数为30维,画图的话只画了其中3维,分别用红色,蓝色和黑色表示,每一维扩散的方向都不同。

    果蝇群坐标变化

    figure(3)绘制的是最后一代果蝇群的坐标分布,这里只画了一维的坐标分布,可以看出是围绕着中心点向四周随机飞行的,因为这里设置步长为1,所以上下幅度为最大为2。

    果蝇群分布

    要是想测试其他寻优函数,可以根据我的测试函数模板进行编写,将Si作为变量X带入,求出最小的Y值就是最优果蝇了,下面在放上两个我已经编好的寻优函数,Ackley和Rastrigin。

    %% 果蝇浓度判定函数;
    %Function:Rastrigin
    %表达式:f(x)=Sum[(Xi)^2-10cos(2pi*xi)+10];
    function [BestSmell,Index]=find_Rastrigin(Si)
    [si_m,si_n]=size(Si);
    sum_2=zeros(si_m,1);
                        %第一部分:平方和
    Si_2=Si.^2;         %所有元素平方;
    sum_1=sum(Si_2,2);  %求各维度平方和;
    
    
    %第二部分:cos(2pi*Xi)
    for p=1:si_m        
        for d=1:si_n
            sum_2(p)=sum_2(p)+10*cos(2*pi*Si(p,d));
        end
    end
    Smell=sum_1-sum_2+10*si_n;
    [BestSmell,Index]=min(Smell);
    end

     

    %Function:Ackley
    %表达式:
    function [BestSmell,Index]=find_Ackley(Si)
    [si_m,si_n]=size(Si);
    sum_2=zeros(si_m,1);
                        %第一部分:平方和
    Si_2=Si.^2;         %所有元素平方;
    sum_1=sum(Si_2,2);  %求各维度平方和;
    sum_1=-0.2.*((sum_1/30).^0.5);    
    sum_1=-20.*(exp(sum_1));
    
    
    %第二部分:cos(2pi*Xi)
    for p=1:si_m        %cos(Xi)/sqrt(i)部分
        for d=1:si_n
            sum_2(p)=sum_2(p)+cos(2*pi*Si(p,d)); 
        end
        sum_2(p)=sum_2(p)/30;
        sum_2(p)=-1*exp(sum_2(p));
    end
    Smell=sum_1+sum_2+20+exp(1);
    [BestSmell,Index]=min(Smell);
    end

    代码已经经过测试了,可以直接拷贝到m文件中,保存在相同路径运行,注意函数的名称要和文件名称相同。主函数里面的参数sizepop,dim以及L,maxgen都是可以随意设置的,可以设置观测不同结果。

    资源:

    1、最后附上我的代码,里面封装了几个常用的测试函数和原代码。

    https://download.csdn.net/download/stm32_newlearner/10722535

    2、打包了综述(果蝇优化算法研究综述)所有论文,包括很多外文,可以说很全的果蝇算法文献了,对算法优化研究很有作用。

    https://download.csdn.net/download/stm32_newlearner/10976713

     

    展开全文
  • 引入混沌粒子群算法进行改进的果蝇优化算法
  • 果蝇优化算法的基本原理是初始化种群的中心位置,利用敏锐的嗅觉进行搜索,即根据中心位置随机产生多个邻域解。计算各可行解的味道浓度,即适应度值,然后利用视觉从中选择较好的解,更新替换中心位置,然后进行迭代...
  • 果蝇优化算法源代码

    2018-10-15 22:23:42
    内部包括FOA源码,m函数以及测试函数的封装M函数,将文件保存在同一目录,运行FOA.M即可,可以更改测试函数的m程序,对不同函数进行测试。
  • 改进的果蝇算法,果蝇优化算法,matlab源码.zip
  • matlab开发-果蝇优化算法第二版。果蝇优化算法第二版
  • 完整代码已上传我的资源:【优化算法】果蝇算法(FOA)【含Matlab源码 1568期】 备注: 订阅紫极神光博客付费专栏,可免费获得1份代码(有效期为订阅日起,三天内有效); 二、果蝇优化算法简介 果蝇优化算法(FOA)...

    一、获取代码方式

    获取代码方式1:
    通过订阅紫极神光博客付费专栏,凭支付凭证,私信博主,可获得此代码。

    获取代码方式2:
    完整代码已上传我的资源:【优化算法】果蝇算法(FOA)【含Matlab源码 1568期】

    备注:
    订阅紫极神光博客付费专栏,可免费获得1份代码(有效期为订阅日起,三天内有效);

    二、果蝇优化算法简介

    果蝇优化算法(FOA)是一种基于果蝇觅食行为推演出寻求全局优化的新方法。果蝇本身在感官知觉上优于其他物种,尤其是嗅觉和视觉上。果蝇的嗅觉器官能很好的搜集漂浮在空气中的各种气味,甚至能够嗅到40公里以外的食物源。然后,飞到食物位置附近后亦可使用敏锐的视觉发现食物和同伴聚集的位置,并且向该方向飞去。
    果蝇算法可应用于求解最优解。
    在这里插入图片描述
    果蝇群体迭代搜寻食物的步骤如下:
    (1)随机初始化果蝇群体位置。
    Init X_axis
    Init Y_axis

    (2)赋予果蝇个体利用嗅觉搜寻食物的随机距离与方向。
    Xi = X_axis + Random Value
    Yi = Y_axis + Random Value

    (3)由于无法得知食物的位置,因此先估计与原点的距离(Dist),再计算味道浓度判定值(S),此值为距离的倒数。
    Disti = sqrt(Xi^2 + Yi^2)
    Si = 1 / Disti

    (4)味道浓度判定值(S)代入味道浓度判定函数(或称为Fitness function)以求出该果蝇个体位置的味道浓度(Smelli)。
    Smelli = Function(Si)

    (5)找出该果蝇群体中味道浓度最高的果蝇(求极大值)。
    [bestSmell bestIndex] = max(Smell)

    (6)保留最佳味道浓度值与x、y的坐标,此时果蝇群体利用视觉往该位置飞去。
    Smellbest = bestSmell
    X_axis = X(bestIndex)
    Y_axis = Y(bestIndex)

    (7)进入迭代寻优,重复执行步骤2-5,并判断味道浓度是否优于前一迭代味道浓度,若是则实行步骤6。

    三、部分源代码

    % Fruit Fly Optimization Algorithm,FOA.
    
    % The standard verison programmed by Prof.Pan is a simplifed version which
    % is used to test a very easy function.In my opinion,in order to enhance
    % the FOA application field,it is necessary to change it into a general
    % version,which may be simple for students and scholars to use.
    
    %
    function [Smellbest,X,Y] = FOA(n,maxt,lb,ub,dim)
    
    % Parameters setting
    if nargin < 1
        n = 20; % Population size
        maxt = 5e2; % Max iterations
        dim = 30; % Dimension of test function
        lb = -100 * ones(1,dim); % Lower bound of test function
        ub = 100 * ones(1,dim); % Upper bound of test function
    end
    
    
    
    
    % X = zeros(1 * dim);
    % Y = zeros(1 * dim);
    % new_X = zeros(1 * dim);
    % new_Y = zeros(1 * dim);
    % D = zeros(1 * dim);
    % Sol = zeros(1 * dim);
    % Fitness = zeros(n * 1);
    
    % Initialize the original position
    for i = 1:n
        X(i,:) = lb+(ub-lb).*rand(1,dim); % the position of X axis
        Y(i,:) = lb+(ub-lb).*rand(1,dim); % the position of Y axis
        D(i,:) = (X(i,:).^2 + Y(i,:).^2).^0.5; % Caculate the distance
        Sol(i,:) = 1./D(i,:); % the solution set
        Fitness(i) = fun(Sol(i,:)); % Caculate the fitness
    end
    
    
    [bestSmell,index] = min(Fitness); % Get the min fitness and its index
    new_X = X(index,:); % the X axis of min fitness
    new_Y = Y(index,:); % the Y axis of min fitness
    Smellbest = bestSmell;
    best = Sol(index,:);
    
    % Start main loop
    for t = 1:maxt
        for i = 1:n
            % Refer to the process of initializing
            X(i,:) = new_X + (ub - lb).*rand(1,dim);
            Y(i,:) = new_Y + (ub - lb).*rand(1,dim);
            D(i,:) = (X(i,:).^2 + Y(i,:).^2).^0.5;
            Sol(i,:) = 1./D(i,:);
            Fitness(i) = fun(Sol(i,:));
        end
        [bestSmell,index] = min(Fitness);
        % If the new value is smaller than the best value,update the best value
        if (bestSmell < Smellbest)
            X(i,:) = X(index,:);
            Y(i,:) = Y(index,:);
            Smellbest = bestSmell;
        end
        
        % Out put result each 100 iterations
        if round(t/100) == (t/100)
            Smellbest;
        end
        
        cg_curve(t) = Smellbest;
    end
    

    四、运行结果

    在这里插入图片描述

    五、matlab版本及参考文献

    1 matlab版本
    2014a

    2 参考文献
    [1] 包子阳,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,2016.
    [2]张岩,吴水根.MATLAB优化算法源代码[M].清华大学出版社,2017.

    展开全文
  • 【路径规划】基于果蝇优化算法实现机器人路径规划matlab源码
  • 果蝇优化算法优化支持向量回归程序吴文教授-FOASVR_Training.txt 各位先进大家好: 台湾学者潘文超老师今年提出一种新的群智能技术, 日前已经被SCI期刊接受, 经晚辈向潘老师询问, 潘老师同意将其出版的书籍分享...
  • 多峰函数的寻优能力一直是衡量算法优越性的...通过matlab软件测试、分析了改进的果蝇算法寻优能力的影响因素,最后通过相同的参数,分别采用遗传算法(GA)和改进的果蝇算法进行对比,通过对比发现,改进的果蝇优化算法在收
  • 文章目录果蝇优化算法(Fruit Fly Optimization Algorithm,FOA)启发初始化食物搜索计算味道浓度判定值适应度评估确定最优个体飞行循环Matlab代码FOA求Y=2−X2Y=2-X^2Y=2−X2极大值FOA求X2X^2X2最小值 果蝇优化算法...

    在这里插入图片描述
    获取更多资讯,赶快关注上面的公众号吧!

    果蝇优化算法(Fruit Fly Optimization Algorithm,FOA)

    2011年台湾亚东技术学院的潘文超受果蝇觅食行为的启发,提出了一种的全局优化算法—果蝇优化算法(Fruit Fly Optimization Algorithm,FOA)。该算法的优点在于计算过程简单、易于编码实现和易于理解等。关注公众号,后台回复“果蝇”或“FOA”获取Matlab源码!

    启发

    果蝇本身在感觉和感知方面优于其他物种,尤其是在嗅觉和视觉方面,如图1所示。
    在这里插入图片描述

    图1 果蝇的身体外观和群体迭代觅食

    果蝇的嗅觉器官能发现空气中漂浮的各种气味;它甚至能闻到40公里外的食物。然后,当它接近食物位置,也可以用它灵敏的视觉找到食物和同伴聚集的位置,并朝那个方向飞行。

    初始化

    首先随机初始化果蝇种群位置InitX_axis和InitY_axis。

    食物搜索

    通过嗅觉给出果蝇寻找食物的随机方向和距离:
    X i = X − a x i s + R a n d o m V a l u e X_i=X_{-}axis+RandomValue Xi=Xaxis+RandomValue

    Y i = X − a x i s + R a n d o m V a l u e Y_i=X_{-}axis+RandomValue Yi=Xaxis+RandomValue

    计算味道浓度判定值

    由于无法得知食物位置,因此先估计与原点的距离 D i s t i Dist_i Disti,再计算味道浓度判定值 s i s_i si,此值为距离倒数:
     Dist  i = X i 2 + Y i 2 \text { Dist }_{i}=\sqrt{X_{i}^{2}+Y_{i}^{2}}  Dist i=Xi2+Yi2
    S i = 1 /  Dist  i S_{i}=1 / \text { Dist }_{i} Si=1/ Dist i

    适应度评估

    将味道浓度判定值 s i s_i si。代入味道浓度判定函数(或称为适应度函数fitness function),用来求出果蝇个体位置的味道浓度 S m e l l i Smell_i Smelli

    S m e l l i = F u n c t i o n ( S i ) Smell_i=Function(S_i) Smelli=Function(Si)

    确定最优个体

    找出该果蝇群体中味道浓度最低的果蝇(最优个体);
    [  bestSmell bestindex  ] = min ⁡ (  Smell  i ) [\text { bestSmell bestindex }]=\min \left(\text { Smell }_{i}\right) [ bestSmell bestindex ]=min( Smell i)

    飞行

    记录并保留最佳味道浓度值bestSmell与其x、y坐标,此时果蝇群体利用视觉向该位置飞去:
     Smellbest = bestSmell  \text { Smellbest = bestSmell }  Smellbest = bestSmell 

    X axis  = X (  bestindex  ) X_{\text {axis }}=X(\text { bestindex }) Xaxis =X( bestindex )

    Y axis  = Y (  bestindex  ) Y_{\text {axis }}=Y(\text { bestindex }) Yaxis =Y( bestindex )

    循环

    重复执行食物搜索、计算味道浓度判定值、应度评估、定最优个体,并判断最佳味道浓度是否优于前一迭代最佳味道浓度。若当前迭代次数小于最大迭代数Maxgen,则执行飞行。

    Matlab代码

    FOA求 Y = 2 − X 2 Y=2-X^2 Y=2X2极大值

    %***設置參數
    %清空運行環境
    clc
    clear
    %速度更新參數
    X_axis=10*rand();
    Y_axis=10*rand();
    
    maxgen=100;  %疊代次數
    sizepop=20;  %種群規模
    
    %個體和速度最大和最小值
    for i=1:sizepop
    X(i)=X_axis+2*rand()-1;
    Y(i)=Y_axis+2*rand()-1;
    D(i)=(X(i)^2+Y(i)^2)^0.5;
    S(i)=1/D(i);
    
    %類似Fitness適應度函數
    Smell(i)=2-S(i)^2; 
    end
    
    %***根據初始味道濃度值尋找極值
    [bestSmell bestindex]=max(Smell);
    %***保留最佳值位置
    X_axis=X(bestindex);
    Y_axis=Y(bestindex);
    Smellbest=bestSmell;
    
    %***根據公式更新粒子位置和速度,並且根據新粒子的適應度值更新個體極值和群體極值
    %疊代尋優
    for g=1:maxgen    
       %粒子位置和速度更新
      for i=1:sizepop
      X(i)=X_axis+2*rand()-1;
      Y(i)=Y_axis+2*rand()-1;
      D(i)=(X(i)^2+Y(i)^2)^0.5;
      S(i)=1/D(i);
    
      %類似Fitness適應度函數
      Smell(i)=2-S(i)^2;
      end
    
      %***根據初始味道濃度值尋找極值
      [bestSmell bestindex]=max(Smell);
      %***保留最佳值位置
       if bestSmell>Smellbest
             X_axis=X(bestindex);
             Y_axis=Y(bestindex);
             Smellbest=bestSmell;
       end
       %每代最優值紀錄到yy數組中
       yy(g)=Smellbest; 
       Xbest(g)=X_axis;
       Ybest(g)=Y_axis;
    end
    %***繪製最佳化個體適應度值趨勢圖
    figure(1)
    plot(yy)
    title('Optimization process','fontsize',12)
    xlabel('Iteration Number','fontsize',12);ylabel('Smell','fontsize',12);
    figure(2)
    plot(Xbest,Ybest,'b.');
    title('Fruit fly flying route','fontsize',14)
    xlabel('X-axis','fontsize',12);ylabel('Y-axis','fontsize',12);
    

    结果如下:
    在这里插入图片描述

    图2 优化过程

    在这里插入图片描述

    图3 果蝇飞行路线

    FOA求 X 2 X^2 X2最小值

    上述代码仅能用于测试一个二维函数,失去了通用性。下面提供了一个不同的版本,可能更容易使用和改进,且可以扩展到不同维度。

    % Fruit Fly Optimization Algorithm,FOA.
    
    % The standard verison programmed by Prof.Pan is a simplifed version which
    % is used to test a very easy function.In my opinion,in order to enhance
    % the FOA application field,it is necessary to change it into a general
    % version,which may be simple for students and scholars to use.
    
    % Programmed and code by Stephen Zhao from Shanghai University of Engineering Science(China)
    % Email:zhaoqihui8193@yundaex.com
    % If you have any questions concerning this program,please contact me.
    
    % You might cite this article like this:Wen-Tsao Pan (2011) 
    % A new fruit fly optimization algorithm: Taking the financial distress 
    % model as an example, Knowledge-Based Systems, Vol.26, pp.69-74, 2012, 
    % DOI information: 10.1016/j.knosys.2011.07.001.
    function [Smellbest,X,Y] = FOA(n,maxt,lb,ub,dim)
    
    % Parameters setting
    if nargin < 1
        n = 20; % Population size
        maxt = 5e2; % Max iterations
        dim = 30; % Dimension of test function
        lb = -100 * ones(1,dim); % Lower bound of test function
        ub = 100 * ones(1,dim); % Upper bound of test function
    end
    
    
    
    
    % X = zeros(1 * dim);
    % Y = zeros(1 * dim);
    % new_X = zeros(1 * dim);
    % new_Y = zeros(1 * dim);
    % D = zeros(1 * dim);
    % Sol = zeros(1 * dim);
    % Fitness = zeros(n * 1);
    
    % Initialize the original position
    for i = 1:n
        X(i,:) = lb+(ub-lb).*rand(1,dim); % the position of X axis
        Y(i,:) = lb+(ub-lb).*rand(1,dim); % the position of Y axis
        D(i,:) = (X(i,:).^2 + Y(i,:).^2).^0.5; % Caculate the distance
        Sol(i,:) = 1./D(i,:); % the solution set
        Fitness(i) = fun(Sol(i,:)); % Caculate the fitness
    end
    
    
    [bestSmell,index] = min(Fitness); % Get the min fitness and its index
    new_X = X(index,:); % the X axis of min fitness
    new_Y = Y(index,:); % the Y axis of min fitness
    Smellbest = bestSmell;
    best = Sol(index,:);
    
    % Start main loop
    for t = 1:maxt
        for i = 1:n
            % Refer to the process of initializing
            X(i,:) = new_X + (ub - lb).*rand(1,dim);
            Y(i,:) = new_Y + (ub - lb).*rand(1,dim);
            D(i,:) = (X(i,:).^2 + Y(i,:).^2).^0.5;
            Sol(i,:) = 1./D(i,:);
            Fitness(i) = fun(Sol(i,:));
        end
        [bestSmell,index] = min(Fitness);
        % If the new value is smaller than the best value,update the best value
        if (bestSmell < Smellbest)
            X(i,:) = X(index,:);
            Y(i,:) = Y(index,:);
            Smellbest = bestSmell;
        end
        
        % Out put result each 100 iterations
        if round(t/100) == (t/100)
            Smellbest;
        end
        
        cg_curve(t) = Smellbest;
    end
    
    % Output/display
    disp(['Number of evaluations: ',num2str(maxt)]);
    disp(['Best solution=',num2str(best),'   fmin=',num2str(Smellbest)]);
    
    % Draw the picture
    semilogy((1:25:maxt),cg_curve(1:25:maxt),'k-o','markersize',5);
    title('Convergence curve')
    xlabel('Iteration');
    ylabel('Best fruit fly (score) obtained so far');
    
    hold on
    axis tight
    grid off
    box on
    legend('FOA')
    
    % This is a classcial test function,namely Sphere function,which range is
    % from -100 to 100.The dimension can be defined as you want.
    function z = fun(u)
    z = sum(u.^2);  
    

    结果如下:

    在这里插入图片描述

    图4 改进后FOA的收敛曲线
    展开全文
  • 完整代码,可直接运行
  • 智能优化算法果蝇优化算法 文章目录智能优化算法果蝇优化算法1.算法原理2.算法结果4.参考文献5.Matlab代码 摘要:Pan 于 2011 年受果蝇觅食行为启发,提出了果蝇优化算法 (FOA)。虽然其出现时间不长,但因其具有...
  • matlab代码亲测可用,含运行结果
  • 基于果蝇优化算法的函数寻优算法

    千次阅读 2021-01-10 19:37:07
    果蝇优化算法(Fruit Fly Optimization Algorithm, FOA)是基于果蝇觅食行为的仿生学原理而提出的一种新兴群体智能优化算法,最早由年台湾华夏科技大学的潘文超教授于2011年提出来的。 果蝇优化算法(FOA)通过模拟...
  • 果蝇优化算法-matlab实现 过程剖析
  • 有关修正果蝇优化算法ModifiedFruitFlyOptimizationAlgorithm-FOA已刊登論文.pdf 各位先进大家新年好:目前采用果蝇优化算法的文章... 再次附上果蝇算法书籍以及相关论文!! 若有任何问题可发Email给晚辈!!吴文教授.
  • 完整代码,可直接运行
  • 果蝇优化算法

    2016-04-14 15:09:42
    新的优化算法
  • 给出了双子群果蝇优化算法的具体步骤,并用MATLAB软件编程实现。通过对多个0-1背包问题的算例进行测试,并将测试结果与其他文献结果进行比较,结果表明,双子群果蝇优化算法具有较好的全局寻优能力,可作为求解0-1...
  • 一、简介 果蝇优化算法(FOA)是一种基于果蝇觅食行为推演出寻求全局优化的新方法。果蝇本身在感官知觉上优于其他物种,尤其是...果蝇算法可应用于求解最优解。\ \ 果蝇群体迭代搜寻食物的步骤如下:\ (1)随机初始化...
  • 有关修正果蝇优化算法ModifiedFruitFlyOptimizationAlgorithm-energies-SCI.pdf 各位先进大家新年好:目前采用果蝇优化算法的文章已经... 再次附上果蝇算法书籍以及相关论文!! 若有任何问题可发Email给晚辈!!吴文教授.
  • 给出了双子群果蝇优化算法的具体步骤,并用MATLAB软件编程实现。通过对多个0-1背包问题的算例进行测试,并将测试结果与其他文献结果进行比较,结果表明,双子群果蝇优化算法具有较好的全局寻优能力,可作为求解0-1...
  • 果蝇算法matlab实现

    2018-10-25 21:01:07
    利用matlab实现的果蝇算法,分别用于求适应度函数的极大值和极小值,以及求无极大极小值的解
  • 果蝇算法可应用于求解最优解。 果蝇群体迭代搜寻食物的步骤如下: (1)随机初始化果蝇群体位置。 Init X_axis Init Y_axis (2)赋予果蝇个体利用嗅觉搜寻食物的随机距离与方向。 Xi = X_axis + Random Value Yi =...

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 139
精华内容 55
关键字:

果蝇优化算法matlab

matlab 订阅