Generalized Genetic Algorithm Code

18 vues (au cours des 30 derniers jours)
Husain
Husain le 1 Mai 2016
Modifié(e) : Husain le 1 Mai 2016
Hello,
I'm working on making a generalized code solving for optimization problems using the Genetic Algorithm method. I've stuck at the performing mutation and penalizing parts. Also, I'm not sure where to close my While loop. This is what I've got so far.
%%Genetic Algorith Code
clear all
clc
%%Defining Variables
num_var=2; % Number of Variables
x_min=[-2*pi; -2*pi];
x_max=[2*pi; 2*pi];
x_disc=[2048;2048]; % Discrete x-values
for i=1:num_var
x_vals(i,:)=x_min(i,1):(x_max(i,1)-x_min(i,1))/(x_disc(:,1)-1):x_max(i,1);
end
for i=1:num_var
num_bits(i,:)=ceil(log2(x_disc(i,:)));
end
%%Defining Parameters
pop_size=100; % Population Size
pen_val=5; % Penalty Parameter
ep=2e-7; % Fitness Function Permutation Value
pen_scale=1.5; % Penalty Parameter Scaling Value
pr_cross=0.5; % Probability of Performing Crossover
pr_mut=0.05; % Probability of Performing Mutation
num_mut=1; % Number of Points to Mutate
num_con_it=100; % Number of Iterations to Consider for Convergence
eps=0.001; % Convergence Tolerance
stop=0; % Convergence Switch
k=1; % Iteration Counter
%%Initial Population Definition
for i=1:num_var
for j=1:pop_size
x_int(j,i,1)=randi(x_disc(i
if true
% code
end,:),1);
x(j,i,1)=x_vals(i,x_int(j,i,1));
end
end
%%Analyze Current Population Properties
for j=1:pop_size
pen(1,j)=sum(g_constraints(x(j,i,1)));
f(:,j)=f_function(x(j,i,1) + pen_val*pen(1,j));
end
%%Fitness Function
for j=1:pop_size
F(:,j)=(1+ep)*max(f(1,:)-f(1,j));
end
for j=1:pop_size
data_mat(j,:,1)=[ex(j,:,1) f(1,j)];
end
%%Sorting Data
sorted_data_mat=sortrows(data_mat(:,:,1),num_var+1);
x_best(1,:)=sorted_data_mat(1,[1:num_var]);
y_best(1,:)=sorted_data_mat(1,num_var+1);
%%V-Strings
while stop ==0 % NOTE: while loop is still not ended with an end command
for i=1:num_var
for j=1:pop_size
x_bin(j,i,k) = {dec2bin(x_int(j,i,k),num_buts(i,:))};
end
end
x(pop_size,:,k+1) = x_best(k,:);
x_int(pop_size,:,k+1)=x_int(index(1),:,k);
x_bin(pop_size,:,k+1)=x_bin(index(1),:,k);
%%Selecting Chromosome Preference
Q(k,:)=sum(F(k,:));
for j=1:pop_size
P(k,j)= F(k,j)/Q(k,:);
P_cum(k,j)=sum(P(k,:));
end
for j=1:(pop_size-1)
num=rand;
for jj=1:pop_size
if num == P_cum(k,jj)
select=jj;
end
end
x_bin(j,:,k+1)=x_bin(select,:,k);
for j=1:((pop_size-1)/2)
for i=1:num_var
cross=num;
if cross <= pr_cross
cross_loc = num_bits(i,:)-randi(num_bits(i,:)-1);
chromo1=char(x_bin(2*j-1,i,k+1));
chromo2=char(x_bin(2*j,i,k+1));
new_chromo1=strcat(chromo1(1:cross_loc),chromo2(cross_loc+1:num_bits(i,:)));
new_chromo2=strcat(chromo2(1:cross_loc),chromo1(cross_loc+1:num_bits(i,:)));
x_bin(2*k-1,i,k+1) = cellstr(new_chromo1);
x_bin(2*j,i,k+1) = cellstr(new+chromo2);
end
end
end
%%Perform Mutation
for j=1:(pop_size-1)
for i=1:num_var
for p=1:num_bits(i,:)
mut=num;
if mut <= pr_mut
chromo=char(x_bin(j,i,k+1));
if chromo(p)==0
chromo(p)=1;
elseif chromo(p)==1;
chromo(p)=0;
end
x_bin(j,i,k)=cellstr(chromo);
end
for j=1:(pop_size-1)
for i=1:num_var
x_int(j,i,k+1)=bin2dec(x_bin(j,i,k+1));
if x_int(j,i,k+1)==0
x_int(j,i,k+1)==1;
end
if x_int(j,i,k+1) == 1;
x_int(j,i,k+1)=round(x_disc(i,1))/(2^num_bits(i,:)); % NOTE: Not sure about this part
end
x(j,i,k+1)=x_vals(i,x_int(j,i,k+1));
end
end
% Next part should be the commented code but not completed
%%Penalizing
%for j = 1:pop_size
% pen(1,j) = sum(g_constraints
% NOTE: Not complete here
%%Evaluate
imp(k,:) = min(f(k,:)) - min(f(k+1),:);
if norm(imp(k-num_con_it:k))<eps
stop=1;
end
end
k=k+1;
%%Determine New Fitness
% NOTE: Not sure if this is in the right place.
for j=1:pop_size
F(k+1,j)=(1+eps)*max(f(k+1,:));
num_fun_eval=pop_size*k % Number of function Evaluations
%%x optimum point
%%y optimum point
I made notes to where I have problems and confused on how to code.
Thanks for your help in advance.

Réponses (0)

Community Treasure Hunt

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

Start Hunting!

Translated by