基于烟花优化算法的线性规划问题求解matlab程序
时间:2023-06-03 04:07:01
解决基于烟花优化算法的线性规划问题matlab程序
1 烟花算法介绍
烟花算法 (Fireworks Algorithm),缩写为 FWA,它是一组受夜空烟花爆炸启发的群体智能算法。
1.1 烟花算法的起源和动机
通过模拟烟花爆炸同时进行多点爆炸性搜索,这可能是一种高效的搜索方法,不同于现有其他方法的新搜索方法,因此有了研究这种爆炸性搜索方法的想法,并将其命名为烟花算法(fireworks algorithm,FWA)。
虽然烟花算法的名称更直观、更简单,但由于它没有直接与优化问题建立直接联系,一些研究人员有时用烟花算法、烟花我们的烟花算法,如烟花优化算法、烟花爆炸算法、烟花爆炸优化算法、烟花爆炸搜索算法、爆炸搜索方法等。虽然有这些不同的名称,但原名烟花算法统一在这里,以避免混淆。
1.2 烟花算法的研究进展
自2010年谭颖教授等人发表烟花算法开创性论文以来,业界对烟花算法的研究逐渐深入和传播。通过对原烟花算法的详细深入分析,针对原烟花算法(FWA)缺点,提出了大量的改进方法,开发了各种改进算法,与其他方法混合,大大提高了原烟花算法的性能,研究了烟花算法解决不同类型优化问题的能力,大量研究人员进行了烟花算法的应用研究,给出了一些典型的成功应用案例。
2 线性规划算例
2.1算例
2.2答案
3 烟花算法求解结果
1)迭代曲线
2)求解答案
从求解结果可以看出,求解答案接近标准值,求解效果一般。
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) % 第一烟花共产E_N(i)个火花 E_Spark(1,:,i)=x(i,:); % 将第一个烟花保存为第一个火花序列中的第一个,爆炸产生的火花从序列中的第二个开始(即三维数组每页的第一行) h=E_R(i)*(-1 2*rand(1,D)); % 位置偏移 E_Spark(j,:,i)=x(i,:) h; % 第一个烟花(三维数组的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)
5 完整程序链接:
https://mp.weixin.qq.com/s?__biz=Mzg4MTc1MjE2Mg==&mid=2247484329&idx=1&sn=7704db9e479be00e8f84328677f5b873&chksm=cf6062a4f817ebb29dde31c46f59fcdc3d89d619779c3c166dbc6a4bc8431220fdc04bb10be5&token=1023455607&lang=zh_CN#rd