Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 广告与招聘
广告与招聘 这里是发招聘信息和广告的地方
回复
 
主题工具 显示模式
旧 2010-03-06, 17:13   #1
greensim
普通会员
 
注册日期: 2008-10-06
年龄: 25
帖子: 53
声望力: 18
greensim 正向着好的方向发展
默认 【原创】无约束连续函数优化的人工鱼群算法通用MATLAB源码

此源码是对人工鱼群算法的一种实现,用于无约束连续函数的优化求解,对于含有约束的情况,可以先使用罚函数等方法,把问题处理成无约束的模型,再使用本源码进行求解,本源码由GreenSim团队原创,转载请注明,有意购买源码或代写相关程序,请与GreenSim团队联系。
function [BESTX,BESTY,ALLX,ALLY]=FSOUCP(K,N,V,Delta,L,LB,UB)
%% Fish Swarm Optimization for Unconstrained Continuous Problem
%% FSOUCP.m
%% 无约束连续函数的人工鱼群优化算法
% GreenSim团队原创作品,转载请注明
% 欢迎访问GreenSim——算法仿真团队→http://blog.sina.com.cn/greensim
%% 此函数实现人工鱼群算法,用于求解无约束连续函数最小化问题
%% 对于最大化问题,请先将其加负号转化为最小化问题
%% 输入参数列表
% K 迭代次数
% N 鱼群规模
% V 人工鱼的感知范围
% Delta 拥挤程度的判决门限,取值0~1之间
% L 觅食行为的试探次数
% LB 决策变量的下界,M×1的向量
% UB 决策变量的上界,M×1的向量
%% 输出参数列表
% BESTX K×1细胞结构,每一个元素是M×1向量,记录每一代的最优人工鱼的状态
% BESTY K×1矩阵,记录每一代的最优人工鱼的评价函数值
% ALLX K×1细胞结构,每一个元素是M×N矩阵,记录每一代人工鱼的位置
% ALLY K×N矩阵,记录每一代人工鱼的评价函数值
%% 测试函数设置
% 测试函数用单独的子函数编写好,在子函数FIT.m中修改要调用的测试函数名即可
% 注意:决策变量的下界LB和上界UB,要与测试函数保持一致
%% 参考设置
%[BESTX,BESTY,ALLX,ALLY]=FSOUCP(50,30,0.5,0.3,20,LB,UB)

%% 第一步:
M=length(LB);%决策变量的个数
%蚁群位置初始化
X=zeros(M,N);
for i=1:M
x=unifrnd(LB(i),UB(i),1,N);
X(i,:)=x;
end
%输出变量初始化
ALLX=cell(K,1);%细胞结构,每一个元素是M×N矩阵,记录每一代的个体
ALLY=zeros(K,N);%K×N矩阵,记录每一代评价函数值
BESTX=cell(K,1);%细胞结构,每一个元素是M×1向量,记录每一代的最优个体
BESTY=zeros(K,1);%K×1矩阵,记录每一代的最优个体的评价函数值
k=1;%迭代计数器初始化

