您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 13基于蚁群算法的连续函数优化通用MATLAB源代码
1、欢迎访问GreenSim团队主页→邮箱:greensim@163.com第1页基于蚁群算法的连续函数优化通用MATLAB源代码此源码是对人工蚁群算法的一种实现,用于无约束连续函数的优化求解,对于含有约束的情况,可以先使用罚函数等方法,把问题处理成无约束的模型,再使用本源码进行求解。function[BESTX,BESTY,ALLX,ALLY]=ACOUCP(K,N,Rho,Q,Lambda,LB,UB)%%AntColonyOptimizationforUnconstrainedContinuousProblem%%ACOUCP.m%%无约束连续函数的蚁群优化算法%%此函数实现蚁群算法,用于求解无约束连续函数最小化问题%%对于最大化问题,请先将其加负号转化为最小化问题%GreenSim团队——专业级算法设计&代写程序%欢迎访问GreenSim团队主页→输入参数列表%K迭代次数%N蚁群规模%Rho信息素蒸发系数,取值0~1之间,推荐取值0.7~0.95%Q信息素增加强度,大于0,推荐取值1左右%Lambda蚂蚁爬行速度,取值0~1之间,推荐取值0.1~0.5%LB决策变量的下界,M×1。
2、的向量%UB决策变量的上界,M×1的向量%%输出参数列表%BESTXK×1细胞结构,每一个元素是M×1向量,记录每一代的最优蚂蚁%BESTYK×1矩阵,记录每一代的最优蚂蚁的评价函数值%ALLXK×1细胞结构,每一个元素是M×N矩阵,记录每一代蚂蚁的位置%ALLYK×N矩阵,记录每一代蚂蚁的评价函数值%%测试函数设置%测试函数用单独的子函数编写好,在子函数FIT.m中修改要调用的测试函数名即可%注意:决策变量的下界LB和上界UB,要与测试函数保持一致%%参考设置%[BESTX,BESTY,ALLX,ALLY]=ACOUCP(50,30,0.95,1,0.5,LB,UB)%%第一步:初始化M=length(LB);%决策变量的个数%蚁群位置初始化X=zeros(M,N);fori=1:Mx=unifrnd(LB(i),UB(i),1,N);X(i,:)=x;end%输出变量初始化ALLX=cell(K,1);%细胞结构,每一个元素是M×N矩阵,记录每一代的个体ALLY=zeros(K,N);%K×N矩阵,记录每一代评价函数值欢迎访问GreenSim团队主页→邮箱:greensim@163。
3、.com第2页BESTX=cell(K,1);%细胞结构,每一个元素是M×1向量,记录每一代的最优个体BESTY=zeros(K,1);%K×1矩阵,记录每一代的最优个体的评价函数值k=1;%迭代计数器初始化Tau=ones(1,N);%信息素初始化Y=zeros(1,N);%适应值初始化%%第二步:迭代过程whilek=KYY=zeros(1,N);forn=1:Nx=X(:,n);YY(n)=FIT(x);endmaxYY=max(YY);temppos=find(YY==maxYY);POS=temppos(1);%蚂蚁随机探路forn=1:Nifn~=POSx=X(:,n);Fx=FIT(x);mx=GaussMutation(x,LB,UB);ifFmxFxX(:,n)=mx;Y(n)=Fmx;elseifrand1-(1/(sqrt(k)))X(:,n)=mx;Y(n)=Fmx;elseX(:,n)=x;Y(n)=Fx;endendendforn=1:Nifn~=POSx=X(:,n);Fx=FIT(x);mx=GaussMutation(x,LB,UB);Fmx=FIT(。
4、mx);ifFmxFxY(n)=Fmx;elseifrand1-(1/(sqrt(k)))X(:,n)=mx;Y(n)=Fmx;欢迎访问GreenSim团队主页→邮箱:greensim@163.com第3页elseX(:,n)=x;Y(n)=Fx;endendend%朝信息素最大的地方移动forn=1:Nifn~=POSx=X(:,n);r=(K+k)/(K+K);p=randperm(N);t=ceil(r*N);pos=p(1:t);TempTau=Tau(pos);maxTempTau=max(TempTau);pos3=pos(pos2(1));x2=X(:,pos3(1));x3=(1-Lambda)*x+Lambda*x2;Fx=FIT(x);Fx3=FIT(mx);ifFx3FxX(:,n)=x3;Y(n)=Fx3;elseifrand1-(1/(sqrt(k)))X(:,n)=x3;Y(n)=Fx3;elseX(:,n)=x;Y(n)=Fx;endendend%更新信息素并记录Tau=Tau*(1-Rho);maxY=max(Y);minY=min(Y);DeltaTa。
5、u=(maxY-Y)/(maxY-minY);Tau=Tau+Q*DeltaTau;ALLX{k}=X;ALLY(k,:)=Y;minY=min(Y);pos4=find(Y==minY);欢迎访问GreenSim团队主页→邮箱:greensim@163.com第4页BESTX{k}=X(:,pos4(1));BESTY(k)=minY;disp(k);k=k+1;end%%绘图BESTY2=BESTY;BESTX2=BESTX;fork=1:KTempY=BESTY(1:k);minTempY=min(TempY);posY=find(TempY==minTempY);BESTY2(k)=minTempY;BESTX2{k}=BESTX{posY(1)};endBESTY=BESTY2;BESTX=BESTX2;plot(BESTY,'-ko','MarkerEdgeColor','k','MarkerFaceColor','k','MarkerSize',2)ylabel('函数值')xlabel('迭代次数')gridon。
本文标题:13基于蚁群算法的连续函数优化通用MATLAB源代码
链接地址:https://www.777doc.com/doc-5357166 .html