小言_互联网的博客

(Matlab实现)蚂蚁狮子优化算法在电力系统中的应用

405人阅读  评论(0)

目录

1 知识一网打尽

2 蚂蚁狮子优化算法在电力系统经济调度中的应用 

 3 运行结果

4 Matlab代码实现

1 知识一网打尽

这里总结一位博主的电力系统经济调度目录

2 蚂蚁狮子优化算法在电力系统经济调度中的应用 

蚁狮或所谓的涂鸦虫是蚁蛉科家族的成员,属于神经翅目(网翅昆虫)。蚁狮的生命有两个关键阶段:幼虫和成虫。成年期仅持续 3-5 周,用于繁殖。另一方面,生命周期的延长阶段,即幼虫阶段,大部分用于猎杀他们最喜欢的猎物,即蚂蚁。蚁狮幼虫的狩猎行为独特而迷人。如图1所示,是蚂蚁狮子和它的狩猎机制。
                      

它们沿着圆形路径移动,并用它们巨大的下颚扔出沙子,在沙质土壤中形成小的(1-3 英寸长)漏斗形坑,如图2所示,以诱捕蚂蚁。

                    

他们躲在坑底下,等待蚂蚁或小昆虫被困。漏斗形坑的边缘非常锋利,小昆虫无法逃脱,很容易掉到陷阱底部,如图3所示。蚁狮还不断将沙子扔向陷阱的外缘,以阻止猎物的任何逃跑尝试。

                                 

最后,昆虫滑入坑底,被拉到土壤下并被蚁狮吃掉。猎物的残骸被扔到坑外。之后,蚁狮为后续的目标猎物修改坑。蚁狮的饥饿程度越高,它们挖的陷阱就越大。通过这种方式,蚁狮已经进化和调整,以提高它们的生存前景。

详细的数学模型见第一部分的知识一网打尽。

