필터 지우기
필터 지우기

GA implementation in matlab without using the toolbox

조회 수: 5 (최근 30일)
Yasmin Tamimi
Yasmin Tamimi 2011년 4월 22일
편집: Walter Roberson 2016년 10월 15일
This is my code for implementing ga in matlab:
% Program for Genetic algorithm to minimize the constrained function ga_test
clear all;
clc;
function f = ga_test(x)
f = 120*x1 + 120*x2 + 120*x3 + 120*x4 + 120*x5 + 120*x6 + 120*x7 + 120*x8 + 120*x9 + 120*x10 + 40*y1 + 40*y2 + 40*y3 + 40*y4 + 40*y5 + 40*y6 + 40*y7 + 40*y8 + 40*y9 + 40*y10+ 40*y11 + 40*y12 + 40*y13 + 40*y14 + 40*y15 + 40*y16 + 40*y17 + 40*y18 + 40*y19+ 40*y20;
% Setup the Genetic Algorithm
fitnessfunction= @ga_test;
N = 1310; % number of optimization (decision) variables
popsize = 8 ; % set population size = number of chromosomes
max_iteration = 50; % max number of iterations
minimum_cost = 120; % minimum cost
mutation_rate = 0.01; % mutation rate
selection_rate = 0.5; % selection rate: fraction of population
nbits = 1;
Nt = nbits*N; % total number of bits in a chormosome
number_mutations = mutation_rate*N*(popsize-1); % number of mutations
% #population members that survive (Nkeep = Xrate*Npop); Nkeep survive for mating, and (Npop - Nkeep) are discarded to make room for the new offspring
keep = floor(selection_rate*popsize);
iga=0; % generation counter initialized
pop=round(rand(popsize,Nt)); % random population of 1s and 0s
cost=feval(fitnessfunction,pop); % calculates population cost using fitnessfunction
[cost,ind]=sort(cost); % min cost in element 1
pop=pop(ind,:); % sorts population with lowest cost first
minc(1)=min(cost); % minc contains min of population
while iga < max_iteration %Iterate through generations
iga=iga+1; % increments generation counter
% Pair and mate
M=ceil((M-keep)/2); % number of matings weights chromosomes based upon position in list probability distribution function
prob=flipud([1:keep]'/sum([1:keep]));
odds=[0 cumsum(prob(1:keep))];
pick1=rand(1,popsize); % mate #1
pick2=rand(1,popsize); % mate #2
% parents contain the indicies of the chromosomes that will mate
ic=1;
while ic<=M
for id=2:keep+1
if pick1(ic)<=odds(id) & pick1(ic)>odds(id-1)
ma(ic)=id-1;
end % if
if pick2(ic)<=odds(id) & pick2(ic)>odds(id-1)
pa(ic)=id-1;
end % if
end % id
ic=ic+1;
end % while
%_______________________________________________________
% Performs mating using single point crossover
ix=1:2:keep; % index of mate #1
xp=ceil(rand(1,M)*(Nt-1)); % crossover point
pop(keep+ix,:)=[pop(ma,1:xp) pop(pa,xp+1:Nt)];
% first offspring
pop(keep+ix+1,:)=[pop(pa,1:xp) pop(ma,xp+1:Nt)];
% second offspring
%_______________________________________________________
% Mutate the population
number_mutations=ceil((popsize-1)*Nt*mutation_rate); % total number of mutations
mrow=ceil(rand(1,number_mutations)*(popsize-1))+1; % row to mutate
mcol=ceil(rand(1,number_mutations)*Nt); % column to mutate
for ii=1:number_mutations
pop(mrow(ii),mcol(ii))=abs(pop(mrow(ii),mcol(ii))-1);
end
%_______________________________________________________
% The population is re-evaluated for cost decode
cost(2:popsize)=feval(fitnessfunction,pop(2:popsize,:));
%_______________________________________________________
% Sort the costs and associated parameters
[cost,ind]=sort(cost);
pop=pop(ind,:);
%_______________________________________________________
% Stopping criteria
if iga>maxit | cost(1)<mincost
break
end
[iga cost(1)]
end
I still didn't run my code because I do't know how shall I write my objective function and the constraints?? And upon what shall I decide the popsize?
Any help will be highly appreciated.

답변 (3개)

gurleen Sohi
gurleen Sohi 2011년 5월 14일
hi..actuallly i need matlab code for the design of IIR filter i.e to find magnitude and group delay of low pass butterworth filter using genetic algorithm....thanks..reply me on my email gurleensohi@gmail.com

Navneet kaur
Navneet kaur 2016년 10월 6일
have you come to know how to remove this error?? @yasmine
  댓글 수: 1
Walter Roberson
Walter Roberson 2016년 10월 6일
Your objective function should be whatever you want minimized. It will take a vector of input values and must output a scalar score, lower is more "fit".

댓글을 달려면 로그인하십시오.


Awais khan
Awais khan 2016년 10월 15일
편집: Walter Roberson 2016년 10월 15일
%problem is to maximize x^2 in 0 and 16 range
%%popsize=5
popsize=6;
POP=round(rand(popsize,4))
%%evaluation of the fitness funcs.
for iteration=1:1000
for ii=1:popsize
f(ii)=(bin2dec(num2str(POP(ii, :))))^2;
end
for ii=1:popsize
contribution(ii)=f(ii)/sum(f);
end
contribution;
contribution=contribution* popsize
contribution=round( contribution)
%pause
if sum(contribution)>popsize
[mymax,myindex]=max( contribution)
contribution(myindex)= contribution(myindex)-1
if sum(contribution)>popsize
[mymax,myindex]=max( contribution)
contribution(myindex)= contribution(myindex)-1
end
%pause
end
if sum(contribution)<popsize
[mymax,myindex]=max( contribution)
contribution(myindex)= contribution(myindex)+1
if sum(contribution)<popsize
[mymax,myindex]=max( contribution)
contribution(myindex)= contribution(myindex)+1
end
%pause
end%%BURAYI DUZELTELIM
%myindexes=contribution
%%Elements to be crossovered
POP
pause
m=1;
for ii=1:popsize
if contribution(ii)>0
gett=contribution(ii);
for jj=1:gett
TOCR(m,:)=POP(gett,:);
m=m+1;
end
end
end
myrandperms=randperm(popsize);
TOCR
111
pause
TOCR=TOCR(myrandperms,:)
% pause
CR=0.7;
%%CROSSOVER %let crossover point be 2
for ii=1:2:popsize-1
myrand=rand;
if myrand<CR
temp1=TOCR(ii,3:4);
temp2=TOCR(ii+1,3:4);
TOCR(ii,3:4)=temp2;
TOCR(ii+1,3:4)=temp1;
end
end
PM=0.1;
%%MUTATION
for ii=1:popsize
for jj=1:4%%number of bits
myrand=rand;
if myrand<PM
TOCR(ii,jj)=TOCR(ii,jj)+1;
TOCR(ii,jj)=rem(TOCR(ii,jj),2) ;
end
end
end
POP=TOCR;
end
POP
I have some errors in this code and cannot fix, How can i fix these errors to run my code

카테고리

Help CenterFile Exchange에서 Genetic Algorithm에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by