【优化算法】社会群体优化算法(SGO)【含Matlab源码 1449期】

举报
海神之光 发表于 2022/05/29 01:16:30 2022/05/29
【摘要】 一、获取代码方式 获取代码方式1: 通过订阅紫极神光博客付费专栏,凭支付凭证,私信博主,可获得此代码。 获取代码方式2: 完整代码已上传我的资源:【优化算法】社会群体优化算法(SGO)【含Matlab...

一、获取代码方式

获取代码方式1:
通过订阅紫极神光博客付费专栏,凭支付凭证,私信博主,可获得此代码。

获取代码方式2:
完整代码已上传我的资源:【优化算法】社会群体优化算法(SGO)【含Matlab源码 1449期】

备注:
订阅紫极神光博客付费专栏,可免费获得1份代码(有效期为订阅日起,三天内有效);

二、社会群体优化算法简介

社会群体搜索算法借鉴了生物界中动物的社会等级制度以及协作行为.在一些群居性动物的社会群体中,有着严格的等级制度,群体中每一个个体都有着各自的分工和职能.如狼群,一个狼群是由一个或数个家庭组成的,狼群中有头狼和其他的普通公狼.在捕食猎物的过程中,头狼根据自身的意志进行行动,狼群会听从头狼的指挥和自身意志而进行捕猎活动,通过协作来提高捕猎的成功率.参考上述狼群的行为,本文在社会群体算法模型中定义了以下3种类型的行为: 1)个体根据自己的意愿进行行动; 2)个体根据他人的意愿进行行动; 3)个体消极行动被整个群体淘汰.根据社会群体的职能分工,我们引入决策因子λ作为预测群体中的个体将会作出何种行为的一个评估值,决策因子的大小决定了种群中每个个体的行为.决策因子体现了个体自主意志力的大小,其数值越大个体自主意志力越强,其影响力也越大,受到其他个体影响的可能性就越小;反之,决策因子数值
越小,个体的自主意志力就越弱,其在群体中的影响力也就越小,越容易受到其他个体的影响.根据决策因子,群体中的个体会被分成4类:第 1类首领,指的是在整个群体中最优秀最具权威 的个体,它的行动只遵循其自身的意愿;第2类领导者是种群中最优秀的一部分个体,仅次于首领,同样具有极高的地位和权威,是群体的高级阶层,他们会根据自身的意愿去进行行动,唯一能够影响它们的就是首领(利用群体的历史信息);而第3类追随者则是比领导者更低级的个体,属于群体中的普通阶层,它们会同时进行2种行动,一种是追随领导者或者首领进行变化,向领导者靠拢(利用种群的历史信息以及加快搜索速度),而另一种行动则是根据自身的意愿进行行动;种群中剩下的一部分个体组成了第
4类淘汰者群体,这些个体是群体中最差的一部 分个体,对于整个搜索过程几乎起不到任何作用,因此淘汰者将会被群体抛弃,每抛弃一个淘汰者就会产生一个新的个体来替代它,使得种群始终保持一定的规模(这样做可以在不增加种群规模的情况下增加搜索范围).社会群体搜索算法旨在搜索速度和避免早熟之间取得平衡.相比粒子群算法,社会群体算法对群体的分类减少了早熟的概率,交叉变异和淘汰机制的引入增加了搜索范围,减少了陷入局部最优的可能;同时,相比遗传算法历史反馈信息利用不充分、搜索速度较慢、单向信息传递机制的缺点,社会群体搜索算法使用了 自 身 的 一 套 信 息 反 馈 机 制———领 导-追随机制。

三、部分源代码

%--------------------------------------------------------------------------
% % Developed in MATLAB R2016a
 

clc;
clear all;
close all;

'MSGO'

pn=30; %population size
gn=250; %maximum number of iteration
% dim=30; %dimension of the fuction
% lb=-30; %lower bound
% ub=30;  %upper bound

func_no=21;
[lb,ub,dim]=Test_Functions_Range(func_no);

[fitsgo,objvalue]=msgofunction(pn,dim,gn,lb,ub,func_no);
 
objvalue
fitsgo;

