基于烟花优化算法的线性规划问题求解matlab程序

基于烟花优化算法的线性规划问题求解matlab程序
1 烟花算法介绍
烟花算法 (Fireworks Algorithm),缩写为 FWA,是受到夜空中烟花爆炸的启发而提出的一群体智能算法。
基于烟花优化算法的线性规划问题求解matlab程序_第1张图片
1.1 烟花算法的起源与动机
通过模拟烟花爆炸的方式来进行多点同时爆炸式搜索,这也许是一种高效的搜索方式,是有别于现有其他方法的新型搜索方法,从而有了研究这种爆炸搜索方式的想法,当时为其取名烟花算法(fireworks algorithm,FWA)。

虽然烟花算法这个名称比较直观和简洁,但是由于它没有直接与优化等求解问题建立直接的联系,此后有些研究人员有时也用其他别称来称呼我们的烟花算法,如烟花优化算法、烟花爆炸算法、烟花爆炸优化算法、烟花爆炸搜索算法、爆炸搜索方法等。尽管有这些不同的别称,这里统一采用原始的名称烟花算法,以免混淆。

1.2 烟花算法的研究进展
自从烟花算法的开创性论文由谭营教授等人于2010年发表之后,业界对烟花算法的研究逐步深入和铺开。通过对原始烟花算法的细致、深入的分析,针对原始烟花算法(FWA)的不足,提出了大量的改进方法,并据此发展了各种改进算法,以及与其他方法的混合方法,大大提高的原始烟花算法的性能,同时研究了烟花算法在求解不同类型优化问题的能力,还有大量的研究人员进行了烟花算法的应用研究,给出了一些典型的成功应用案例。

2 线性规划算例
2.1算例
基于烟花优化算法的线性规划问题求解matlab程序_第2张图片
2.2答案
基于烟花优化算法的线性规划问题求解matlab程序_第3张图片
3 烟花算法求解结果

1)迭代曲线
基于烟花优化算法的线性规划问题求解matlab程序_第4张图片
2)求解答案
基于烟花优化算法的线性规划问题求解matlab程序_第5张图片
由求解结果可知,求解答案接近标准值,求解效果一般。

4 matlab程序
1)主函数

%% 烟花算法进行函数优化
%%求函数的最小值
%fitness适应度函数,N烟花数,D变量维数,M变异火花数,Er爆炸半径,En爆炸数目
%LB,UB分别为变量上下界,T为迭代次数,a,b为爆炸数目限制因子
clear;clc
N=100;   % N烟花数
D=3;     % D变量维数
M=5;     % M变异火花数
En=10;    % En爆炸数目
Er=5;    % Er爆炸半径
a=0.3;   % a,b为爆炸数目限制因子
b=0.6;
T=500;   % T为迭代次数

%求最大值变量上下界
LB=[0,0,0];
UB=[10,10,15];

%随机在解空间初始化N个烟花位置
x = zeros(N,D);
for i=1:N
    x(i,:)=LB+rand(1,D).*(UB-LB);
end
%循环迭代
E_Spark=zeros(T,D,N);
Fit = zeros(1,N);
F = zeros(1,T);
for t=1:T
    %计算每个烟花适应度值
    for i=1:N
        Fit(i)=fitness(x(i,:));
    end
    [F(t),~]=min(Fit);
    Fmin=min(Fit);
    Fmax=max(Fit);
    %计算每个烟花的爆炸半径E_R和爆炸数目E_N以及产生的爆炸火花
    E_R = zeros(1,N);
    E_N = zeros(1,N);
    for i=1:N
        E_R(i)=Er*((Fit(i)-Fmin+eps)/(sum(Fit)-N*Fmin+eps));  %爆炸半径
        E_N(i)=En*((Fmax-Fit(i)+eps)/(N*Fmax-sum(Fit)+eps));  %爆炸数目
        if E_N(i)b*En
            E_N(i)=round(b*En);
        else
            E_N(i)=round(E_N(i));
        end
        %产生爆炸火花 E_Spark
        for j=2:(E_N(i)+1)              % 第i个烟花共产生E_N(i)个火花
            E_Spark(1,:,i)=x(i,:);      % 将第i个烟花保存为第i个火花序列中的第一个,爆炸产生的火花从序列中的第二个开始存储(即烟花为三维数组每一页的第一行)
            h=E_R(i)*(-1+2*rand(1,D));  % 位置偏移
            E_Spark(j,:,i)=x(i,:)+h;    % 第i个烟花(三维数组的i页)产生的第j(三维数组的j行)个火花
            for k=1:D   %越界检测
                if E_Spark(j,k,i)>UB(k)||E_Spark(j,k,i)UB(k)||E_Spark(n,k,m)

你可能感兴趣的:(线性规划,智能算法,求目标最优,matlab,算法,开发语言)