I'm trying to make a GA code for welding optimization with three parameters, each parameter has a different interval limit. Need guidance here…
===========================================================================
My parameters:
current: 80 – 100 ampere => x(1)
voltage: 80 – 90 volt => x(2)
weld time: 13 – 15 second => x(3)
since this is my first time using GA, I'm a little bit confused how to do it. In my code, I represent my parameters as a variable of a fitness function. Not sure if this is right.
============================================================================
My fitness function:
function y = weldingfcn {x(1),x(2),x(3)} for x(1)=80:100 for x(2)=80:90 for x(3)=13:15 y = -(1-0.01)*{(x(1)-5)^2+(x(2)-5)^2+(x(3)-5)^2}; end end end
============================================================================
My function for initializing population:
%popsize = population size
%stringlength = number of bits that represent individual
%dimension = number of variable
function pop = encoding(popsize,stringlength,dimension) pop = round(rand(popsize,dimension*stringlength+1));
===========================================================================
My function for decoding population binary number to decimal number:
function pop=decoding(pop,stringlength,dimension,x_bound)popsize=size(pop,1);temp=2.^(stringlength-1:-1:0)/(2^stringlength-1); for i=1:dimension bound(i)=x_bound(i,2)-x_bound(i,1); end for i=1:popsize for j=1:dimension m(:,j)=pop(i,stringlength*(j-1)+1:stringlength*j); end x=temp*m; x=x.*bound+x_bound(:,1)'; pop(i,dimension*stringlength+1)=funname(x); end
========================================================================
Function for selection procedure:
function selected = selection(pop,popsize,stringlength,dimension) popsize_new = size(pop,1);r=rand(1,popsize);fitness=pop(:,dimension*stringlength+1);fitness=fitness/sum(fitness);fitness=cumsum(fitness);for i=1:popsize for j=1:popsize_new if r(i)<=fitness(j) selected(i,:)=pop(j,:); break; end end end
============================================================================
Function for crossover procedure:
function new_pop = cross_over(pop,popsize,stringlength,dimension) match = round(rand(1,popsize)*(popsize-1))+1; for i = 1:popsize [child1,child2] = cross_running(pop(i,:),pop(match(i),:),stringlength,dimension); new_pop(2*i-1:2*i,:)= [child1;child2]; endfunction [child1,child2] = cross_running(parent1,parent2,stringlength,dimension) cpoint = round((stringlength-1)*rand(1,dimension))+1; for j=1:dimension child1((j-1)*stringlength+1:j*stringlength)=[parent1((j-1)*stringlength+1: (j-1)*stringlength+cpoint(j)) parent2((j-1)*stringlength+cpoint(j)+1:j*stringlength)]; child2((j-1)*stringlength+1:j*stringlength)=[parent2((j-1)*stringlength+1: (j-1)*stringlength+cpoint(j)) parent1((j-1)*stringlength+cpoint(j)+1:j*stringlength)]; end
===========================================================================
Function for mutation procedure:
function new_pop = mutation(new_pop,stringlength,dimension,pm) new_popsize = size(new_pop,1); for i=1:new_popsize if rand<pm mpoint=round(rand(1,dimension)*(stringlength-1))+1; for j=1:dimension new_pop(i,(j-1)*stringlength+mpoint(j))=1-new_pop(i,(j-1)*stringlength+mpoint(j)); end end end
===========================================================================
Function for starting the GA:
%GA parameter
popsize=10; %population size
dimension=3; %number of variables
stringlength=8; %length of binary number
x_bound=[80,100;80,90;13,15]; %x limit interval [lb,ub]
%where: lb = lower bound
% ub = upper bound
pm=0.05; %mutation probability
%Genetic Algorithm
pop=encoding_guo(popsize,stringlength,dimension); pop=decoding_guo(pop,stringlength,dimension,x_bound); [choice_number,choice_k]=max(pop(:,stringlength*dimension+1)); choice=pop(choice_k,:); for i=1:1000 new_pop=cross_over(pop,popsize,stringlength,dimension); pop=mutation_guo(new_pop,stringlength,dimension,pm); pop=decoding_guo(pop,stringlength,dimension,x_bound); [number,k]=max(pop(:,stringlength*dimension+1)); if choice_number<number choice_number=number; choice_k=k; choice=pop(choice_k,:); end pop=selection_guo(pop,popsize,stringlength,dimension); [number,m]=min(pop(:,stringlength*dimension+1)); pop(m,:)=choice; end [value,x]=result_guo(pop,stringlength,dimension,x_bound);
============================================================================
Function for displaying the result:
function [value,x] = result_guo(pop,stringlength,dimension,x_bound) [value,x] = max(pop(:,stringlength*dimension+1)); temp=2.^(stringlength-1:-1:0)/(2^stringlength-1);for i=1:dimension bound(i)=x_bound(i,2)-x_bound(i,1);end
============================================================================
When i run the GA, an error showing up. after i fixed it, another comes up. It's always error. Someone please guide me. Thank you for your concern =)
Best Answer