算法代码片段(二)

来源:互联网 发布:matlab非线性最优化 编辑:程序博客网 时间:2024/06/05 13:22
%%基本蝙蝠算法
function[best,fmin,N_iter]=bat(para)if nargin<1    para=[10 0.25 0.5];endn=para(1);  %种群数量,一般选取[10,25]A=para(2);  %音量,一般为常数或者递减r=para(3);  %脉冲率,一般为常数或者递减%确定频率变化范围Qmin=0;Qmax=2;%算法迭代参数设置tol=0.00001;    %算法结束误差N_iter=0;   %算法运行总次数d=3;    %解的维度%数组初始化Q=zeros(n,1);   %频率值v=zeros(n,d);   %速度值%初始化种群for i=1:n    Sol(i,:)=randint(1,d);    Fitness(i)=Fun(Sol(i,:));end%找到当前最优解[fmin,I]=min(Fitness);best=Sol(I,:);%迭代过程while(fmin>tol)    for i=1:n        Q(i)=Qmin+(Qmin-Qmax)*rand;        v(i,:)=v(i,:)+(Sol(i,:)-best)*Q(i);        S(i,:)=Sol(i,:)+v(i,:);        if rand>r            S(i,:)=best+0.01*randint(1,d);        end        %新的适应度值        Fnew=Fun(S(i,:));        if(Fnew<=Fitness(i))&&(rand<A)            Sol(i,:)=S(i,:);            Fitness(i)=Fnew;        end        %更新当前最优解        if Fnew<=fmin            best=S(i,:);            fmin=Fnew;        end    end    N_iter=N_iter+n;end%结果显示disp(['迭代次数:',num2str(N_iter)]);disp(['最优解:',num2str(best),'最小值:',num2str(fmin)]);%%计算目标函数值function z=Fun(u)z=(1-u(1))^2+100*(u(2)-u(1)^2)^2+(1-u(3))^2;

0 0