【优化分配】基于粒子群算法和萤火虫算法求解二次分配优化问题附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

 

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

智能优化算法       神经网络预测       雷达通信       无线传感器        电力系统

信号处理              图像处理               路径规划       元胞自动机        无人机 

⛄ 内容介绍

针对当前火力分配(WTA)的难题,论文提出了一种基于粒子群优化算法(PSO)和萤火虫算法火力分配优化方法.介绍了算法的具体实现步骤,并通过在计算机上进行MATLAB仿真实验,验证了此方法的可行性和科学性,是一种有益的尝试与探索,对现代战争中指挥决策和理论研究有一定的参考价值.

⛄ 部分代码

%

clc;

clear;

close all;

%% Problem Definition

model=CreateModel();

CostFunction=@(s) MyCost(s, model);        % Cost Function

nVar=model.m;       % Number of Decision Variables

VarSize=[1 nVar];   % Size of Decision Variables Matrix

VarMin=0;         % Lower Bound of Variables

VarMax=1;         % Upper Bound of Variables

%% PSO Parameters

MaxIt=1000;      % Maximum Number of Iterations

nPop=80;         % Population Size (Swarm Size)

% PSO Parameters

w=1;            % Inertia Weight

wdamp=0.99;     % Inertia Weight Damping Ratio

c1=1.5;         % Personal Learning Coefficient

c2=2.0;         % Global Learning Coefficient

% Velocity Limits

VelMax=0.1*(VarMax-VarMin);

VelMin=-VelMax;

nParticleMutation = 1;      % Number of Mutations Performed on Each Particle

nGlobalBestMutation = 3;    % Number of Mutations Performed on Global Best

%% Initialization

empty_particle.Position=[];

empty_particle.Cost=[];

empty_particle.Sol=[];

empty_particle.Velocity=[];

empty_particle.Best.Position=[];

empty_particle.Best.Cost=[];

empty_particle.Best.Sol=[];

particle=repmat(empty_particle,nPop,1);

GlobalBest.Cost=inf;

for i=1:nPop

    

    % Initialize Position

    particle(i).Position=unifrnd(VarMin,VarMax,VarSize);

    

    % Initialize Velocity

    particle(i).Velocity=zeros(VarSize);

    

    % Evaluation

    [particle(i).Cost, particle(i).Sol]=CostFunction(particle(i).Position);

    

    % Update Personal Best

    particle(i).Best.Position=particle(i).Position;

    particle(i).Best.Cost=particle(i).Cost;

    particle(i).Best.Sol=particle(i).Sol;

    

    % Update Global Best

    if particle(i).Best.Cost<GlobalBest.Cost

        GlobalBest=particle(i).Best;

    end

    

end

BestCost=zeros(MaxIt,1);

%% PSO Main Loop