部分代码: 


  
  1. clc;
  2. clear;
  3. close all;
  4. warning off;
  5. %% 基于MOALO求解具有阀点效应的环境经济调度问题
  6. % 数有 5 列数据分别为燃料成本系数a,b,c和发电机组上下限约束。
  7. % 1.a ($/MW^ 2) 2. b $/MW 3. c ($) 4.机组下限(MW) 5.机组上限(MW)
  8. %行数表示发电机台数(n)
  9. data=[ 0.007 7 240 100 500
  10. 0.0095 10 200 50 200
  11. 0.009 8.5 220 80 300
  12. 0.009 11 200 50 150
  13. 0.008 10.5 220 50 200
  14. 0.0075 12 120 50 120];
  15. %% 网损系数
  16. B= 1e-4*[ 0.14 0.17 0.15 0.19 0.26 0.22
  17. 0.17 0.6 0.13 0.16 0.15 0.2
  18. 0.15 0.13 0.65 0.17 0.24 0.19
  19. 0.19 0.16 0.17 0.71 0.3 0.25
  20. 0.26 0.15 0.24 0.3 0.69 0.32
  21. 0.22 0.2 0.19 0.25 0.32 0.85
  22. ];
  23. %% 负荷需求(MW)
  24. Pd= 700;
  25. %% 目标函数
  26. ObjectiveFunction=@eldnba; %调用目标函数
  27. dim=length(data(:, 1));
  28. lb= 0;
  29. ub= 1;
  30. obj_no= 1;
  31. if size(ub, 2)== 1
  32. ub=ones( 1, dim)*ub;
  33. lb=ones( 1, dim)*lb;
  34. end
  35. %% 初始化蚁狮优化算法参数
  36. max_iter= 100;
  37. N= 100;
  38. ArchiveMaxSize= 100;
  39. Archive_X=zeros( 100, dim);
  40. Archive_F=ones( 100,obj_no)*inf;
  41. Archive_member_no= 0;
  42. r=(ub-lb)/ 2;
  43. V_max=(ub( 1)-lb( 1))/ 10;
  44. Elite_fitness=inf*ones( 1,obj_no);
  45. Elite_position=zeros( dim, 1);
  46. Ant_Position=initialization(N, dim,ub,lb);
  47. fitness=zeros(N, 2);
  48. V=initialization(N, dim,ub,lb);
  49. iter= 0;
  50. position_history=zeros(N,max_iter, dim);
  51. for iter= 1:max_iter
  52. for i= 1:N %首先计算所有的目标值
  53. Particles_F(i,:)=ObjectiveFunction(Ant_Position(:,i) ');
  54. if dominates(Particles_F(i,:),Elite_fitness)
  55. Elite_fitness=Particles_F(i,:);
  56. Elite_position=Ant_Position(:,i);
  57. end
  58. end
  59. [Archive_X, Archive_F, Archive_member_no]=UpdateArchive(Archive_X, Archive_F, Ant_Position, Particles_F, Archive_member_no);
  60. if Archive_member_no>ArchiveMaxSize
  61. Archive_mem_ranks=RankingProcess(Archive_F, ArchiveMaxSize, obj_no);
  62. [Archive_X, Archive_F, Archive_mem_ranks, Archive_member_no]=HandleFullArchive(Archive_X, Archive_F, Archive_member_no, Archive_mem_ranks, ArchiveMaxSize);
  63. else
  64. Archive_mem_ranks=RankingProcess(Archive_F, ArchiveMaxSize, obj_no);
  65. end
  66. Archive_mem_ranks=RankingProcess(Archive_F, ArchiveMaxSize, obj_no);
  67. index=RouletteWheelSelection( 1./(Archive_mem_ranks+ 1e-20));
  68. if index==- 1
  69. index= 1;
  70. end
  71. Elite_fitness=Archive_F(index,:);
  72. Elite_position=Archive_X(index,:) ';
  73. Random_antlion_fitness=Archive_F( 1,:);
  74. Random_antlion_position=Archive_X( 1,:) ';
  75. for i= 1:N
  76. index= 0;
  77. neighbours_no= 0;
  78. RA=Random_walk_around_antlion( dim,max_iter,lb,ub, Random_antlion_position ',iter);
  79. [RE]=Random_walk_around_antlion( dim,max_iter,lb,ub, Elite_position ',iter);
  80. Ant_Position(:,i)=(RE(iter,:) '+RA(iter,:)')/2;
  81. Flag4ub=Ant_Position(:,i)>ub ';
  82. Flag4lb=Ant_Position(:,i)<lb ';
  83. Ant_Position(:,i)=(Ant_Position(:,i).*(~(Flag4ub+Flag4lb)))+ub '.*Flag4ub+lb'.*Flag4lb;
  84. end
  85. display([ '在迭代时 ', num2str(iter), ', ', num2str(Archive_member_no), ' 非支配解决方案为']);
  86. K(iter)=Elite_fitness;
  87. end
  88. [F P Pl]=eldnba(Elite_position)
  89. plot(K)
  90. grid
  91. title( '迭代次数与最佳函数值');
  92. xlabel( '迭代次数')
  93. ylabel( '函数值')


clc;
clear;
close all;
warning off;

%% 基于MOALO求解具有阀点效应的环境经济调度问题
% 数有 5 列数据分别为燃料成本系数a,b,c和发电机组上下限约束。
% 1.a ($/MW^2) 2. b $/MW 3. c ($) 4.机组下限(MW) 5.机组上限(MW)
%行数表示发电机台数(n)
data=[0.007    7    240    100    500
0.0095    10    200    50    200
0.009    8.5    220    80    300
0.009    11    200    50    150
0.008    10.5    220    50    200
0.0075    12    120    50    120];

%% 网损系数
B=1e-4*[0.14    0.17    0.15    0.19    0.26    0.22
0.17    0.6    0.13    0.16    0.15    0.2
0.15    0.13    0.65    0.17    0.24    0.19
0.19    0.16    0.17    0.71    0.3    0.25
0.26    0.15    0.24    0.3    0.69    0.32
0.22    0.2    0.19    0.25    0.32    0.85
];
%% 负荷需求(MW)
Pd=700;

%% 目标函数
ObjectiveFunction=@eldnba;   %调用目标函数
dim=length(data(:,1));
lb=0;
ub=1;
obj_no=1;

if size(ub,2)==1
    ub=ones(1,dim)*ub;
    lb=ones(1,dim)*lb;
end

%% 初始化蚁狮优化算法参数
max_iter=100;
N=100;
ArchiveMaxSize=100;

Archive_X=zeros(100,dim);
Archive_F=ones(100,obj_no)*inf;

Archive_member_no=0;

r=(ub-lb)/2;
V_max=(ub(1)-lb(1))/10;

Elite_fitness=inf*ones(1,obj_no);
Elite_position=zeros(dim,1);

Ant_Position=initialization(N,dim,ub,lb);
fitness=zeros(N,2);

V=initialization(N,dim,ub,lb);
iter=0;

position_history=zeros(N,max_iter,dim);

for iter=1:max_iter
    
    for i=1:N %首先计算所有的目标值
        Particles_F(i,:)=ObjectiveFunction(Ant_Position(:,i)');
        if dominates(Particles_F(i,:),Elite_fitness)
            Elite_fitness=Particles_F(i,:);
            Elite_position=Ant_Position(:,i);
        end
    end
    
    [Archive_X, Archive_F, Archive_member_no]=UpdateArchive(Archive_X, Archive_F, Ant_Position, Particles_F, Archive_member_no);
    
    if Archive_member_no>ArchiveMaxSize
        Archive_mem_ranks=RankingProcess(Archive_F, ArchiveMaxSize, obj_no);
        [Archive_X, Archive_F, Archive_mem_ranks, Archive_member_no]=HandleFullArchive(Archive_X, Archive_F, Archive_member_no, Archive_mem_ranks, ArchiveMaxSize);
    else
        Archive_mem_ranks=RankingProcess(Archive_F, ArchiveMaxSize, obj_no);
    end
    
    Archive_mem_ranks=RankingProcess(Archive_F, ArchiveMaxSize, obj_no);

    index=RouletteWheelSelection(1./(Archive_mem_ranks+1e-20));
    if index==-1
        index=1;
    end
    Elite_fitness=Archive_F(index,:);
    Elite_position=Archive_X(index,:)';
    
    Random_antlion_fitness=Archive_F(1,:);
    Random_antlion_position=Archive_X(1,:)';
    
    for i=1:N
        
        index=0;
        neighbours_no=0;
        
        RA=Random_walk_around_antlion(dim,max_iter,lb,ub, Random_antlion_position',iter);
        
        [RE]=Random_walk_around_antlion(dim,max_iter,lb,ub, Elite_position',iter);
        
        Ant_Position(:,i)=(RE(iter,:)'+RA(iter,:)')/2;
        
        
        
        Flag4ub=Ant_Position(:,i)>ub';
        Flag4lb=Ant_Position(:,i)<lb';
        Ant_Position(:,i)=(Ant_Position(:,i).*(~(Flag4ub+Flag4lb)))+ub'.*Flag4ub+lb'.*Flag4lb;
       
    end
    display(['在迭代时 ', num2str(iter), ', ', num2str(Archive_member_no), ' 非支配解决方案为']);
 K(iter)=Elite_fitness;
 end
[F P Pl]=eldnba(Elite_position)
plot(K)
grid
title('迭代次数与最佳函数值');
xlabel('迭代次数')
ylabel('函数值')  

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

 3 运行结果

4 Matlab代码实现


转载:https://blog.csdn.net/weixin_61181717/article/details/127965136
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场