general basic coding

Upload: devie-mohan

Post on 03-Jun-2018

222 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/13/2019 General Basic Coding

    1/37

    ////// steepest descent method with backtracking line search applied to therastrigin function////

    function y=rastrigin(x) // the function tooptimizen=max(size(x));y=n+sum(x.^2-cos(2*%pi*x));endfunction//-----------------------------------------------------function y=rastrigingrad(x) // the gradient of thefunction to optimizey=2*x+2*%pi*sin(2*%pi*x);endfunction//--------------------------------------------------------function z=dotprod(x,y); // computes the dot productof x and y

    z=sum(x.*y);endfunction//-----------------------------------------------------function d=descentdirection(f,x,fx,gx); // descent direction:gradientd=-gx;

    endfunction//----------------------------------------------------function [xnew,fnew,itback]=backtracking(f,x,fx,gx,d);// line search bybacktracking until Armijo conditiontau=0.3;bet=0.0001;

    alphainit=1;alpha=alphainit;xnew=x+alpha*d;fnew=f(xnew);itback=1;while(fnew>fx+bet*alpha*dotprod(gx,d))alpha=tau*alpha;xnew=x+alpha*d;fnew=f(xnew);itback=itback+1;

    endendfunction//-------------------------------------------------// main program//disp('steepest descent method for the rastrigin function:');//timer();n=evstr(x_dialog('number of variables of the rastrigin function tominimize','2'));epsilon=1E-5;//xmin=-5*ones(1,n);xmax=5*ones(1,n);u=rand(1,n);x0=xmin+(xmax-xmin).*u;x=x0;fx=rastrigin(x);gx=rastrigingrad(x);itgrad=1;

    itfct=1;Xbest=x;Fbest=fx;

  • 8/13/2019 General Basic Coding

    2/37

    //while (norm(gx)>epsilon)d=descentdirection(rastrigin,x,fx,gx);[x,fx,itback]=backtracking(rastrigin,x,fx,gx,d);Xbest=[Xbest;x];Fbest=[Fbest;fx];

    gx=rastrigingrad(x);itgrad=itgrad+1;itfct=itfct+itback;

    end//------------------------------------------------------// results display//disp('function evaluation number:');disp(itfct);disp('gradient evaluation number:');disp(itgrad);//disp('minimum obtained:');disp(x);disp('corresponding value by f:');disp(fx);//disp('corresponding value by g:');disp(gx);

    //disp('computational time:');disp(timer());//// case of the rastrigin function with 2 parameters (trajectory display)------//if (n==2)xmin=-5.12;xmax=5.12;N=300;xplot=xmin:((xmax-xmin)/(N-1)):xmax;yplot=xplot;zplot=zeros(N,N);for i=1:Nfor j=1:Nzplot(i,j)=rastrigin([xplot(i),yplot(j)]);endendxset('window',0)clf()plot2d(Xbest(:,1),Xbest(:,2),rect=[-5.12,-5.12,5.12,5.12]);contour2d(xplot,yplot,zplot,[0:0.01:0.1,0.2:1,1:10]);xtitle('trajectory display');xset('window',1)clf()plot2d(Xbest(:,1),Xbest(:,2),rect=[x(1)-0.1,x(2)-0.1,x(1)+0.1,x(2)+0.1]);contour2d(xplot,yplot,zplot,[fx:0.1:(fx+1)]);xtitle('trajectory display');end

  • 8/13/2019 General Basic Coding

    3/37

    ////------------------------------------------------------// BFGS for Rastrigindisp('BFGS for Rastrigin');////-----------------------------------------------------

    //function y=rastrigin(x) // the function to optimizen=max(size(x));y=n+sum(x.^2-cos(2*%pi*x));endfunction//-----------------------------------------------------function y=rastrigingrad(x) // the gradient of the function to optimizey=2*x+2*%pi*sin(2*%pi*x);endfunction//--------------------------------------------------------function z=dotprod(x,y); // computes the dot product of x and yz=sum(x.*y);endfunction

    //-----------------------------------------------------function [d,gx]=descentdirection(Bk,gx); // descent direction: gradientd=linsolve(Bk,gx);endfunction//----------------------------------------------------function [xnew,fnew,itback]=backtracking(f,x,fx,gx,d);// line search bybacktracking until Armijo conditiontau=0.3;bet=0.0001;alphainit=1;alpha=alphainit;xnew=x+alpha*d;fnew=f(xnew);itback=1;while(fnew>fx+bet*alpha*dotprod(gx,d))alpha=tau*alpha;xnew=x+alpha*d;fnew=f(xnew);itback=itback+1;

    endendfunction//-------------------------------------------------// main program//timer();n=2;epsilon=1E-5;//xmin=-5*ones(1,n);xmax=5*ones(1,n);u=rand(1,n);x0=xmin+(xmax-xmin).*u;x=x0;fx=rastrigin(x);gx=rastrigingrad(x);itgrad=1;itfct=1;Xbest=x;Fbest=fx;Bk=eye(n,n);//while (norm(gx)>epsilon)x0=x;gx0=gx;d=descentdirection(Bk,gx');

    [x,fx,itback]=backtracking(rastrigin,x,fx,gx,d');// disp('backtracking number');disp(itback);

  • 8/13/2019 General Basic Coding

    4/37

    Xbest=[Xbest;x];Fbest=[Fbest;fx];gx=rastrigingrad(x);itgrad=itgrad+1;itfct=itfct+itback;yk=gx'-gx0';sk=x'-x0';

    Bk=Bk+(yk*yk')/dotprod(sk,yk)-(Bk*sk*sk'*Bk)/dotprod(sk,Bk*sk);// disp(mini(spec(Bk)));end//------------------------------------------------------// results display//disp('function evaluation number:');disp(itfct);disp('gradient evaluation number:');disp(itgrad);//disp('minimum obtained:');disp(x);disp('corresponding value by f:');disp(fx);//disp('computational time:');disp(timer());//

    // case of the rastrigin function with 2 parameters (n=2)------if (n==2)xmin=-5.12;xmax=5.12;N=300;xplot=xmin:((xmax-xmin)/(N-1)):xmax;yplot=xplot;zplot=zeros(N,N);for i=1:Nfor j=1:Nzplot(i,j)=rastrigin([xplot(i),yplot(j)]);endendxset('window',0)clf()plot2d(Xbest(:,1),Xbest(:,2),rect=[-5.12,-5.12,5.12,5.12]);contour2d(xplot,yplot,zplot,[0:0.01:0.1,0.2:1,1:10]);xset('window',1)clf()plot2d(Xbest(:,1),Xbest(:,2),rect=[x(1)-0.1,x(2)-0.1,x(1)+0.1,x(2)+0.1]);contour2d(xplot,yplot,zplot,[fx:0.1:(fx+1)]);end

  • 8/13/2019 General Basic Coding

    5/37

    //// Methode d'optimisation sans gradient//// Methode Nelder Mead//----------------------------------------// definition de la fonction minimiser

    ////deff('y=f(x)','y=sum(x.*x)'); // fonction quadratiquedeff('y=f(x)','y=sum(x.*x-cos(2*%pi*x))+n'); // fonction de Rastrigin////// un cas qui ne marche pas pour Nelder Mead (Mac Kinnon)//deff('y=f(x)','if x(1)

  • 8/13/2019 General Basic Coding

    6/37

    fr=f(xr);fnew=fr;Neval=Neval+1;// cas 1if (X(1,n+1)

  • 8/13/2019 General Basic Coding

    7/37

    // Methode d'optimisation sans gradient//// Mthode MDS//----------------------------------------// definition de la fonction minimiser//

    //deff('y=f(x)','y=sum(x.*x)'); // fonction quadratiquedeff('y=f(x)','y=sum(x.*x-cos(2*%pi*x))+n'); // fonction de Rastrigin//n=evstr(x_dialog('nombre de parametres (contours si n=2)','2'));Nit=evstr(x_dialog('nombre d''iterations','100'));//xmin=-5;xmax=5;//function Y=evalsimplexe(X)[n1,n2]=size(X);Y=X;for i=2:n1Y(i,n2)=f(X(i,1:n2-1));

    end[a,b]=gsort(-Y(:,n2));Y=Y(b,:);

    endfunction//// trac des lignes de niveau//if (n==2)N=300;xplot=xmin:((xmax-xmin)/(N-1)):xmax;yplot=xplot;zplot=zeros(N,N);for i=1:Nfor j=1:Nzplot(i,j)=f([xplot(i),yplot(j)]);endendxset('window',0)clf()contour2d(xplot,yplot,zplot,20);end//// creation du premier simplexe//X=xmin+(xmax-xmin)*rand(n+1,n+1);//// evaluation du premier simplexefor i=1:n+1

    X(i,n+1)=f(X(i,1:n))end

    Neval=n+1;//// debut boucle principalefor k=1:Nit// ordonnement du simplexe[a,b]=gsort(-X(:,n+1));X=X(b,:);//Xr=X;Xr(2:n+1,1:n)=2*ones(n,1)*X(1,1:n)-X(2:n+1,1:n);

    //Xr=evalsimplexe(Xr);

  • 8/13/2019 General Basic Coding

    8/37

    //if (Xr(1,n+1)

  • 8/13/2019 General Basic Coding

    9/37

    // Methode d'optimisation sans gradient//// Methode de recuit simule//----------------------------------------// definition de la fonction minimiser//

    function y=f(x) // the function to optimizen=prod(size(x));y=n+sum(x.^2-cos(2*%pi*x));endfunction///////////////////////////////////////////////////////////////////n=evstr(x_dialog('nombre de parametres de Rastrigin','2'));Nmax=evstr(x_dialog('nombre maximal d''valuations','2000'));//disp('Niter Temperature sigma');u=rand(1,n);xmin=-5*ones(1,n);

    xmax=5*ones(1,n);x0=xmin+(xmax-xmin).*u; // random initialisationNeval=[];Fbest=[];y0 = f(x0);x = x0; y = y0; alpha = 0.92; T = 1; s = 0.2;icount=1;Neval=[];Fbest=[];for k = 1 : 20

    T = alpha * T;accept = 0;for l = 1 : Nmax/20

    x1 = x0 + s*(0.5*ones(x0) - rand (x0)); // uniform// x1= x0+s*rand(x0,'normal'); // gaussian

    y1 = f(x1);icount=icount+1;dy = y1 - y0;if rand() < exp (- dy / T) then

    x0 = x1; y0 = y1; accept = accept + 1;if y0 < y then x = x0; y = y0; end

    endNeval=[Neval;icount];Fbest=[Fbest;f(x0)];endif accept < 25/100*Nmax/20 then s = s / 2; endif accept > 75/100*Nmax/20 then s = 2 * s; enddisp([icount,T,s]);x0 = x; y0 = y;

    end////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////disp('minimum obtained after SA:');disp(x);disp('corresponding value by f:');disp(y);disp('function evaluation number by SA:');disp(Neval($));xset('window',0)clf();plot2d(Neval,Fbest)///////////////////////////////////////////////////////////////

  • 8/13/2019 General Basic Coding

    10/37

    ////------------------------------------------------------// real valued genetic algorithm// for the minimization of the rastrigin function// (with dynamic display for the case of 2 parameters)//

    //-----------------------------------------------------// selection: proportionate with ranking method// crossover: blend// mutation: non uniform// 1-elitism//function y=rastrigin(x,n) // the function to optimizey=n+sum(x.^2-cos(2*%pi*x));endfunction//function evalpop=evaluation(X); // evaluation of the whole population[Npop,n]=size(X);n=n-1;evalpop=zeros(Npop,1);

    for i=1:Npop;evalpop(i)=rastrigin(X(i,1:n),n);endendfunction//function [Xpar,bestpar]=evalplus1elitism(Xpar,Xoldpar,Npop,gen) //evaluation plus 1-elitismval=evaluation(Xpar);Xpar(:,n+1)=val;[minval,index]=min(Xoldpar(:,n+1));bestpar=Xoldpar(index(1),:);[minval,index]=min(val);bestnewpop=Xpar(index(1),:);if (bestnewpop($)>bestpar($))&(gen>1) then

    nrand=int(Npop*rand())+1;Xpar(nrand,:)=bestpar;

    elsebestpar=bestnewpop;

    endendfunction//function Xsel=rankselect(X) // ranking selectionXsel=X;[Npop,n]=size(X);n=n-1;[Fsort,ind]=gsort(X(:,n+1));X=X(ind,:);p=1:Npop;roulette=cumsum(p)/sum(p);for i=1:Npop;u=rand();index=find(roulette

  • 8/13/2019 General Basic Coding

    11/37

    endfunction//function xoff=mutate(xpar,ngen,Ngen,xmin,xmax) // non uniform mutation[np,n]=size(xpar);n=n-1;b=5;xoff=xpar;

    for i=1:nu1=rand();u2=rand();if (u1

  • 8/13/2019 General Basic Coding

    12/37

    xpar=[Xpar(u1,:);Xpar(u2,:)];Xoff(i:(i+1),:)=xpar;if (u3

  • 8/13/2019 General Basic Coding

    13/37

    ////------------------------------------------------------//disp('ES with CSA adaptation for Rastrigin');////-----------------------------------------------------

    function y=rastrigin(x) // the function to optimizen=prod(size(x));y=n+sum(x.^2-cos(2*%pi*x));endfunction////-----------------------------------------------------function Xpar=evaluation(X); // evaluation of the whole populationXpar=X;[Npo,n]=size(X);n=n-1;evalpop=zeros(Npo,1);for i=1:Npo;evalpop(i)=rastrigin(X(i,1:n));

    end

    Xpar(:,n+1)=evalpop;endfunction////-----------------------------------------------------function [Xparnew,Wnew]=selection(Xpar,Xoff,W);[mu,n]=size(Xpar);[lambda,n]=size(Xoff);n=n-1;Xtot=Xoff; // selection comma[Fsort,ind]=gsort(-Xtot(:,n+1));indbest=ind(1:mu);Xparnew=Xtot(indbest,:);Wnew=W(indbest,:);endfunction////-----------------------------------------------------//-----------------------------------------------------//---------main program -------------------------------//disp('real valued ES for minimizing black box function');//n=evstr(x_dialog('parameter number of the rastrigin function','15'));mu=evstr(x_dialog('parent number','20'));lambda=evstr(x_dialog('offspring number','200'));Ngen=evstr(x_dialog('generation number','100'));//siginit=1; // initial mutation strength//// ------- parameters for CSA adaptation-------------c=1/sqrt(n);chiN=sqrt(n)*(1-1/(4*n)+1/(21*n^2));D=sqrt(n);//// ----------------------------------------------------//xmin=-5.*ones(1,n);xmax=5.*ones(1,n);Xmin=ones(mu,1)*xmin;Xmax=ones(mu,1)*xmax;u=rand(mu,n);

    pop=Xmin+(Xmax-Xmin).*u; // random initialisation of the populationXpar=[pop,rand(mu,1)]; Xoldpar=Xpar;

  • 8/13/2019 General Basic Coding

    14/37

    Xoff=Xpar;min=[];Ntot=[];mineval=0;newval=zeros(mu,1);itfct=0;fmin=[];////-----------------------------------------------------//-----------------------------------------------------//

    sigma=siginit;V=zeros(1,n);Xpar=evaluation(Xpar);Y=1/mu*sum(Xpar(:,1:n),1);Nevalf=mu;//// ---- MAIN LOOP : BEGINNING---------------------------//------------------------------------------------------//for gen=1:(Ngen-1)//Woff=[];for i=1:lambda

    w=sigma*rand(1,n,'normal'); // mutationWoff=[Woff;w];xoff=Y+w;Xoff(i,1:n)=xoff;

    end//Xoff=evaluation(Xoff); // evaluationNevalf=Nevalf+lambda;//[Xpar,Wpar]=selection(Xpar,Xoff,Woff); // selection//fmin=[fmin,Xpar(1,$)];bestpar=Xpar(1,1:n);Ntot=[Ntot,Nevalf];//// --- adaptativity of sigma-----------------//Z=1/mu*sum(Wpar,1);Y=Y+Z;V=(1-c)*V+sqrt(c*(2-c))*sqrt(mu)/sigma*Z;sigma=sigma*exp((norm(V)-chiN)/(D*chiN));//// MAIN LOOP : ENDING//end//-----------------------------------------------------//-----------------------------------------------------////xset('window',0);clf();plot2d(Ntot,fmin);disp('minimum obtained:');disp(bestpar(1:n));disp('corresponding value by f:');disp(fmin($));disp('evaluation number:');disp(Nevalf);//

  • 8/13/2019 General Basic Coding

    15/37

    ////------------------------------------------------------//// Evolution Strategy// for the minimization of the rastrigin function//

    //-----------------------------------------------------//function y=rastrigin(x) // the function to optimizen=prod(size(x));y=n+sum(x.^2-cos(2*%pi*x));endfunction////-----------------------------------------------------function Xpar=evaluation(X); // evaluation of the whole populationXpar=X;[Npo,n]=size(X);n=n-1;evalpop=zeros(Npo,1);for i=1:Npo;

    evalpop(i)=rastrigin(X(i,1:n));endXpar(:,n+1)=evalpop;endfunction////-----------------------------------------------------function Xparnew=selection(Xpar,Xoff); // selection plus or comma[mu,n]=size(Xpar);[lambda,n]=size(Xoff);n=n-1;Xtot=[Xpar;Xoff]; // plus selection//Xtot=[Xoff]; // comma selection[Fsort,ind]=gsort(-Xtot(:,n+1));Xtot=Xtot(ind,:);Xparnew=Xtot(1:mu,:);endfunction////-----------------------------------------------------//function xoff=mutate(xpar,sigma) // normal mutation[np,n]=size(xpar);n=n-1;xoff=xpar;u=rand(1,n,'n');xoff(1,1:n)=xpar(1,1:n)+sigma*u;endfunction////-----------------------------------------------------//-----------------------------------------------------//---------main program -------------------------------//disp('real valued ES for minimizing black box function');//// ----------------------------------------------------//n=evstr(x_dialog('parameter number of the rastrigin function','2'));mu=evstr(x_dialog('parent number','5'));lambda=evstr(x_dialog('offspring number','50'));Ngen=evstr(x_dialog('generation number','20'));//siginit=1; // initial mutation strengthalpha=1.25; // 1/5 rule coefficient

    //// ----------------------------------------------------

  • 8/13/2019 General Basic Coding

    16/37

    //xmin=-5.*ones(1,n);xmax=5.*ones(1,n);Xmin=ones(mu,1)*xmin;Xmax=ones(mu,1)*xmax;u=rand(mu,n);

    pop=Xmin+(Xmax-Xmin).*u; // random initialisation of the populationXpar=[pop,rand(mu,1)]; Xoldpar=Xpar;Xoff=Xpar;min=[];Ntot=[];mineval=0;newval=zeros(mu,1);itfct=0;fmin=[];////-----------------------------------------------------//-----------------------------------------------------//sigma=siginit;Xpar=evaluation(Xpar);Nevalf=mu;//// MAIN LOOP : BEGINNING

    ////for gen=1:(Ngen-1)//xcros=1/lambda*sum(Xpar,'r'); // parent crossover//for i=1:lambdau=int(mu*rand())+1;xpar=Xpar(u,:);xoff=mutate(xcros,sigma); // parent crossover+mutation

    // xoff=mutate(xpar,sigma); // parent mutation, no crossoverXoff(i,:)=xoff;

    end//oldval=Xoff(:,$);Xoff=evaluation(Xoff); // offspring evaluationNevalf=Nevalf+lambda;//newval=Xoff(:,$);ind=find(oldval>newval);taux=length(ind)/lambda;//// --- adaptativity of sigma-----------------//if (taux

  • 8/13/2019 General Basic Coding

    17/37

    plot2d(Ntot,fmin)xtitle('convergence history','Neval','fmin');//disp('minimum obtained:');disp(bestpar(1:n));disp('corresponding value by f:');disp(fmin($));disp('evaluation number:');disp(Nevalf);

    //

  • 8/13/2019 General Basic Coding

    18/37

  • 8/13/2019 General Basic Coding

    19/37

    // new value of xPSO(:,1:n)=PSO(:,1:n)+PSO(:,(n+1:2*n));

    ////----- dyanmic display if n=2 ----------------------------

    if (n==2) thenxset('window',2);

    drawlaterclf()Traj=[Traj;pg(1),pg(2)];contour2d(x,y,z,[0:0.01:0.1,0.2:1,1:10],rect=[-5.12,-5.12,5.12,5.12]);plot2d(PSO(:,1),PSO(:,2),-1,rect=[-5.12,-5.12,5.12,5.12]);plot2d(Traj(:,1),Traj(:,2),5,rect=[-5.12,-5.12,5.12,5.12]);xtitle('trajectory display');drawnowxset('window',3);drawlaterclf()contour2d(x,y,z,[0:0.01:0.1,0.2:1,1:10],rect=[-0.5,-0.5,0.5,0.5]);plot2d(PSO(:,1),PSO(:,2),-1,rect=[-0.5,-0.5,0.5,0.5]);

    plot2d(Traj(:,1),Traj(:,2),5,rect=[-0.5,-0.5,0.5,0.5]);xtitle('trajectory display');drawnowend

    //endxset('window',1)clf()disp('best elemet found:');disp(pg(1:n))plot2d(Npop*(1:Ngen),pgval)

  • 8/13/2019 General Basic Coding

    20/37

    //// multi objective optimization// NSGA method without sharing// comparaison of the exact and computed Pareto front on a simple example.//function Xp=paretoplot(Pop,MOpop)

    // divide the population with values MOpop by J1 and J2 into differentfront[Npop,b]=size(Pop);Xp=[];JXp=[];ind=(1:Npop);count=1;while(length(ind)>0)Nfront=[];for i=ind;l=find(MOpop(ind,1)

  • 8/13/2019 General Basic Coding

    21/37

    MOpop=[];for i=1:Npop[J1,J2]=MO(A(i,1:L));MOpop=[MOpop;[J1,J2]];endA=paretoplot(A(:,1:L),MOpop+1E-10*rand(Npop,2));

    ////// selection// 1st step: gsort elements[s,p]=gsort(A(:,L+1));A=A(p,:);val=[val,A(Npop,L+1)];bestelem=A(Npop,:);oldbestval=A(Npop,L+1);//// 2st step: choose Npop elements with probability pi//Asel=[];

    p=(1:Npop)/sum(1:Npop);ps=cumsum(p);for i=1:Npopu=rand();isel=1;while (u>ps(isel))

    isel=isel+1;end

    Asel=[Asel;A(isel,:)];end// barycentric crossoverAcrois=[];

    for k=1:Npop/2u1=int(Npop*rand()+1);u2=int(Npop*rand()+1);if (rand()

  • 8/13/2019 General Basic Coding

    22/37

    //// Genetic Algorithm with an approximated evaluation principle// Only a decreasing percent of the population is evaluated exactly// The approximation is build with a local RBF interpolation//

    function y=exactfunction(x) // the function to optimizen=length(x);y=n+sum(x.^2-cos(2*%pi*x)); // Rastriginendfunction////----------------------------------------------------------------//function y=approxfunction(x,Xexact,A,b) // the approximated function byRBF interpolation[N1,N2]=size(Xexact);n=N2-1;u=linsolve(A,-b);y=0;for i=1:N1

    y=y+u(i)*phi(x-Xexact(i,1:n))endendfunction////----------------------------------------------------------------//function y=phi(x) // RBF functiony=norm(x)endfunction////----------------------------------------------------------------//function [A,b]=construct(Xexact) // construction of the matrix forinterpolation//[N1,N2]=size(Xexact);n=N2-1;A=zeros(N1,N1);b=zeros(N1,1);for i=1:N1for j=1:N1A(i,j)=phi(Xexact(i,1:n)-Xexact(j,1:n));

    endb(i)=Xexact(i,n+1);

    endendfunction////---------------------------------------------------------------------function Xexactsel=selection(x,Xexact,Nsize) // selection of the centersfor interpolation//[N1,N2]=size(Xexact);n=N2-1;normx=[];for i=1:N1normx(i)=norm(x-Xexact(i,1:n))

    end[x1,x2]=gsort(-normx);Xexactsel=Xexact(x2(1:Nsize),:)endfunction//----------------------------------------------------------------function evalpop=evaluation(X); // exact evaluation of thewhole population[Npop,N2]=size(X);n=N2-1;

    evalpop=zeros(Npop,1);for i=1:Npop;

  • 8/13/2019 General Basic Coding

    23/37

    evalpop(i)=exactfunction(X(i,1:n));endendfunction////----------------------------------------------------------------//

    function evalpop=evaluationapprox(X,Xexact,Nsize); // approximatedevaluation of the whole population[Npop,N2]=size(X);n=N2-1;evalpop=zeros(Npop,1);for i=1:Npop;Xexactsel=selection(X(i,1:n),Xexact,Nsize);[A,b]=construct(Xexactsel);evalpop(i)=approxfunction(X(i,1:n),Xexactsel,A,b);

    endendfunction////------------------------------------------------------------------//

    function [Xpar,bestpar]=elitism(Xnew,Xpar,Xtot,Npop,gen) // Elitism[minval,index]=min(Xtot(:,n+1));bestpar=Xtot(index(1),:);[minval,index]=min(Xnew(:,n+1));bestnewpop=Xnew(index(1),:);if (bestnewpop($)>bestpar($))&(gen>1) then

    nrand=int(Npop*rand())+1;Xpar(nrand,:)=bestpar;

    elsebestpar=bestnewpop;

    endendfunction////--------------------------------------------------------------//function Xsel=rankselect(X) // ranking selectionXsel=X;[Npop,n]=size(X);n=n-1;[Fgsort,ind]=gsort(X(:,n+1));X=X(ind,:);p=1:Npop;roulette=cumsum(p)/sum(p);for i=1:Npop;u=rand();index=find(roulette

  • 8/13/2019 General Basic Coding

    24/37

    function xoff=mutate(xpar,ngen,Ngen,xmin,xmax) // non uniformmutation[np,n]=size(xpar);n=n-1;b=5;xoff=xpar;for i=1:n

    u1=rand();u2=rand();if (u1

  • 8/13/2019 General Basic Coding

    25/37

    //----------------------------------------------------------------------------------------------if (gen

  • 8/13/2019 General Basic Coding

    26/37

    Nexact=[Nexact,Nexact($)+length(u)];end[Xpar,bestpar]=elitism(Xnew,Xpar,Xtot,Npop,gen);//fmin=[fmin,bestpar($)];save('session.sav');

    //----------- results displays --------------

    xset('window',0);plot2d(Nexact,fmin,3);xtitle('convergence history','Neval','fmin');xset('window',1);plot2d1('onl',Nexact,fmin,3);xtitle('convergence history (log scale)','Neval','fmin');//disp('minimum obtained:');disp(bestpar(1:n));disp('corresponding value by f:');disp(bestpar($));disp('evaluation number:');disp(Nexact($));

    /////////////////////////////// VERSION AVEC INTERFACE UNIX//////-----------------------------------------------------//function writedata(str0)// unix('rm -f data_heart');// fddata=file('open','data_heart','unknown')// write(fddata,str0);// write(fddata,'[ensight]');// write(fddata,'start = 0');// write(fddata,'verbose = 4');// write(fddata,'#multimesh = 1');// file('close',fddata);//endfunction///////////////////////////////////////////////////////////////////////////////////////////////////////////////////function y=exactfunctionbis(X)//z1=X(1);//theta1=X(2);//r1=aiL*sqrt(1-(z1/ciL)**2);//x1=r1*cos(theta1);//y1=r1*sin(theta1);// tx=[t1 t2 t3 f1 f1 f2 x1 x2 x3];// ty=[t1 t2 t3 f1 f1 f2 y1 y2 y3];// tz=[t1 t2 t3 f1 f1 f2 z1 z2 z3];// ts=[ti1 ti2 ti3 tf1 tf2 tf3 s1 s2 s3];//str0=ts + a + string(tx) + e + string(ty) + e + string(tz) + a;//writedata(str0);//////str2='/afs/inria.fr/rocq/home/reo/ldumas/lifevREO-opt/testsuite/test_bidomain_Schaf/test_bidomain_Schaf -f data_heart >output';//////unix('rm -f time_dep');//unix('rm -f time_temp');//unix('rm -f output');//unix(str2);

    //////y=read('time_temp',1,1);

  • 8/13/2019 General Basic Coding

    27/37

    //////////endfunction////

    ////------------------------------------------------------

    // hybrid method (GA + steepest descent) for Rastrigindisp('hybrid method (GA + SD) for Rastrigin');//////-----------------------------------------------------//clear();//

    function y=rastrigin(x) // the function to optimizen=prod(size(x));//y=n+sum(x.^2-cos(2*%pi*x));y=sum(x.^2-10*cos(2*%pi*x)+10);//y=n+exp(1)-n*exp(-0.2*sqrt(1/n*sum(x.^2)))-exp(1/n*sum(cos(2*%pi*x)));endfunction////-----------------------------------------------------function y=rastrigingrad(x) // the gradient of thefunction to optimize//y=2*x+2*%pi*sin(2*%pi*x);y=2*x+10*2*%pi*sin(2*%pi*x);//n=prod(size(x));//y1=-n*exp(-0.2*sqrt(1/n*sum(x.^2)))*((-0.2)*1/n*2*x)/(2*(sqrt(1/n*sum(x.^2))));//y2=-exp(1/n*sum(cos(2*%pi*x)))*1/n*(-2*%pi*sin(2*%pi*x));//y=y1+y2;endfunction////-----------------------------------------------------////-----------------------------------------------------function evalpop=evaluation(X); // evaluation of the whole population[Npop,n]=size(X);n=n-1;evalpop=zeros(Npop,1);for i=1:Npop;evalpop(i)=rastrigin(X(i,1:n));

    endendfunction////-----------------------------------------------------function [bestpar,bestval]=thebest(Xtot);

    [mu,n]=size(Xtot);n=n-1;[Fsort,indice]=sort(-Xtot(:,n+1));

  • 8/13/2019 General Basic Coding

    28/37

    bestpar=Xtot(indice(1),1:n);bestval=Xtot(indice(1),n+1);endfunction////-----------------------------------------------------//

    //function [Xpar,bestpar]=evalplus1elitism(Xpar,Xoldpar,Npop,gen) //evaluation plus 1-elitismval=evaluation(Xpar);Xpar(:,n+1)=val;[minval,index]=min(Xoldpar(:,n+1));bestpar=Xoldpar(index(1),:);[minval,index]=min(val);bestnewpop=Xpar(index(1),:);if (bestnewpop($)>bestpar($))&(gen>1) then

    nrand=int(Npop*rand())+1;Xpar(nrand,:)=bestpar;

    else

    bestpar=bestnewpop;endendfunction////-----------------------------------------------------//function Xsel=rankselect(X) // ranking selectionXsel=X;[Npop,n]=size(X);n=n-1;[Fsort,ind]=sort(X(:,n+1));X=X(ind,:);p=1:Npop;roulette=cumsum(p)/sum(p);for i=1:Npop;u=rand();index=find(roulette

  • 8/13/2019 General Basic Coding

    29/37

    xoff(1,i)=xpar(1,i)-(xpar(i)-xmin(i))*u2*(1-(ngen-1)/Ngen)^b;end;

    end;endfunction////-----------------------------------------------------

    function z=dotprod(x,y); // computes the dot productof x and yz=sum(x.*y);endfunction//-----------------------------------------------------function d=descentdirection(f,x,fx,gx); // descent direction:gradientd=-gx;endfunction//----------------------------------------------------function [xnew,fnew,itback]=backtracking(f,x,fx,gx,d,tau,bet,alphainit);//line search by backtracking until Armijo conditionalpha=alphainit;xnew=x+alpha*d;

    fnew=f(xnew);itback=1;while(fnew>fx+bet*alpha*dotprod(gx,d))alpha=tau*alpha;xnew=x+alpha*d;fnew=f(xnew);itback=itback+1;

    endendfunction//-------------------------------------------------// // steepest descent methodwith Armijo conditionfunction[xbest,fbest,itfct,itgrad]=steepest(x,fx,epsilongrad,itermax,deltagain,tau,bet,alphainit)itgrad=0;itfct=0;gx=rastrigingrad(x);itgrad=itgrad+1;//delta=1;while (norm(gx)>epsilongrad)&(delta>0)&(itgrad

  • 8/13/2019 General Basic Coding

    30/37

    while inon==1;inon=0;for i=1:Nclustindex=find(Xparclust(:,$)==i);if (length(index)>0) thenbari(i,:)=1/length(index)*sum(Xparclust(index,1:n),'r');

    endendfor i=1:Npopdist0= norm(Xparclust(i,1:n)-bari(Xparclust(i,$),:));for j=1:Nclust

    dist(j)=norm(Xparclust(i,1:n)-bari(j,:));if dist(j)0) thenXclust(i,:)=Xpar(index(indic(1)),:);

    endNumb(i)=length(index);end

    for i=1:Nclustfor j=1:Nclust

    Matr(i,j)=norm(bari(i,:)-bari(j,:));end

    endendfunction//////-------------------------------------------dynamic results displays

    //function result(Ntot,fmin,co)nl=length(Ntot);if (nl>1) thenxset('window',0);plot2d([Ntot($-1),Ntot($)],[fmin($-1),fmin($)],co);xtitle('convergence history','Neval','fmin');endendfunction////-----------------------------------------------------//-----------------------------------------------------//---------main program -------------------------------//xset('window',0);// ----------------------------------------------------//n=6; // number of variables of the optimizationproblemNpop=40; //parent number//Ngen=80;

    pc=0.9;pm=0.6;

  • 8/13/2019 General Basic Coding

    31/37

    Nevalfmax=4000;Nclustmax=4; // maximal cluster numberitgradmax=10; // maximal steepest descent iterationvalmin=3; // minimal number of consecutive GAiterationsCVRlim=1; // coefficient of variation of the

    population threshold////epsilongrad=1E-10; // stopping criterion for gradient valuetau=0.3; // backtraking coefficientbet=1E-4; // Armijo coefficientalphainit=0.1; // first step length of steepest descent//// ----------------------------------------------------//xmin=-5.*ones(1,n);xmax=5.*ones(1,n);Xmin=ones(Npop,1)*xmin;

    Xmax=ones(Npop,1)*xmax;u=rand(Npop,n);pop=Xmin+(Xmax-Xmin).*u; // random initialisation of the populationXpar=[pop,rand(Npop,1)]; Xoldpar=Xpar;Xoff=Xpar;Ntot=[];mineval=0;newval=zeros(Npop,1);itfct=0;fmin=[];CVold=1;valgen=1;Nevalg=0;Nevalf=0;gen=0;//Nclust=Nclustmax;//----------------------------------------------------------// MAIN LOOP : BEGINNING////while(NevalfCVRlim)&(Nclust>0)&(gen-valgen>valmin) then

    newmean=mean(Xpar(:,$));Nnew=Nevalf;deltagain=(oldmean-newmean)/(Nnew-Nold);oldmean=newmean;Nold=Nnew;

    //

    [Xclust,ind,Matr,Numb]=clustering(Xpar,Nclust);Xoffnew=[];

  • 8/13/2019 General Basic Coding

    32/37

    for i=1:Nclustif (Numb(i)>0) then

    [xnew,fnew,itfct,itgrad]=steepest(Xclust(i,1:n),Xclust(i,$),epsilongrad,itgradmax,deltagain,tau,bet,alphainit);

    Nevalf=Nevalf+itfct+itgrad*n;

    Nevalg=Nevalg+itgrad;Xpar(ind(i),:)=[xnew,fnew];Xoffnew=[Xoffnew;xnew,fnew];

    endend[bestpar,bestval]=thebest(Xoffnew); // selection

    lambda+mufmin=[fmin,bestval];Ntot=[Ntot,Nevalf];result(Ntot,fmin,2); // dynamic result displayvalgen=gen;

    end//

    //--------------------------------------------------------------------------//Xoldpar=Xpar;Xpar=rankselect(Xpar); // rank selectionfor i=1:2:(Npop-1)u1=int(Npop*rand())+1;u2=int(Npop*rand())+1;u3=rand();xpar=[Xpar(u1,:);Xpar(u2,:)];Xoff(i:(i+1),:)=xpar;if (u3

  • 8/13/2019 General Basic Coding

    33/37

    ////------------------------------------------------------// hybrid method (ES + steepest descent) for Rastrigindisp('hybrid method (ES + SD) for Rastrigin');////

    //-----------------------------------------------------clear();//function y=rastrigin(x) // the function to optimizen=prod(size(x));y=n+sum(x.^2-cos(2*%pi*x));endfunction////-----------------------------------------------------function y=rastrigingrad(x) // the gradient of thefunction to optimizey=2*x+2*%pi*sin(2*%pi*x);endfunction

    ////-----------------------------------------------------////-----------------------------------------------------function Xpar=evaluation(X); // evaluation of the whole populationXpar=X;[Npo,n]=size(X);n=n-1;evalpop=zeros(Npo,1);for i=1:Npo;evalpop(i)=rastrigin(X(i,1:n));

    endXpar(:,n+1)=evalpop;endfunction////-----------------------------------------------------function Xparnew=selection(Xpar,Xoff);[mu,n]=size(Xpar);[lambda,n]=size(Xoff);n=n-1;Xtot=[Xpar;Xoff];[Fsort,ind]=sort(-Xtot(:,n+1));Xtot=Xtot(ind,:);Xparnew=Xtot(1:mu,:);endfunction////-----------------------------------------------------//function xoff=mutate(xpar,sigma) // normal mutation[np,n]=size(xpar);n=n-1;xoff=xpar;u=rand(1,n,'n');xoff(1,1:n)=xpar(1,1:n)+sigma*u;endfunction////-----------------------------------------------------function z=dotprod(x,y); // computes the dot productof x and yz=sum(x.*y);endfunction//-----------------------------------------------------function d=descentdirection(f,x,fx,gx); // descent direction:

    gradientd=-gx;

  • 8/13/2019 General Basic Coding

    34/37

    endfunction//----------------------------------------------------function [xnew,fnew,itback]=backtracking(f,x,fx,gx,d,tau,bet,alphainit);//line search by backtracking until Armijo conditionalpha=alphainit;xnew=x+alpha*d;fnew=f(xnew);

    itback=1;while(fnew>fx+bet*alpha*dotprod(gx,d))alpha=tau*alpha;xnew=x+alpha*d;fnew=f(xnew);itback=itback+1;

    endendfunction//-------------------------------------------------// // steepest descent methodwith Armijo conditionfunction[xbest,fbest,itfct,itgrad]=steepest(x,fx,epsilongrad,itermax,deltagain,tau,

    bet,alphainit)itgrad=0;itfct=0;gx=rastrigingrad(x);itgrad=itgrad+1;//delta=1;while (norm(gx)>epsilongrad)&(delta>0)&(itgrad0) thenbari(i,:)=1/length(index)*sum(Xparclust(index,1:n),'r');endendfor i=1:Npopdist0= norm(Xparclust(i,1:n)-bari(Xparclust(i,$),:));for j=1:Nclust

    dist(j)=norm(Xparclust(i,1:n)-bari(j,:));

    if dist(j)

  • 8/13/2019 General Basic Coding

    35/37

    Xparclust(i,$)=j;dist0=dist(j);end

    endend

    endfor i=1:Nclust

    index=find(Xparclust(:,$)==i);[minval,indic]=mini(Xparclust(index,n+1));ind(i)=index(indic(1));if (length(index)>0) thenXclust(i,:)=Xpar(index(indic(1)),:);

    endNumb(i)=length(index);end

    for i=1:Nclustfor j=1:Nclust

    Matr(i,j)=norm(bari(i,:)-bari(j,:));end

    end

    endfunction//////-------------------------------------------dynamic results displays

    //function result(Ntot,fmin,co)nl=length(Ntot);if (nl>1) thenxset('window',0);plot2d([Ntot($-1),Ntot($)],[fmin($-1),fmin($)],co);xtitle('convergence history','Neval','fmin');endendfunction////-----------------------------------------------------//-----------------------------------------------------//---------main program -------------------------------//xset('window',0);xbasc();// ----------------------------------------------------//n=6; // number of variables of the optimizationproblemmu=5; //parent numberlambda=35; // offspring numbersiginit=0.5; // initial mutation strengthalpha=1.03; // 1/5 rule coefficientNgen=60;//Nclustmax=0; // maximal cluster numberitgradmax=10; // maximal steepest descent iterationvalmin=3; // minimal number of consecutive GAiterationsCVRlim=1; // coefficient of variation of thepopulation threshold////epsilongrad=1E-10; // stopping criterion for gradient valuetau=0.3; // backtraking coefficient

    bet=1E-4; // Armijo coefficientalphainit=0.1; // first step length of steepest descent

  • 8/13/2019 General Basic Coding

    36/37

    //// ----------------------------------------------------//xmin=-5.*ones(1,n);xmax=5.*ones(1,n);Xmin=ones(mu,1)*xmin;

    Xmax=ones(mu,1)*xmax;u=rand(mu,n);pop=Xmin+(Xmax-Xmin).*u; // random initialisation of the populationXpar=[pop,rand(mu,1)]; Xoldpar=Xpar;Xoff=Xpar;Ntot=[];mineval=0;newval=zeros(mu,1);itfct=0;fmin=[];CVold=1;valgen=1;Nevalg=0;////-----------------------------------------------------//-----------------------------------------------------//sigma=siginit;Xpar=evaluation(Xpar);

    Nevalf=mu;Nclust=Nclustmax;gen=0;//// MAIN LOOP : BEGINNING////for gen=1:Ngenfor i=1:lambdau=int(mu*rand())+1;xpar=Xpar(u,:);xoff=mutate(xpar,sigma); // ES mutationXoff(i,:)=xoff;

    end//oldval=Xoff(:,$);Xoff=evaluation(Xoff); // evaluation of the offspringsNevalf=Nevalf+lambda;//if (gen==1) then Nold=Nevalf;oldmean=mean(Xoff(:,$));end//Xpar=selection(Xpar,Xoff); // selection lambda+mubestpar=Xpar(1,1:n);fmin=[fmin,Xpar(1,$)];Ntot=[Ntot,Nevalf];result(Ntot,fmin,1); // dynamic result display//newval=Xoff(:,$);ind=find(oldval>newval);taux=length(ind)/lambda;if (tauxCVRlim)&(Nclust>0)&(gen-valgen>valmin) then // shift to

    steepest descent methodnewmean=mean(Xoff(:,$));Nnew=Nevalf;

  • 8/13/2019 General Basic Coding

    37/37

    deltagain=(oldmean-newmean)/(Nnew-Nold);oldmean=newmean;Nold=Nnew;

    //[Xclust,ind,Matr,Numb]=clustering(Xoff,Nclust);Xoffnew=[];for i=1:Nclust

    if (Numb(i)>0) then

    [xnew,fnew,itfct,itgrad]=steepest(Xclust(i,1:n),Xclust(i,$),epsilongrad,itgradmax,deltagain,tau,bet,alphainit);

    Nevalf=Nevalf+itfct+itgrad*n;Nevalg=Nevalg+itgrad;Xoffnew=[Xoffnew;xnew,fnew];

    endendXpar=selection(Xpar,Xoffnew); // selection lambda+mubestpar=Xpar(1,1:n);fmin=[fmin,Xpar(1,$)];Ntot=[Ntot,Nevalf];

    result(Ntot,fmin,2); // dynamic result displayvalgen=gen;end//------------------------------------------------------------------------------//// MAIN LOOP : ENDING//end//-----------------------------------------------------//////disp('minimum obtained:');disp(bestpar(1:n));disp('corresponding value by f:');disp(fmin($));disp('evaluation number:');disp(Nevalf);//