资源简介
万有引力测试函数程序,对初学者应该能够有多帮助,有需要的同学拿去。
代码片段和文件信息
function [FbestLbestBestChartMeanChart]=GSA(F_indexNmax_itElitistCheckmin_flagRpower)
%V:速度 a:加速度 M:质量.Ma=Mp=Mi=M; dim:待求解未知量维数 N:智能粒子个位数
%X:种群个体位置.dim-by-N matrix. R:种群之间的距离
%[low-up]:取值范围 %Rnorm:范数 %Rpower:Power of R
Rnorm=2;%2阶范数,即欧氏距离
%获取待求解目标方程的未知数个数个体及取值范围
[lowupdim]=test_functions_range(F_index);
%随机的初始化个体
X=initialization(dimNuplow);
%适应度值数组初始化
BestChart=[];
MeanChart=[];
V=rand(Ndim);%速度初始化
%V=zeros(Ndim);%速度初始化
for iteration=1:max_it%迭代开始
%iteration
%检查x个体是否在取值范围内
X=space_bound(Xuplow);
%计算适应度值
fitness=evaluateF(XF_index);
if min_flag==1
[best best_X]=min(fitness);%minimization.
else
[best best_X]=max(fitness);%maximization.
end
if iteration==1
Fbest=best;Lbest=X(best_X:);
end
if min_flag==1
if best Fbest=best;Lbest=X(best_X:);
end
else
if best>Fbest%极大值求解
Fbest=best;Lbest=X(best_X:);
end
end
BestChart=[BestChart Fbest];%最优适应度值
MeanChart=[MeanChart mean(fitness)];%平均适应度值
%M计算
[M]=massCalculation(fitnessmin_flag);
%万有引力常数计算
G=Gconstant(iterationmax_it);
%加速度a计算
a=Gfield(MXGRnormRpowerElitistCheckiterationmax_it);
%个体更新
[XV]=move(XaV);
end%迭代终止
%3.获取待求解目标方程的未知数个数及取值范围
function [downupdim]=test_functions_range(F_index)
dim=30;
if F_index==1
down=-100;up=100;
end
if F_index==2
down=-10;up=10;
end
if F_index==3
down=-10;up=10;
end
if F_index==4
down=-100;up=100;
end
if F_index==5
down=-30;up=30;
end
if F_index==6
down=-1.28;up=1.28;
end
if F_index==7
down=-5.12;up=5.12;
end
%4.随机的初始化个体
function [X]=initialization(dimNupdown)
%dim:未知数个数,粒子个数
%N:种群数
%up:取值上限
%down:取值下限
%X:初始化的个体值
if size(up2)==1
X=rand(Ndim).*(up-down)+down;
end
if size(up2)>1
for i=1:dim
high=up(i);low=down(i);
X(:i)=rand(N1).*(high-low)+low;
end
end
function X=space_bound(X0uplow)
%约定个体在相应的up和down取值范围内
[Ndim]=size(X0);
X=zeros(Nsize(X02));
for i=1:N
Tp=X0(i:)>up;Tm=X0(i:) X(i:)=(X0(i:).*(~(Tp+Tm)))+((rand(1dim).*(up-low)+low).*(Tp+Tm));
end
function fitness=evaluateF(XF_index)
%计算适应度值
[Ndim]=size(X);
fitness=zeros(N1);
for i=1:N%L第i个种群,包含一组未知量解得个体
L=X(i:);
%第i个种群的适应度计算
fitness(i)=test_functions(LF_indexdim);
end
%相应的目标函数如下
%适应度函数
function fit=test_functions(LF_index~)
%不同的适应度函数
if F_index==1
fit=sum(L.^2);
end
if F_index==2
fit=sum(abs(L))+prod(abs(L));
end
if F_index==3
fit=0;
for i=1:30
fit=fit+sum(L(1:i))^2;
end
end
if F_index==4
fit=max(abs(L));
end
if F_index==5
fit=sum(100*(L(2:30)-(L(1:30-1).^2)).^2+(L(1:30-1)-1).^2);
end
if F_index==6
fit=sum([1:30].*(L.^4))+rand;
end
if F_index==7
fit=sum(L.^2-10*cos(2*pi.*L)+10);
end
%万有引力中质量M的计算程序
fu
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 4738 2017-11-02 11:28 测试函数程序\GSA.m
文件 611 2017-11-02 11:08 测试函数程序\wanyouyinli1.m
目录 0 2017-11-02 13:15 测试函数程序\
- 上一篇:数据库原理及应用教程(第四版|微课版)
- 下一篇:电机及拖动基础 第四版 习题解答
评论
共有 条评论