if objvalue>0
     semilogy(fitsgo,'r','LineWidth',2);
 else
     plot(fitsgo,'r','LineWidth',2);
 end
 xlabel('Iterations');
 ylabel('Fitness');
 title('Convergence characteristics')
 
% for i=1:5
%     point(i)=i;
% end

%plot(point,fitsgo(point),'-hb');

% %% 
% title('Convergence characteristics')
% %% 
% semilogy(fitsgo)
% %plot(fitsgo)
% xlabel('Number of Iterations');
% ylabel('Fitness value');
% %axis tight
 grid on
% legend('MSGO','SouthEast');
% 
%--------------------------------------------------------------------------
% % Developed in MATLAB R2016a
% The code is based on the following papers.
% A. Naik, A. Abraham and S.C. Satapathy(2020), Modified Social Group Optimization-a meta-heuristic 
% algorithm to solve Short-term Hydrothermal Scheduling, Applied softcomputing,doi:10.1016/j.asoc.2020.106524 
%--------------------------------------------------------------------------

function[fit,objvalue]=msgofunction(pn,dim,gn,lb,ub,func_no)
obj=@Test_Functions;
%Test_Functions(pop(i,:),func_no,dim);
pop=lb+rand(pn,dim)*(ub-lb);
c=0.2;
for i=1:pn
   f(i)=obj(pop(i,:),func_no,dim);
end
[value ibest]=min(f);
% from here iteration start
fit=zeros(gn,1);
for g=1:gn
% improvement due to best person of the group
[value ibest]=min(f);
value;
guru=pop(ibest,:);
for i=1:pn
     for j=1:dim
     newpop(i,j)=c*pop(i,j)+rand*(guru(j)-pop(i,j));
          if((newpop(i,j)<lb))
              newpop(i,j)=lb;
          end
          if((newpop(i,j)>ub))
              newpop(i,j)=ub;
          end
     end

f1=obj(newpop(i,:),func_no,dim);
       
     if(f1<f(i))
         pop(i,:)=newpop(i,:);
         f(i)=f1;
     end  
end
 [a b]=min(f);
  gpop=pop(b,:);
  SAP=0.7;
             
for i=1:pn
        r1=floor(1+rand*pn);
        while(r1==i)
            r1=floor(1+rand*pn);
        end
        if(f(i)<f(r1))
            if rand>SAP
                 for j=1:dim
                     popnew(i,j)=pop(i,j)+rand*(pop(i,j)-pop(r1,j))+rand*(gpop(j)-pop(i,j));
                     if(popnew(i,j)<lb)
                         popnew(i,j)=lb;
                     end
                     if(popnew(i,j)>ub)
                         popnew(i,j)=ub;
                     end
                 end
            
            else
                 for j=1:dim
                      popnew(i,:)=lb+rand*(ub-lb); 
                 end
            end
        else
            for j=1:dim
                popnew(i,j)=pop(i,j)+rand*(pop(r1,j)-pop(i,j))+rand*(gpop(j)-pop(i,j));
                if(popnew(i,j)<lb)
                     popnew(i,j)=lb;
                end
                if(popnew(i,j)>ub)
                     popnew(i,j)=ub;
                end
            end
        end
end
               
for i=1:pn

f2(i)=obj(popnew(i,:),func_no,dim);   
    if(f2(i)<f(i))
       pop(i,:)=popnew(i,:);
       f(i)=f2(i);
    end 
end
%end of learner phase
[minvalue position]=min(f);
fit(g)=minvalue;
objvalue=fit(g)
end

end
 
 











  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157

三、运行结果

在这里插入图片描述

四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 包子阳,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,2016.
[2]张岩,吴水根.MATLAB优化算法源代码[M].清华大学出版社,2017.
[3]冯翔,马美怡,施尹,虞慧群.基于社会群体搜索算法的机器人路径规划[J].计算机研究与发展. 2013,50(12)

文章来源: qq912100926.blog.csdn.net,作者:海神之光,版权归原作者所有,如需转载,请联系作者。

原文链接:qq912100926.blog.csdn.net/article/details/120937636

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。