Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
|
![]() |
#1 |
普通会员
注册日期: 2008-10-06
年龄: 25
帖子: 53
声望力: 18 ![]() |
![]()
此源码是对人工鱼群算法的一种实现,用于无约束连续函数的优化求解,对于含有约束的情况,可以先使用罚函数等方法,把问题处理成无约束的模型,再使用本源码进行求解,本源码由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 |
![]() |
![]() |
![]() |
#2 | |
初级会员
注册日期: 2010-08-23
年龄: 36
帖子: 1
声望力: 0 ![]() |
![]() 引用:
|
|
![]() |
![]() |
![]() |
#3 |
初级会员
注册日期: 2008-12-15
年龄: 48
帖子: 9
声望力: 0 ![]() |
![]()
这么好的帖子,没人回复,可惜!
|
![]() |
![]() |