for it=1:MaxIt

    

    for i=1:nPop

        

        % Update Velocity

        particle(i).Velocity = w*particle(i).Velocity ...

            +c1*rand(VarSize).*(particle(i).Best.Position-particle(i).Position) ...

            +c2*rand(VarSize).*(GlobalBest.Position-particle(i).Position);

        

        % Apply Velocity Limits

        particle(i).Velocity = max(particle(i).Velocity,VelMin);

        particle(i).Velocity = min(particle(i).Velocity,VelMax);

        

        % Update Position

        particle(i).Position = particle(i).Position + particle(i).Velocity;

        

        % Velocity Mirror Effect

        IsOutside=(particle(i).Position<VarMin | particle(i).Position>VarMax);

        particle(i).Velocity(IsOutside)=-particle(i).Velocity(IsOutside);

        

        % Apply Position Limits

        particle(i).Position = max(particle(i).Position,VarMin);

        particle(i).Position = min(particle(i).Position,VarMax);

        

        % Evaluation

        [particle(i).Cost, particle(i).Sol] = CostFunction(particle(i).Position);

        

        % Perform Mutation

        for j=1:nParticleMutation

            NewParticle = particle(i);

            NewParticle.Position = Mutate(particle(i).Position);

            [NewParticle.Cost, NewParticle.Sol] = CostFunction(NewParticle.Position);

            if NewParticle.Cost <= particle(i).Cost

                particle(i) = NewParticle;

            end

        end

        

        % Update Personal Best

        if particle(i).Cost<particle(i).Best.Cost

            

            particle(i).Best.Position=particle(i).Position;

            particle(i).Best.Cost=particle(i).Cost;

            particle(i).Best.Sol=particle(i).Sol;

            

            % Update Global Best

            if particle(i).Best.Cost<GlobalBest.Cost

                GlobalBest=particle(i).Best;

            end

            

        end

        

    end

    

    % Perform Mutation on Global Best

    for i=1:nGlobalBestMutation

        NewParticle = GlobalBest;

        NewParticle.Position = Mutate(GlobalBest.Position);

        [NewParticle.Cost, NewParticle.Sol] = CostFunction(NewParticle.Position);

        if NewParticle.Cost <= GlobalBest.Cost

            GlobalBest = NewParticle;

        end

    end

    

    

    BestCost(it)=GlobalBest.Cost;

    

    disp(['Iteration ' num2str(it) ': Best Cost = ' num2str(BestCost(it))]);

    

    w=w*wdamp;

    

    figure(1);

    PlotSolution(GlobalBest.Position, model);

    pause(0.01);

    

end

BestSol = GlobalBest;

%% Results

figure;

plot(BestCost,'LineWidth',2);

xlabel('迭代次数');

ylabel('最优值');

grid on;

⛄ 运行结果

⛄ 参考文献

[1] 王光源, 徐鹏飞, 赵勇. 基于粒子群优化算法求解火力分配问题[J]. 舰船电子工程, 2013, 33(11):34-36.

[2] 周洪斌, 吕强. 利用混合粒子群优化算法求解二次分配问题[J]. 计算机应用与软件, 2009, 26(11):3.

[3] 朱渊萍, 陈素芬. 萤火虫群优化算法在公差分配优化的应用[J]. 机械设计与制造, 2014(6):3.

⛳️ 完整代码

❤️部分理论引用网络文献,若有侵权联系博主删除

❤️ 关注我领取海量matlab电子书和数学建模资料

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
粒子优化算法(Particle Swarm Optimization,PSO): PSO是一种群体智能算法,模拟鸟群或鱼群等集体行为,通过寻找最优解来优化问题算法通过不断地更新粒子群的位置和速度,使得粒子群向着全局最优解靠近。 蚁群算法(Ant Colony Optimization,ACO): ACO是一种基于蚂蚁寻找食物的行为模拟的优化算法,通过模拟蚂蚁在寻找食物时留下的信息素,来引导蚂蚁前往更优的解。算法在每个迭代中更新信息素浓度,并根据信息素浓度和距离选择下一步的行动方向。 萤火虫算法(Firefly Algorithm,FA): FA是一种基于萤火虫的行为模拟的优化算法,通过模拟萤火虫的互相吸引和排斥行为来寻找全局最优解。算法通过更新萤火虫的位置和亮度,使得亮度较高的萤火虫向亮度较低的萤火虫靠近,从而寻找全局最优解。 人工蜂算法(Artificial Bee Colony,ABC): ABC是一种基于蜜蜂寻找花蜜的行为模拟的优化算法,通过模拟蜜蜂在寻找食物时的搜索策略来寻找最优解。算法通过不断更新蜜蜂的位置和搜索策略,使得蜜蜂能够在局部和全局范围内搜索最优解。 禁忌搜索算法(Tabu Search,TS): TS是一种启发式搜索算法,通过在搜索过程中记录禁忌列表,避免搜索进入已经搜索过的局部最优解。算法通过不断更新搜索路径和禁忌列表,使得搜索能够跳出局部最优解,找到全局最优解。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

matlab科研助手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值