clc;
clear;
close all;
warning off;
addpath(genpath(pwd));
pop=100; % population
m_rate = .1; % mutation rate
c_pt = 2; % crossover point
good_enough = .08; % when to stop
weights = [1, .6, .4];
% chromosome format -------------------------------------------------------
power = 1;
cost = 2;
emission = 3;
source_1 = [20, .02, .01];
source_2 = [120, .20, .05];
source_3 = [15, .01, .02];
source_4 = [50, .02, .04];
sources = [source_1; source_2; source_3; source_4];
% define ranges
[num_sources, num_genes] = size(sources);
boundaries = zeros(num_genes, 2);
boundaries(1,:) = [15, 100]; % requested power range
boundaries(2,:) = [.15, 6.55]; % minimum cost to get max power
boundaries(3,:) = [.15, 3.75]; % minimum emissions to get max power
r = 2;
s = 2;
reproduction = @crossover;
survival = @elitism;
load = TimeSeries();
chromosomes = chromosome_gen(pop, sources);
vector = zeros(24, num_sources); % initialze vector for best chromosomes
econ = zeros(24, 1); % initialize vector for econonmic factor
enviro = zeros(24, 1); % intialize vector for environmental factor
time = zeros(24, 1); % vector to store time
for i = 1:length(load)
tic;
% get fitness vector
fit = fitness(chromosomes, sources, boundaries, weights, load(i));
[best, best_i] = min(fit);
% loop until a suitable chromosome is found
while(~stop_condition(fit, good_enough))
% reproduce with selected method
chromosomes = reproduction(chromosomes, pop, sources, boundaries, m_rate, c_pt);
fit = fitness(chromosomes, sources, boundaries, weights, load(i));
% kill with selected method
chromosomes = survival(pop, chromosomes, fit);
% check fitness of modified set
fit = fitness(chromosomes, sources, boundaries, weights, load(i));
[best,best_i]=min(fit);
% get rid of NaN
if(isnan(best))
best = 1;
end
end
% store elapsed time
elapsed = toc;
time(i) = elapsed;
% store chromosome in vector
vector = store_best(vector, fit, chromosomes, i);
% store economic factor
econ(i) = econ_fitness(chromosomes(best_i, :), sources, boundaries, weights);
% store environmental factor
enviro(i) = enviro_fitness(chromosomes(best_i, :), sources, boundaries, weights);
end
% plot information
enviro_plot(enviro);
econ_plot(econ);
power_plot(vector,load);
calculation_plot(time);