You are on page 1of 5

tic

clc;
clear all;

disp('***** Economical Load Dispatch Problem Using Genetic


Algorithm *****');

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);

% Binary To Decimal Conversion

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,:);

% Genetic Algorithm Parameters

gene = 0;
maxgene = 25;
mutrate = 0.01;
selection = 0.8;
error = 0.0001;

keep = floor (selection*pop_size);


mating = ceil((pop_size-keep)/2);
prob = zeros(1,keep);

if mod(keep,2) ~= 0
keep = keep + 1;
end
if mod(mating,2) == 0
mating = mating - 1;
keep = keep + 2;
end

while gene <= maxgene

gene = gene + 1;

% Roulette Wheel Selection

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);

if tolr(1) <= error


break;
else
continue;
end

end

temp_5 = sprintf('Optimal Cost is %d Rs/MWh.', best_cost(gene));


disp(temp_5);
fprintf('\n');

temp_6 = sprintf('Generation Of Plant 1 is %d MW, Plant 2 is %d MW,


Plant 3 is %d MW.', p(1,1), p(1,2), p(1,3));
disp(temp_6);
fprintf('\n');
temp_7 = sprintf('Losses Are %d MW.', loss(1));
disp(temp_7);
fprintf('\n');

temp_8 = sprintf('Number Of Generation Taken Is %d.', gene);


disp(temp_8);
fprintf('\n');

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

You might also like