%% 第二步:迭代过程
while k<=K
NewX=zeros(M,N);
NewY=zeros(1,N);
for n=1:N
x=X(:,n);
Xnb=AFneighbour(n,X,V);
NN=size(Xnb,2);
if NN==0
xx=AFprey(x,V,L,LB,UB);
elseif NN>=3
xx=AFswarm(x,Xnb,N,Delta,V,L,LB,UB);
else
xx=AFprey(x,V,L,LB,UB);
end
NewX(:,n)=xx;
end
for n=1:N
NewY(n)=FIT(NewX(:,n));
end
X=NewX;
Y=NewY;
ALLX{k}=X;
ALLY(k,:)=Y;
minY=min(Y);
pos=find(Y==minY);
BESTX{k}=X(:,pos(1));
BESTY(k)=minY;
disp(k);
k=k+1;
end
%% 绘图
BESTY2=BESTY;
BESTX2=BESTX;
for k=1:K
TempY=BESTY(1:k);
minTempY=min(TempY);
posY=find(TempY==minTempY);
BESTY2(k)=minTempY;
BESTX2{k}=BESTX{posY(1)};
end
BESTY=BESTY2;
BESTX=BESTX2;
plot(BESTY,'-ko','MarkerEdgeColor','k','MarkerFaceColor','k','MarkerSize',2)
ylabel('函数值')
xlabel('迭代次数')
grid on
function Xnb=AFneighbour(s,X,V)
%% 找出人工鱼感知范围内的邻居
%% 输入参数列表
% s 当前人工鱼的编号
% X M×N矩阵,人工鱼群
% V 人工鱼的感知范围
%% 输出参数列表
% Xnb 第s个人工鱼的邻居
%%
[M,N]=size(X);
xs=X(:,s);
Xnb=zeros(M,0);
for n=1:N
if n~=s
xn=X(:,n);
dx=xn-xs;
maxdx=max(dx);
mindx=min(dx);
if (maxdx<V)&&(mindx>V)
Xnb=[Xnb,xn];
end
end
end
function xx=AFprey(x,V,L,LB,UB)
%% 人工鱼觅食行为的子函数
%% 输入参数列表
% x 觅食行为之前的状态
% V 人工鱼的感知范围
% L 觅食行为的试探次数
% LB 决策变量的下界,M×1的向量
% UB 决策变量的上界,M×1的向量
%% 输出参数列表
% xx 觅食行为之后的状态
%%
M=length(x);
xx=zeros(M,1);
counter=0;
while 1
for m=1:M
q=x(m)+unifrnd(-V,V,1,1);
if q<LB(m)
q=LB(m);
end
if q>UB(m)
q=UB(m);
end
xx(m)=q;
end
counter=counter+1;
Fx=FIT(x);
Fxx=FIT(xx);
if Fxx<Fx
return
end
if counter>=L
return
end
end
__________________
算法设计、代写程序,欢迎访问GreenSim团队主页→
http://blog.sina.com.cn/greensim
greensim 当前离线   回复时引用此帖
旧 2010-08-23, 14:09   #2
zm1139569390
初级会员
 
注册日期: 2010-08-23
年龄: 36
帖子: 1
声望力: 0
zm1139569390 正向着好的方向发展
眨眼 【原创】无约束连续函数优化的人工鱼群算法通用MATLAB源码

引用:
作者: greensim 查看帖子
此源码是对人工鱼群算法的一种实现,用于无约束连续函数的优化求解,对于含有约束的情况,可以先使用罚函数等方法,把问题处理成无约束的模型,再使用本源码进行求解,本源码由GreenSim团队原创,转载请注明,有意购买源码或代写相关程序,请与GreenSim团队联系。
function [BESTX,BESTY,ALLX,ALLY]=FSOUCP(K,N,V,Delta,L,LB,UB)
%% Fish Swarm Optimization for Unconstrained Continuous Problem
%% FSOUCP.m
%% 无约束连续函数的人工鱼群优化算法
% GreenSim团队原创作品,转载请注明
% 欢迎访问GreenSim——算法仿真团队→http://blog.sina.com.cn/greensim
%% 此函数实现人工鱼群算法,用于求解无约束连续函数最小化问题
%% 对于最大化问题,请先将其加负号转化为最小化问题
%% 输入参数列表
% K 迭代次数
% N 鱼群规模
% V 人工鱼的感知范围
% Delta 拥挤程度的判决门限,取值0~1之间
% L 觅食行为的试探次数
% LB 决策变量的下界,M×1的向量
% UB 决策变量的上界,M×1的向量
%% 输出参数列表
% BESTX K×1细胞结构,每一个元素是M×1向量,记录每一代的最优人工鱼的状态
% BESTY K×1矩阵,记录每一代的最优人工鱼的评价函数值
% ALLX K×1细胞结构,每一个元素是M×N矩阵,记录每一代人工鱼的位置
% ALLY K×N矩阵,记录每一代人工鱼的评价函数值
%% 测试函数设置
% 测试函数用单独的子函数编写好,在子函数FIT.m中修改要调用的测试函数名即可
% 注意:决策变量的下界LB和上界UB,要与测试函数保持一致
%% 参考设置
%[BESTX,BESTY,ALLX,ALLY]=FSOUCP(50,30,0.5,0.3,20,LB,UB)

