Advertisement
Guest User

Untitled

a guest
Dec 25th, 2018
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scilab 3.32 KB | None | 0 0
  1. alpha=0.75; // parametre de croisement
  2. B = 10; // largeur du domaine
  3. T=50; // nombre d'iterations
  4. N=100; // nombre de solutions
  5. pm=0.1; // probabilité de mutation
  6. pc=0.7; // proba de croisement
  7.  
  8. // Affichage de la fonction
  9. Domaine=[0:0.001:B]; length(Domaine);
  10. Image=[]; // vecteur
  11. for i=1:length(Domaine)
  12.     //im = sin*sin
  13.     im=10*sin(0.3*Domaine(i))*sin(1.3*Domaine(i)^2+0.00001*Domaine(i)^4+0.2*Domaine(i)+80)
  14.     Image=[Image,im]
  15. end
  16. xset("window",1); xset("thickness",2);
  17. plot2d(Domaine,Image,2);xtitle("La fonctin f ")
  18.  
  19. // ***Debut de l'algorithme génétique*** //
  20. P0=grand(1,N,'unf',0,B); // tirage de N solutions de la loi uniforme entre 0 et B
  21. f0=[];
  22. for i=1:N // fs = les images des abcusses stoqués dans P0
  23.     f0=[f0, 10*sin(0.3*P0(i))*sin(1.3*P0(i)^2+0.00001*P0(i)^4+0.2*P0(i)+80) ];
  24. end
  25.  
  26. [f0,indice]=gsort(f0); // ordonner  en décroissant les valeurs de f0 et repèrer l'indice
  27. P0=P0(indice); // réordonner selon l'indice
  28. MeilleurI=[]; MeilleurV=[];
  29. MeilleurI=[MeilleurI,P0(N)]; // abscisse de l'individu avec la solution minimale
  30. MeilleurV=[MeilleurV,f0(N)]; // image de l'individu avec la solution minimale
  31.  
  32. // Croisement
  33. for t =1:T
  34.     Bernoulli=grand(1,N/2,'bin',1,pc) // N/2 valeurs suivant bernoulli [1,pc]
  35.     P1=ones (1,N) // initiation d'une population de N individus
  36.     for i=0:(N/2)-1 // par paire pour croisement!
  37.     if Bernoulli(i+1)==1   then
  38.         // croisement par pair qui ont la meme qualité (similarité par barycentre)
  39.         P1(2*i+1)= alpha* P0(2*i+1)+(1-alpha)*P0(2*i+2);
  40.         P1(2*i+2)= alpha* P0(2*i+2)+(1-alpha)*P0(2*i+1);
  41.     else // conservation des parents
  42.         P1(2*i+1)=P0(2*i+1)
  43.         P1(2*i+2)=P0(2*i+2)    
  44.     end,
  45. end
  46.  
  47. // Mutation
  48. P2=P0;
  49. Bernoulli=grand(1,N,'bin',1,pm); // N/2 valeurs suivant bernoulli [1,pm]
  50. for i=1:N
  51.     // U[-B/4;B/4] c'est le rayon de mutation
  52.     // Faire la mutation ssi bernoulli=1 sinon P2(i)=P(i)
  53.     P2(i)=  P0(i)+ grand(1,'unf',-B/4,B/4) *Bernoulli(i) ;  
  54. end
  55.  
  56. P3=[];
  57. P3=[P3,P1,P2]; // P1 : croisé, P2:muté
  58. f=[]; // contient les images de P3 pour les évaluer
  59. for i=1:(2*N)
  60.     f=[f, 10*sin(0.3*P3(i))*sin(1.3*P3(i)^2+0.00001*P3(i)^4+0.2*P3(i)+80) ];
  61. end
  62.  
  63. //transformer f et P3 selon une permutaton aléatoire
  64. permut=grand(1,'prm',[1:(2*N)]'); //2N car P3 contient P1 et P2 de tailles N
  65. f=f(permut);
  66. P3=P3(permut);  
  67.  
  68. P4=[] //on stocke les abcisses des meilleures solutions dans P4
  69. for i=0:(N-1)
  70.     if  f(2*i+1)>=f(2*i+2) & grand(1,'unf',0,1)>=0.5 then // mauvaise solution
  71.         P4=[P4,P3(2*i+1)]; // on l'accepte avec une probaba 0.5
  72.     else
  73.         P4=[P4,P3(2*i+2)];
  74.     end
  75. end
  76.  
  77. //calculer les images de la population P4
  78. f=[]
  79. for i=1:(N)
  80.     f=[f,10*sin(0.3*P4(i))*sin(1.3*P4(i)^2+0.00001*P4(i)^4+0.2*P4(i)+80)];
  81. end
  82.  
  83. [f,V]=gsort(f); // tri des valeurs de f; V : vecteur d'indices
  84. P4=P4(V); // tri des abcisses selon le Tri de f pour prendre les meilleurs individus
  85.  
  86. // l'individu qui a fait l'image minimale : (minimiser sinus = maximiser -sinus)
  87. // fi = - Fi + cste
  88. MeilleurI=[MeilleurI,P4(N)]; //abcisse
  89. MeilleurV=[MeilleurV,f(N)]; //individu (dernière valeur que je veu minimiser)
  90. P0=P4;
  91. end    
  92.  
  93. // Affichage des meilleurs individus ayant le minimum des valeurs
  94. disp(MeilleurV);xset("window",3); plot2d([1:1:T+1],MeilleurV,2);
  95. xtitle("Fluctuation du minimum : ","axe du temps","")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement