Professional Documents
Culture Documents
Eld N Ga
Eld N Ga
clc;
clear all;
fprintf('\n');
pop_size = 20;
nvar = 3;
bit = 16;
nbit = bit*nvar;
% B-Coefficoent Matrix
con = [0.000136 0.0000175 0.000184; 0.0000175 0.000154 0.000283;
0.000184 0.000283 0.000161];
%% Initial Population
% Random Population
chromosome = randi([0,1],pop_size,nbit);
xdes = bi2de(chromosome(1:pop_size,1:bit));
ydes = bi2de(chromosome(1:pop_size,bit+1:2*bit));
zdes = bi2de(chromosome(1:pop_size,2*bit+1:end));
% Variable Generation
p1 = zeros(pop_size,1);
p2 = zeros(pop_size,1);
p3 = zeros(pop_size,1);
for i = 1:pop_size;
p1(i) = 50+(200/(2.^bit-1))*xdes(i);
p2(i) = 5+(145/(2.^bit-1))*ydes(i);
p3(i) = 15+(85/(2.^bit-1))*zdes(i);
end
% Function Calculation
fun1 = zeros(pop_size,1);
fun2 = zeros(pop_size,1);
fun3 = zeros(pop_size,1);
total_cost = zeros(pop_size,1);
for j = 1:pop_size;
fun1(j) = 0.00525*p1(j)^2+8.663*p1(j)+328.13;
fun2(j) = 0.00609*p2(j)^2+10.040*p2(j)+136.91;
fun3(j) = 0.00592*p3(j)^2+9.760*p3(j)+59.16;
total_cost(j) = fun1(j)+fun2(j)+fun3(j);
end
p = [p1 p2 p3];
demand = 300;
% Loss Calculation
loss1 = zeros(pop_size,1);
loss2 = zeros(pop_size,1);
loss3 = zeros(pop_size,1);
loss = zeros(pop_size,1);
for k = 1:pop_size;
loss1(k) =
p(k,1)*con(1,1)*p(k,1)+p(k,1)*con(1,2)*p(k,2)+p(k,1)*con(1,3)*p(k,3);
loss2(k) =
p(k,2)*con(2,1)*p(k,1)+p(k,2)*con(2,2)*p(k,2)+p(k,2)*con(2,3)*p(k,3);
loss3(k) =
p(k,3)*con(3,1)*p(k,1)+p(k,3)*con(3,2)*p(k,2)+p(k,3)*con(3,3)*p(k,3);
loss(k) = loss1(k)+loss2(k)+loss3(k);
end
% Fitness Calculation
summ = zeros(pop_size,1);
tolr = zeros(pop_size,1);
fitn = zeros(pop_size,1);
for l = 1:pop_size;
summ(l) = p(l,1)+p(l,2)+p(l,3);
tolr(l) = abs((demand+loss(l))-summ(l));
fitn(l) = 1/(1+(tolr(l)/demand));
end
% Sorting
[fitn,sorten] = sort(fitn,'descend');
chromosome = chromosome(sorten,:);
loss = loss(sorten,:);
total_cost = total_cost(sorten,:);
tolr = tolr(sorten,:);
gene = 0;
maxgene = 25;
mutrate = 0.01;
selection = 0.8;
error = 0.0001;
if mod(keep,2) ~= 0
keep = keep + 1;
end
if mod(mating,2) == 0
mating = mating - 1;
keep = keep + 2;
end
gene = gene + 1;
prob = zeros(pop_size,1);
for i = 1:pop_size
prob(i) = fitn(i)/sum(fitn);
end
comprob = cumsum(prob);
parents = zeros(1,pop_size);
for i = 1:keep
r = rand;
for j = 1:pop_size
if r >= comprob(j)
parents(i) = j;
break;
end
end
end
% Temp_2 is Index For Separating Maa And Paa Also For Chromosomes
Increment
temp_1 = 1:2:(mating*2);
maa = parents(temp_1);
paa = parents(temp_1+1);
crossprob = randi([1,bit-1],1,mating);
chromosome(keep+temp_1,:) = [chromosome(maa,1:crossprob)
chromosome(paa,crossprob+1:nbit)];
chromosome(keep+temp_1+1,:) = [chromosome(paa,1:crossprob)
chromosome(maa,crossprob+1:nbit)];
nmutation = ceil(pop_size*nbit*mutrate);
mutrow = randi([keep+1,pop_size],1,nmutation);
mutcol = randi([1,nbit],1,nmutation);
for i = 1:nmutation
chromosome(mutrow(i),mutcol(i))=abs(chromosome(mutrow(i),mutcol(i))-1);
end
% Recalculation
xdes = bi2de(chromosome(1:pop_size,1:bit));
ydes = bi2de(chromosome(1:pop_size,bit+1:2*bit));
zdes = bi2de(chromosome(1:pop_size,2*bit+1:end));
for i = 1:pop_size;
p1(i) = 50+(200/(2.^bit-1))*xdes(i);
p2(i) = 5+(145/(2.^bit-1))*ydes(i);
p3(i) = 15+(85/(2.^bit-1))*zdes(i);
end
for j = 1:pop_size;
fun1(j) = 0.00525*p1(j)^2+8.663*p1(j)+328.13;
fun2(j) = 0.00609*p2(j)^2+10.040*p2(j)+136.91;
fun3(j) = 0.00592*p3(j)^2+9.760*p3(j)+59.16;
total_cost(j) = fun1(j)+fun2(j)+fun3(j);
end
p = [p1 p2 p3];
for k = 1:pop_size;
loss1(k) = p(k,1)*con(1,1)*p(k,1) + p(k,1)*con(1,2)*p(k,2) +
p(k,1)*con(1,3)*p(k,3);
loss2(k) = p(k,2)*con(2,1)*p(k,1) + p(k,2)*con(2,2)*p(k,2) +
p(k,2)*con(2,3)*p(k,3);
loss3(k) = p(k,3)*con(3,1)*p(k,1) + p(k,3)*con(3,2)*p(k,2) +
p(k,3)*con(3,3)*p(k,3);
loss(k) = loss1(k) + loss2(k) + loss3(k);
end
for l = 1:pop_size;
summ(l) = p(l,1)+p(l,2)+p(l,3);
tolr(l) = abs((demand+loss(l))-summ(l));
fitn(l) = 1/(1 + (tolr(l)/demand));
end
[fitn,sorten] = sort(fitn,'descend');
chromosome = chromosome(sorten,:);
loss = loss(sorten,:);
total_cost = total_cost(sorten,:);
tolr = tolr(sorten,:);
% Display Variables
avg_fitn(gene) = mean(fitn);
best_cost(gene) = total_cost(1);
end
figure(1);
plot(1:gene,best_cost);
title('Objective Function V/S Generation');
xlabel('Number Of Generations');
ylabel('Function Value')
hold on;
figure(2);
plot(1:gene,avg_fitn);
title('Average Fitness V/S Generation');
xlabel('Number Of Generations');
ylabel('Average Fitness Value')
toc