harmony search algorithm
Transkrypt
harmony search algorithm
HARMONY SEARCH ALGORITHM PRZYGOTOWALI: DZIARSKI JAROSŁAW KOZIARSKI MICHAŁ HARMONIA Harmonia – nauka o łączeniu akordów Akord – współbrzmienie co najmniej trzech dźwięków o różnej wysokości i nazwie Etapy algorytmu : sformułowanie problemu ustalenie parametrów losowe strojenie do inicjalizacji pamięci improwizację harmonii (wybieranie losowe, uwzględnienie pamięci i regulacja tonów) aktualizowanie pamięci dokonanie zakończenia cadenza function [xbest,fbest] = harmony(f,xL,xU,HSparams) % HARMONY basic Harmony Search minimization for continuous variables % Unpack the parameter vector HMS MaxImp = HSparams.MaxImp; HMCR = HSparams.HMCR; PAR = HSparams.PAR; b = HSparams.b; % Dimension arrays N = length(xL); HM = zeros(HMS,N); F = zeros(HMS,1); xnew = zeros(1,N); = HSparams.HMS; % Number of decision variables % Randomly initialize HM, taking care to keep each variable within bounds. % Evaluate the corresponding objective function values. for j = 1:HMS HM(j,:) = xL + (xU-xL).*rand(1,N); F(j) end = f(HM(j,:)); % Loop through MaxImp improvisations for j = 1:MaxImp % Improvise a new harmony: loop though each variable for i = 1:N % Randomly perform one of the three HS operations if rand < HMCR % Memory considering: randomly select a note stored in HM xnew(i) = HM(ceil(rand*HMS),i); if rand < PAR % Pitch adjusting: randomly adjust the pitch slightly % within +/- b(i), and ensure bounds are satisfied xnew(i) = xnew(i) + (2*rand-1)*b(i); xnew(i) = min(max(xnew(i),xL(i)),xU(i)); end else % Random playing: randomly select any pitch within bounds xnew(i) = xL(i) + rand*(xU(i)-xL(i)); end end % Finished improvising a new harmony % HM update: check whether the new harmony is better than the worst % harmony currently in HM fnew = f(xnew); [fworst,idxworst] = max(F); if fnew < fworst HM(idxworst,:) = xnew; F(idxworst) = fnew; end end % Maximum number of improvisations reached % Return the best harmony found [fbest,idxbest] = min(F); xbest = HM(idxbest,:); ------------------------------------------------------------------------------------------- % Set HS algorithm parameters HSparams.HMS = 10; % harmony memory size; ilosc wektorow rozwiazan rownoczesnie rozpatrywanych przez algorytm HSparams.MaxImp = 10000; % maksymalna ilosc improwizacji (iteracji) HSparams.HMCR = 0.8; % harmony memory considering rate; prawdopodobienstwo wybrania losowej wartosci z juz wygenerowanych (w przeciwnym razie losowana nowa); zakres <0; 1> HSparams.PAR = 0.4; % prawdopodobienstwo wystapienia dostrajania ('mutacji'); zakres <0; 1> HSparams.b = (xU-xL)/1000; % zmiana wartosci podczas dostrajania ('mutacji') Dziękujemy za uwagę PRZYGOTOWALI: DZIARSKI JAROSŁAW KOZIARSKI MICHAŁ