% program DEMPAG1 demonstruje rozwiazanie zadanie mimalizacji funkcji jednej zmiennej f(x) % za pomoca prostego algorytmu genetycznego (PAG) % z wykorzystaniem Genetic Algoritm Toolbox (GAT) % Copyright (c), Marek Słoński, 09.04.2008 clear %wykres optymalizowanej funkcji x = 0:.1:31; y = funkcja_celu(x); plot(x, y, 'g--'); hold on; grid on; xlabel('x'); ylabel('f(x)'); pause rand('state', 41) %stan generatora liczb losowych (wpływa na populację początkową) % parametry determinujące populację i proces ewolucji PRECI = 5; %liczba bitow reprezentujacych zmienną decyzyjną x (osobnika) NIND = 4; %liczba osobników w populacji MAXGEN = 3; %liczba generacji GGAP = 0.75; %współczynnik wymiany osobników FieldD = [PRECI, 0, 31, 0, 0, 0, 0]'; %utworzenie wektora parametrów opisującego problem Chrom=crtbp(NIND, PRECI); %utworzenie populacji poczatkowej (reprezentacja binarna) Phen = bs2rv(Chrom, FieldD); %utworzenie populacji fenotypów objVal = funkcja_celu(Phen); %obliczenie wartosci funkcji celu %dodanie do wykresu fenotypów wraz z wartosciami funkcji celu plot(Phen, objVal, 'b^'); %lista osobników w populacji wraz z wartosciami funkcji celu Chrom lista = [Phen objVal] pause minobj(1) = min(objVal); %zapisanie wartosci funkcji celu dla najlepszego osobnika %return for gen = 1:MAXGEN FitnV = ranking(objVal); %przyporządkowanie wartosci funkcji przystosowania SelChrom = select('rws', Chrom, FitnV, GGAP) %operator selekcji - kolo ruletki SelChrom = recombin('xovsp', SelChrom, 0.7) %operator krzyzowania jednopunktowego SelChrom = mut(SelChrom) %operator mutacji PhenSel = bs2rv(SelChrom, FieldD); %utworzenie populacji fenotypów objValSel = funkcja_celu(PhenSel); %obliczenie wartosci funkcji celu [Chrom objVal] = reins(Chrom, SelChrom, 1, 1, objVal, objValSel); %podstawienie do populacji nowych osobników Phen = bs2rv(Chrom, FieldD); Chrom lista = [Phen objVal] minobj(gen+1) = min(objVal); plot(Phen, objVal, 'ro') end figure plot([0, 1:MAXGEN], minobj, '--ro')