%% 第一步:
M=length(LB);%决策变量的个数
%蚁群位置初始化
X=zeros(M,N);
for i=1:M
x=unifrnd(LB(i),UB(i),1,N);
X(i,=x;
end
%输出变量初始化
ALLX=cell(K,1);%细胞结构,每一个元素是M×N矩阵,记录每一代的个体
ALLY=zeros(K,N);%K×N矩阵,记录每一代评价函数值
BESTX=cell(K,1);%细胞结构,每一个元素是M×1向量,记录每一代的最优个体
BESTY=zeros(K,1);%K×1矩阵,记录每一代的最优个体的评价函数值
k=1;%迭代计数器初始化

%% 第二步:迭代过程
while k<=K
NewX=zeros(M,N);
NewY=zeros(1,N);
for n=1:N
x=X(:,n);
Xnb=AFneighbour(n,X,V);
NN=size(Xnb,2);
if NN==0
xx=AFprey(x,V,L,LB,UB);
elseif NN>=3
xx=AFswarm(x,Xnb,N,Delta,V,L,LB,UB);
else
xx=AFprey(x,V,L,LB,UB);
end
NewX(:,n)=xx;
end
for n=1:N
NewY(n)=FIT(NewX(:,n));
end
X=NewX;
Y=NewY;
ALLX{k}=X;
ALLY(k,=Y;
minY=min(Y);
pos=find(Y==minY);
BESTX{k}=X(:,pos(1));
BESTY(k)=minY;
disp(k);
k=k+1;
end
%% 绘图
BESTY2=BESTY;
BESTX2=BESTX;
for k=1:K
TempY=BESTY(1:k);
minTempY=min(TempY);
posY=find(TempY==minTempY);
BESTY2(k)=minTempY;
BESTX2{k}=BESTX{posY(1)};
end
BESTY=BESTY2;
BESTX=BESTX2;
plot(BESTY,'-ko','MarkerEdgeColor','k','MarkerFaceColor','k','MarkerSize',2)
ylabel('函数值')
xlabel('迭代次数')
grid on
function Xnb=AFneighbour(s,X,V)
%% 找出人工鱼感知范围内的邻居
%% 输入参数列表
% s 当前人工鱼的编号
% X M×N矩阵,人工鱼群
% V 人工鱼的感知范围
%% 输出参数列表
% Xnb 第s个人工鱼的邻居
%%
[M,N]=size(X);
xs=X(:,s);
Xnb=zeros(M,0);
for n=1:N
if n~=s
xn=X(:,n);
dx=xn-xs;
maxdx=max(dx);
mindx=min(dx);
if (maxdx<V)&&(mindx>V)
Xnb=[Xnb,xn];
end
end
end
function xx=AFprey(x,V,L,LB,UB)
%% 人工鱼觅食行为的子函数
%% 输入参数列表
% x 觅食行为之前的状态
% V 人工鱼的感知范围
% L 觅食行为的试探次数
% LB 决策变量的下界,M×1的向量
% UB 决策变量的上界,M×1的向量
%% 输出参数列表
% xx 觅食行为之后的状态
%%
M=length(x);
xx=zeros(M,1);
counter=0;
while 1
for m=1:M
q=x(m)+unifrnd(-V,V,1,1);
if q<LB(m)
q=LB(m);
end
if q>UB(m)
q=UB(m);
end
xx(m)=q;
end
counter=counter+1;
Fx=FIT(x);
Fxx=FIT(xx);
if Fxx<Fx
return
end
if counter>=L
return
end
end
saffasdfghh
zm1139569390 当前离线   回复时引用此帖
旧 2012-06-15, 09:14   #3
jdx_2007
初级会员
 
jdx_2007 的头像
 
注册日期: 2008-12-15
年龄: 48
帖子: 9
声望力: 0
jdx_2007 正向着好的方向发展
默认 回复: 【原创】无约束连续函数优化的人工鱼群算法通用MATLAB源码

这么好的帖子,没人回复,可惜!
jdx_2007 当前离线   回复时引用此帖
回复

主题工具
显示模式

发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛启用 表情符号
论坛启用 [IMG] 代码
论坛禁用 HTML 代码



所有时间均为北京时间。现在的时间是 03:23


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.