function mysimple () NIND = 10; % Numero di individui MAXGEN = 1000; % Numero di generazioni (iterazioni) NVAR = 20; % numero di variabili PRECI = 20; % Bit utilizzati er decrivere ciascuna variabile, PRECISIONE GGAP = 0.9; % Quanti individui in % vengono ostituiti da nuovi individui ad ogni iterazione FieldD = [rep([PRECI],[1,NVAR]);... % Field Descriptor, ovvero indichiamo che il nostro cromosoma costituito rep([-512;512],[1,NVAR]); rep([1;0;1;1],[1,NVAR])]; % da 20 variabili, rappresentate da 20 bit, che possono assumere valori da % -512 a 512 codificate % in Gray code. Chrom = crtbp(NIND, NVAR*PRECI); % Costruzione del cromosoma, overo una matrice di righe = NIND (Numero INDividui) % e colonne = NVAR * PRECI (Numero VARiabili * PRECIsione) gen = 1; % Contatore generazioni ObjV = objfun1(bs2rv(Chrom,FieldD)); % Codifico il Fenotipo corrispondente al Genotipo, sulla base del descrittore FieldD % Dopodich lo invio alla Funzione oggettiva, che nel nostro caso rappresentata % dalla fuznione De Jong. Restituisce un vettore colonna con il valore oggettivo % corrispondente ad ogni individuo while gen < MAXGEN, FitnV = ranking(ObjV); % Calcola il valore di fitness sulla base dei valori oggettivi. Restituisce un vettore colonna contenente i % valori di fitness di ogni individuo. La fitness assume valori da 0 a 2. La funzione ranking assume % che la funzione oggettva sia da MINIMIZZARE minobjv(gen) = min(ObjV); totobjv(gen) = mean(ObjV); SelCh = select('sus', Chrom, FitnV, GGAP); % Questa funzione seleziona con metodo Stochastic Universal Sampling, dalla matrice % Chrom, basandosi sulla Fitness, una quantit di individui pari a GGAP*NIND % La matrice SelCh contiene ora i cromosomi dei genitori, selezionati in base alla fitness, per la riproduzione. SelCh = recombin('XOVSP',SelCh,0.7); % I figli vengono creati ricombinando i geni dei cromosomi contenuti in SelCh % Per la riproduzione viene usato Crossover Single Point con possibilit del 70% SelCh = MUT(SelCh); % Applica la mutazione ai figli contenuti nella matrice SelCh. Se non specificato diversamente, % la probabilit d mutazione pari a 0.7/Lunghezza del cromosoma. Nel nostro caso, 0.7/20*20 ObjVSel = objfun1(bs2rv(SelCh,FieldD)); % Calcolo il valore della funzione oggettiva relativa ai figli [Chrom ObjV]=REINS(Chrom,SelCh,1,1,ObjV,ObjVSel); % Sostituisco i figli ai genitori. La sostituzione avviene all'interno % della matrice originale Chrom e sulla base della Fitness (il quarto % parametro "1" indica reinserimento in base alla fitness) gen = gen+1 % Incremento il contatore generazione di 1 e continuo fino alla generazione massima indicata end figure ('name','Andamento minimo funzione oggettiva') plot (minobjv) figure ('name','Andamento del totale della funzione oggettiva') plot (totobjv) min (ObjV)