Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- % niezbedne okazalo sie podanie obiektu, z uwagi na fakt ze wewnatrz
- % funkcji korzystamy z funkcji Optim, ktora wymaga wprowadzenia obiektu
- function rul = Rulet(PID,obiekt,szanse)
- % A. policzenie wartość funkcji celu dla każdego osobnika
- % pobranie rozmiaru macierzy osobnikow
- [m,n]=size(PID);
- % stworzenie macierzy do ktorej wpiszemy funkcje celu kazdego osobnika
- FunCel=zeros(m, 2);
- % obliczenie funkcji celu dla osobnikow
- for i=1:m
- FCo=PIDOptimFun(PID(i, :), obiekt)
- FunCel(i, :) = [FCo(1), i]
- end
- % B. obliczenie sumy wartości funkcji celu wszystkich osobników
- FCsum=sum(FunCel(:, 1));
- % C. wyznaczenie udziału każdego z osobników w tej sumie
- udzial=[FunCel(:, 1)/FCsum, FunCel(:, 2)];
- % D. naniesienie danych na koło ruletki
- % odwarocenie macierzy udzialu, dzieki temu wylosowanie najlepszego
- % osobnika jest bardzo duze
- % wartosc szanse= moze byc dowolnie modyfikowana, jej zwiekszenie zwiekszy
- % szanse na otrzymanie najlepszego osobnika
- % analogiczna odwrotna zaleznosc wystepuje zmniejszajac wartosc szansy
- % wartosc zerowa calkowicie zrownuje szanse osobnikow
- % szanse=1
- udzialszansa=[(1./(ones(m, 1)+udzial(:,1))*szanse),udzial(:,2)];
- % kolejna czynnoscia jest przypisanie kazdego osobnika do jego wlasnej
- % czesci/kawalkow kola ruletki
- czesc=[cumsum(udzialszansa(:, 1)), udzialszansa(:, 2)];
- % maksymalny los
- rulmax=czesc(end,1);
- % E. LOSOWANKOOOO
- % pierwsza czynnoscia jest wprowadzenie ELITARYZMU
- % u nas za to odpowiada elite
- elite = zeros(m, 1);
- % sortujemy osobniki i ich funckje w odopowiedniej kolejnosci
- % aby wytypowac tych nablizej zera
- % dwa najlepsze osobniki zachowujemy aby chronic je i ich nie stracic
- [kolFun, kolOso]=sort(FunCel(:, 1));
- sortFunCel=[kolFun, kolOso];
- elite(1) = kolOso(1);
- elite(2) = kolOso(2);
- for i = 3:m
- los = rand(1) * rulmax;
- for j = 1:m
- if los <= czesc(j, 1)
- elite(i) = czesc(j, 2);
- break;
- end
- end
- end
- % macierz skladajaca sie z najlepszych osobnikow
- rul = PID(elite, :)
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement