当前位置:   article > 正文

改进粒子群算法求解电力系统经济调度问题(Matlab实现)_基于混沌粒子群算法的变压器经济运行matlab

基于混沌粒子群算法的变压器经济运行matlab

 目录

1 相关知识点

2 Matlab完整代码实现 

3 结果及可视化

1 相关知识点

                                  这里写图片描述

这里总结一位博主的目录:梳理如下:

2 Matlab完整代码实现 

知识点讲解完毕,下面就是Matlab代码:

  1. clc;
  2. clear;
  3. close all;
  4. %% 经济调度问题
  5. extmodel=CreateModel();
  6. CostFunction=@(x) MyCostExt(x,extmodel); % 成本函数(目标函数)
  7. nVar=extmodel.nPlant; % 发电机台数(决策变量的个数)
  8. VarSize=[1 nVar]; % 决策变量矩阵的大小
  9. VarMin=0; % 变量下限
  10. VarMax=1; % 变量上限
  11. %% 粒子群算法相关参数
  12. MaxIt=100; % 最大迭代次数
  13. nPop=10; % 总群数量
  14. % w=1; % 惯性权重
  15. % wdamp=0.99; % 惯性重量阻尼比
  16. % c1=2; % 个体学习系数
  17. % c2=2; % 种群学习系数
  18. %% 约束系数
  19. phi1=2.05;
  20. phi2=2.05;
  21. phi=phi1+phi2;
  22. chi=2/(phi-2+sqrt(phi^2-4*phi));
  23. w=chi; % 惯性权重
  24. wdamp=1; % 惯性重量阻尼比
  25. c1=chi*phi1; % 个体学习系数
  26. c2=chi*phi2; % 种群学习系数
  27. %% 飞行速度限制
  28. VelMax=0.1*(VarMax-VarMin);
  29. VelMin=-VelMax;
  30. %% 初始化
  31. empty_particle.Position=[];
  32. empty_particle.Cost=[];
  33. empty_particle.Out=[];
  34. empty_particle.Velocity=[];
  35. empty_particle.Best.Position=[];
  36. empty_particle.Best.Cost=[];
  37. empty_particle.Best.Out=[];
  38. particle=repmat(empty_particle,nPop,1);
  39. BestSol.Cost=inf;
  40. for i=1:nPop
  41. %=====初始化粒子群位置===============
  42. particle(i).Position=unifrnd(VarMin,VarMax,VarSize);
  43. %=====初始化速度======
  44. particle(i).Velocity=zeros(VarSize);
  45. %=====目标函数计算===========
  46. [particle(i).Cost, particle(i).Out]=CostFunction(particle(i).Position);
  47. %====更新粒子个体最优=====
  48. particle(i).Best.Position=particle(i).Position;
  49. particle(i).Best.Cost=particle(i).Cost;
  50. particle(i).Best.Out=particle(i).Out;
  51. %====更新粒子群全局最优========
  52. if particle(i).Best.Cost<BestSol.Cost
  53. BestSol=particle(i).Best;
  54. end
  55. end
  56. BestCost=zeros(MaxIt,1);
  57. %% PSO 主循环
  58. for it=1:MaxIt
  59. for i=1:nPop
  60. %============更新速度(跟着公式写就可以啦)===============
  61. particle(i).Velocity = w*particle(i).Velocity ...
  62. +c1*rand(VarSize).*(particle(i).Best.Position-particle(i).Position) ...
  63. +c2*rand(VarSize).*(BestSol.Position-particle(i).Position);
  64. %============适用速度限制============
  65. particle(i).Velocity = max(particle(i).Velocity,VelMin);
  66. particle(i).Velocity = min(particle(i).Velocity,VelMax);
  67. %============更新位置================
  68. particle(i).Position = particle(i).Position + particle(i).Velocity;
  69. IsOutside=(particle(i).Position<VarMin | particle(i).Position>VarMax);
  70. particle(i).Velocity(IsOutside)=-particle(i).Velocity(IsOutside);
  71. %============适用位置限制============
  72. particle(i).Position = max(particle(i).Position,VarMin);
  73. particle(i).Position = min(particle(i).Position,VarMax);
  74. %============计算目标函数===========
  75. [particle(i).Cost, particle(i).Out] = CostFunction(particle(i).Position);
  76. %==========更新个体最优==========
  77. if particle(i).Cost<particle(i).Best.Cost
  78. particle(i).Best.Position=particle(i).Position;
  79. particle(i).Best.Cost=particle(i).Cost;
  80. particle(i).Best.Out=particle(i).Out;
  81. %=======更新全局最优============
  82. if particle(i).Best.Cost<BestSol.Cost
  83. BestSol=particle(i).Best;
  84. end
  85. end
  86. end
  87. BestCost(it)=BestSol.Cost;
  88. disp(['迭代次数' num2str(it) ': 最优解为 = ' num2str(BestCost(it))]);
  89. w=w*wdamp;
  90. end
  91. %% 结果
  92. figure;
  93. plot(BestCost,'LineWidth',2);
  94. xlabel('迭代次数');
  95. ylabel('最优解');
  1. function results=RunInternalPSO(intmodel)
  2. disp('运行粒子群算法 ...');
  3. %% 本文参数定义
  4. CostFunction=@(x) MyCost(x,intmodel); % 目标函数
  5. nVar=intmodel.nPlant; %决策变量个数
  6. VarSize=[1 nVar]; % 决策变量矩阵的大小
  7. VarMin=0; %变量下限
  8. VarMax=1; %变量上
  9. %% 粒子群参数
  10. MaxIt=100;
  11. nPop=50;
  12. % w=1;
  13. % wdamp=0.99;
  14. % c1=2;
  15. % c2=2;
  16. %% 约束系数
  17. phi1=2.05;
  18. phi2=2.05;
  19. phi=phi1+phi2;
  20. chi=2/(phi-2+sqrt(phi^2-4*phi));
  21. w=chi;
  22. wdamp=1;
  23. c1=chi*phi1;
  24. c2=chi*phi2;
  25. %% 速度限制
  26. VelMax=0.1*(VarMax-VarMin);
  27. VelMin=-VelMax;
  28. %% 初始化
  29. empty_particle.Position=[];
  30. empty_particle.Cost=[];
  31. empty_particle.Out=[];
  32. empty_particle.Velocity=[];
  33. empty_particle.Best.Position=[];
  34. empty_particle.Best.Cost=[];
  35. empty_particle.Best.Out=[];
  36. particle=repmat(empty_particle,nPop,1);
  37. BestSol.Cost=inf;
  38. for i=1:nPop
  39. % 初始化位置
  40. particle(i).Position=unifrnd(VarMin,VarMax,VarSize);
  41. % 初始化速度
  42. particle(i).Velocity=zeros(VarSize);
  43. % 目标函数计算
  44. [particle(i).Cost, particle(i).Out]=CostFunction(particle(i).Position);
  45. % 个体最优
  46. particle(i).Best.Position=particle(i).Position;
  47. particle(i).Best.Cost=particle(i).Cost;
  48. particle(i).Best.Out=particle(i).Out;
  49. % 全局最优
  50. if particle(i).Best.Cost<BestSol.Cost
  51. BestSol=particle(i).Best;
  52. end
  53. end
  54. BestCost=zeros(MaxIt,1);
  55. %% PSO主循环
  56. for it=1:MaxIt
  57. for i=1:nPop
  58. % 更新速度
  59. particle(i).Velocity = w*particle(i).Velocity ...
  60. +c1*rand(VarSize).*(particle(i).Best.Position-particle(i).Position) ...
  61. +c2*rand(VarSize).*(BestSol.Position-particle(i).Position);
  62. %速度限制
  63. particle(i).Velocity = max(particle(i).Velocity,VelMin);
  64. particle(i).Velocity = min(particle(i).Velocity,VelMax);
  65. % 更新位置
  66. particle(i).Position = particle(i).Position + particle(i).Velocity;
  67. IsOutside=(particle(i).Position<VarMin | particle(i).Position>VarMax);
  68. particle(i).Velocity(IsOutside)=-particle(i).Velocity(IsOutside);
  69. % 位置限制
  70. particle(i).Position = max(particle(i).Position,VarMin);
  71. particle(i).Position = min(particle(i).Position,VarMax);
  72. % 目标函数计算
  73. [particle(i).Cost, particle(i).Out] = CostFunction(particle(i).Position);
  74. %更新个体最优
  75. if particle(i).Cost<particle(i).Best.Cost
  76. particle(i).Best.Position=particle(i).Position;
  77. particle(i).Best.Cost=particle(i).Cost;
  78. particle(i).Best.Out=particle(i).Out;
  79. % 更新全局最优
  80. if particle(i).Best.Cost<BestSol.Cost
  81. BestSol=particle(i).Best;
  82. end
  83. end
  84. end
  85. BestCost(it)=BestSol.Cost;
  86. w=w*wdamp;
  87. end
  88. %% 结果
  89. results.BestSol=BestSol;
  90. results.BestCost=BestCost;
  91. disp('粒子群结束.');
  92. end

function results=RunInternalPSO(intmodel)

    disp('运行粒子群算法 ...');

    %% 本文参数定义

    CostFunction=@(x) MyCost(x,intmodel);        % 目标函数

    nVar=intmodel.nPlant;             %决策变量个数

    VarSize=[1 nVar];   % 决策变量矩阵的大小

    VarMin=0;         %变量下限
    VarMax=1;         %变量上

    %% 粒子群参数

    MaxIt=100;      

    nPop=50;        

    % w=1;           
    % wdamp=0.99;     
    % c1=2;          
    % c2=2;           

    %% 约束系数
    phi1=2.05;
    phi2=2.05;
    phi=phi1+phi2;
    chi=2/(phi-2+sqrt(phi^2-4*phi));
    w=chi;          
    wdamp=1;        
    c1=chi*phi1;    
    c2=chi*phi2;    

    %% 速度限制
    VelMax=0.1*(VarMax-VarMin);
    VelMin=-VelMax;

    %% 初始化

    empty_particle.Position=[];
    empty_particle.Cost=[];
    empty_particle.Out=[];
    empty_particle.Velocity=[];
    empty_particle.Best.Position=[];
    empty_particle.Best.Cost=[];
    empty_particle.Best.Out=[];

    particle=repmat(empty_particle,nPop,1);

    BestSol.Cost=inf;

    for i=1:nPop

        % 初始化位置
        particle(i).Position=unifrnd(VarMin,VarMax,VarSize);

        % 初始化速度
        particle(i).Velocity=zeros(VarSize);

        % 目标函数计算
        [particle(i).Cost, particle(i).Out]=CostFunction(particle(i).Position);

        % 个体最优
        particle(i).Best.Position=particle(i).Position;
        particle(i).Best.Cost=particle(i).Cost;
        particle(i).Best.Out=particle(i).Out;

        % 全局最优
        if particle(i).Best.Cost<BestSol.Cost

            BestSol=particle(i).Best;

        end

    end

    BestCost=zeros(MaxIt,1);


    %% PSO主循环

    for it=1:MaxIt

        for i=1:nPop

            % 更新速度
            particle(i).Velocity = w*particle(i).Velocity ...
                +c1*rand(VarSize).*(particle(i).Best.Position-particle(i).Position) ...
                +c2*rand(VarSize).*(BestSol.Position-particle(i).Position);

            %速度限制
            particle(i).Velocity = max(particle(i).Velocity,VelMin);
            particle(i).Velocity = min(particle(i).Velocity,VelMax);

            % 更新位置
            particle(i).Position = particle(i).Position + particle(i).Velocity;

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

            % 位置限制
            particle(i).Position = max(particle(i).Position,VarMin);
            particle(i).Position = min(particle(i).Position,VarMax);

            % 目标函数计算
            [particle(i).Cost, particle(i).Out] = CostFunction(particle(i).Position);

            %更新个体最优
            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.Out=particle(i).Out;

                % 更新全局最优
                if particle(i).Best.Cost<BestSol.Cost

                    BestSol=particle(i).Best;

                end

            end

        end

        BestCost(it)=BestSol.Cost;

       

        w=w*wdamp;

    end

    %% 结果
    results.BestSol=BestSol;
    results.BestCost=BestCost;

    disp('粒子群结束.');
    
end

完整代码:评论区回复关键字

3 结果及可视化

 

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号