Advertisement
Ostu

Untitled

Dec 10th, 2021
1,139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 2.04 KB | None | 0 0
  1. % niezbedne okazalo sie podanie obiektu, z uwagi na fakt ze wewnatrz
  2. % funkcji korzystamy z funkcji Optim, ktora wymaga wprowadzenia obiektu
  3.  
  4. function rul = Rulet(PID,obiekt,szanse)
  5. % A. policzenie wartość funkcji celu dla każdego osobnika
  6.  
  7. % pobranie rozmiaru macierzy osobnikow
  8. [m,n]=size(PID);
  9.  
  10. % stworzenie macierzy do ktorej wpiszemy funkcje celu kazdego osobnika
  11. FunCel=zeros(m, 2);
  12.  
  13. % obliczenie funkcji celu dla osobnikow
  14. for i=1:m
  15.     FCo=PIDOptimFun(PID(i, :), obiekt)
  16.     FunCel(i, :) = [FCo(1), i]
  17. end
  18.  
  19. % B. obliczenie sumy wartości funkcji celu wszystkich osobników
  20. FCsum=sum(FunCel(:, 1));
  21.  
  22. % C. wyznaczenie udziału każdego z osobników w tej sumie
  23. udzial=[FunCel(:, 1)/FCsum, FunCel(:, 2)];
  24.  
  25. % D. naniesienie danych na koło ruletki
  26.  
  27. % odwarocenie macierzy udzialu, dzieki temu wylosowanie najlepszego
  28. % osobnika jest bardzo duze
  29. % wartosc szanse= moze byc dowolnie modyfikowana, jej zwiekszenie zwiekszy
  30. % szanse na otrzymanie najlepszego osobnika
  31. % analogiczna odwrotna zaleznosc wystepuje zmniejszajac wartosc szansy
  32. % wartosc zerowa calkowicie zrownuje szanse osobnikow
  33. % szanse=1
  34.  
  35.  
  36. udzialszansa=[(1./(ones(m, 1)+udzial(:,1))*szanse),udzial(:,2)];
  37.  
  38. % kolejna czynnoscia jest przypisanie kazdego osobnika do jego wlasnej
  39. % czesci/kawalkow kola ruletki
  40. czesc=[cumsum(udzialszansa(:, 1)), udzialszansa(:, 2)];
  41.  
  42. % maksymalny los
  43. rulmax=czesc(end,1);
  44. % E. LOSOWANKOOOO
  45.  
  46. % pierwsza czynnoscia jest wprowadzenie ELITARYZMU
  47. % u nas za to odpowiada elite
  48. elite = zeros(m, 1);
  49.  
  50. % sortujemy osobniki i ich funckje w odopowiedniej kolejnosci
  51. % aby wytypowac tych nablizej zera
  52. % dwa najlepsze osobniki zachowujemy aby chronic je i ich nie stracic
  53. [kolFun, kolOso]=sort(FunCel(:, 1));
  54. sortFunCel=[kolFun, kolOso];
  55. elite(1) = kolOso(1);
  56. elite(2) = kolOso(2);
  57.  
  58.  
  59.  
  60.  
  61.  
  62. for i = 3:m  
  63.     los = rand(1) * rulmax;
  64.     for j = 1:m
  65.        if los <= czesc(j, 1)
  66.            elite(i) = czesc(j, 2);
  67.            break;
  68.        end
  69.     end
  70. end
  71.  
  72. % macierz skladajaca sie z najlepszych osobnikow
  73. rul = PID(elite, :)
  74. end
  75.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement