kamilosxd678

[SEM4][labSI] Algorytmy genetyczne

May 13th, 2013
415
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 3.13 KB | None | 0 0
  1. % Szukanie minimum funkcji - algorytm genetyczny
  2. clear;
  3.  
  4. liczba_rozw = 1000 ;                                % liczba osobnikow (rozwiazan) w populacji
  5.                                  
  6. liczba_epok = 1000;
  7. pkrz = 0.57;                                        % prawdopodobienstwo krzyzowania
  8. pmut = 0.83;                                        % prawdopodobienstwo mutacji
  9. wsp_selekcji = 0.1;                                % nacisk selekcyjny
  10.  
  11. liczba_param = 2;                                   % liczba parametrow funkcji
  12. L = liczba_rozw;
  13. N = liczba_param;
  14. Droga=[];
  15. Popul = rand(N,L)*100-50;                           % losowanie populacji dla L osobnikow (rozwiazan)
  16. minimum = 10e40;                                                 % poczatkowa wartosc rekordu    
  17. format long;                                                     % duza liczba miejsc po przecinku
  18. tic         % poczatek pomiaru czasu
  19. for ep=1:liczba_epok
  20.    Funkcja = fun10(Popul(1,:),Popul(2,:));           % wartosc funkcji dla kazdego rozwiazania (funkcje wskazuje prowadzacy)
  21.    for i=1:L
  22.       if Funkcja(i) > 0
  23.          Ocena(i) = 10e-22;
  24.       else
  25.           Ocena(i) = Funkcja(i) * (-100);
  26.       end
  27.    end% ocena > 0 i tym wieksza, im lepsze rozwiazanie
  28.  
  29.    
  30.    [min1 Imin] = min(Funkcja);
  31.    if minimum > min1                                 % sprawdzenie rekordu
  32.       minimum = min1;
  33.       Rekord = Popul(:,Imin);                          
  34.       Droga = [Droga ; Rekord'];                    % umieszczenie wspolrzednych na liscie
  35.       sprintf('w epoce %d  rekord = %f  w punkcie %s \n',ep,min1,num2str(Rekord'))
  36.    end
  37.    % Reprodukcja ...
  38.    Popul = rep_rul(Popul,Ocena);
  39.    % Krzyzowanie ...
  40.     for i=1:L
  41.        if rand()*2 > 1
  42.         if rand() <= pkrz
  43.             tmp = Popul(1,i);
  44.             it = floor(rand()*L)+1;
  45.             Popul(1,i) = Popul(1,it);
  46.             Popul(1,it) = tmp;
  47.         end
  48.        else
  49.         if rand() <= pkrz
  50.             tmp = Popul(2,i);
  51.             it = floor(rand()*L)+1;
  52.             Popul(2,i) = Popul(2,it);
  53.             Popul(2,it) = tmp;
  54.         end
  55.        end
  56.     end
  57.    % Mutacja ...
  58.    for i=1:L
  59.       if rand() <= pmut
  60.         if rand()*2 > 1
  61.             Popul(1,i) = Popul(1,i) + (rand()-0.5)*2;
  62.         else
  63.             Popul(2,i) = Popul(2,i) + (rand()-0.5)*2;
  64.         end
  65.       end
  66.    end
  67. end
  68.  
  69. disp('czas poszukiwan [s]:')
  70. toc                                                 % koniec pomiaru czasu
  71. % Rysowanie funkcji:
  72. [X Y] = meshgrid(-10:0.1:10,-10:0.1:10);            % siatka punktow na plaszczyznie dwuwymiarowej
  73. V = [ -1.75 -1.5 -1 0 1 2 3 4 5];                   % wysokosci poziomic
  74. [cs h] = contour(X,Y,fun10(X,Y),V);                  % wykres - mapa
  75. clabel(cs,h);                                                   % etykiety poziomic        
  76. hold on                                                          % rysuj na istniejacym rysunku
  77. % Rysowanie rekordowych punktow:
  78. plot(Droga(:,1)',Droga(:,2)');                           % przejscia pomiedzy rekordami    
  79. plot(Droga(:,1)',Droga(:,2)','ro');                      % rekordowe punkty oznaczone czerwonymi kolkami       
  80. title('Kolejne rekordy (w czerwonych kolkach)');
  81. for i=1:length(Droga(:,1)')                             % etykiety (numery) rekordow   
  82.     text(Droga(i,1)', Droga(i,2)', int2str(i), ...
  83.     'fontsize', 8);
  84. end
  85. hold off;
Advertisement
Add Comment
Please, Sign In to add comment