Project: First version of the code and report stub
This commit is contained in:
parent
4aaf7cc457
commit
50c87f9d6a
BIN
Project/Project 2024.pdf
Normal file
BIN
Project/Project 2024.pdf
Normal file
Binary file not shown.
BIN
Project/report/report.pdf
Normal file
BIN
Project/report/report.pdf
Normal file
Binary file not shown.
90
Project/report/report.tex
Normal file
90
Project/report/report.tex
Normal file
@ -0,0 +1,90 @@
|
||||
% !TEX TS-program = xelatex
|
||||
% !TEX encoding = UTF-8 Unicode
|
||||
% !TEX spellcheck = el-GR
|
||||
%
|
||||
% Optimization techniques project report
|
||||
%
|
||||
% Requires compilation with pdfLaTeX or XeLaTeX
|
||||
%
|
||||
% authors:
|
||||
% Χρήστος Χουτουρίδης ΑΕΜ 8997
|
||||
% cchoutou@ece.auth.gr
|
||||
|
||||
%
|
||||
% Options:
|
||||
%
|
||||
% 1) mainlang=<language>
|
||||
% Default: english
|
||||
% Set the default language of the document which affects hyphenations,
|
||||
% localization (section, dates, etc...)
|
||||
%
|
||||
% example: \documentclass[mainlang=greek]{AUThReport}
|
||||
%
|
||||
% 2) <language>
|
||||
% Add hyphenation and typesetting support for other languages
|
||||
% Currently supports: english, greek, german, frenc
|
||||
%
|
||||
% example: \documentclass[english, greek]{AUThReport}
|
||||
%
|
||||
% 3) short: Requests a shorter title for the document
|
||||
% Default: no short
|
||||
%
|
||||
% example: \documentclass[short]{AUThReport}
|
||||
%
|
||||
\documentclass[a4paper, 11pt, mainlang=greek, english]{AUThReport}
|
||||
|
||||
\CurrentDate{\today}
|
||||
|
||||
% Document setup
|
||||
%---------------------------------
|
||||
|
||||
% \WorkGroup{Ομάδα Χ}
|
||||
|
||||
\AuthorName{Χρήστος Χουτουρίδης}
|
||||
\AuthorMail{cchoutou@ece.auth.gr}
|
||||
\AuthorAEM{8997}
|
||||
|
||||
%\CoAuthorName{Όνομα Επίθετο}
|
||||
%\CoAuthorAEM{AEM}
|
||||
%\CoAuthorMail{xxx@ece.auth.gr}
|
||||
|
||||
\DocTitle{Project: Γενετικοί αλγόριθμοι}
|
||||
\DocSubTitle{Ελαχιστοποίηση συνάρτησης πολλών μεταβλητών}
|
||||
|
||||
\Department{Τμήμα ΗΜΜΥ. Τομέας Ηλεκτρονικής}
|
||||
\ClassName{Τεχνικές Βελτιστοποίησης}
|
||||
%
|
||||
\InstructorName{Γ. Ροβιθάκης}
|
||||
\InstructorMail{rovithak@auth.gr}
|
||||
|
||||
\CoInstructorName{Θ. Αφορόζη}
|
||||
\CoInstructorMail{taforozi@ece.auth.gr}
|
||||
|
||||
|
||||
% Local package requirements
|
||||
%---------------------------------
|
||||
|
||||
\usepackage{enumitem}
|
||||
\usepackage{tabularx}
|
||||
\usepackage{array}
|
||||
\usepackage{multirow}
|
||||
\usepackage{float}
|
||||
\usepackage{xcolor}
|
||||
\usepackage{soul}
|
||||
\usepackage{amsmath}
|
||||
\usepackage{footnote}
|
||||
\usepackage{footmisc}
|
||||
|
||||
|
||||
\begin{document}
|
||||
|
||||
\InsertTitle
|
||||
|
||||
%\tableofcontents
|
||||
|
||||
|
||||
\section{Εισαγωγή}
|
||||
|
||||
Η παρούσα εργασία αφορά ...
|
||||
|
||||
\end{document}
|
84
Project/scripts/main.m
Normal file
84
Project/scripts/main.m
Normal file
@ -0,0 +1,84 @@
|
||||
% Genetic Algorithm for Minimizing Network Traversal Time
|
||||
|
||||
clc;
|
||||
clear;
|
||||
close all;
|
||||
|
||||
% Problem Parameters
|
||||
N = 17; % Number of roads
|
||||
t = 1.5 * ones(1, N); % Fixed time for each road
|
||||
a = [1.25 * ones(1, 5), 1.5 * ones(1, 5), ones(1, 7)]; % Weighting factor
|
||||
c = [
|
||||
54.13, 21.56, 34.08, 49.19, 33.03, 21.84, 29.96, 24.87, 47.24, 33.97, ...
|
||||
26.89, 32.76, 39.98, 37.12, 53.83, 61.65, 59.73]; % Road capacities
|
||||
V = 100; % Incoming vehicle rate
|
||||
|
||||
% Travel Time Function
|
||||
travelTime = @(xi, ti, ai, ci) ti + ai * xi / (1 - xi / ci);
|
||||
% Normalization Function (Infinite norm normalized to S)
|
||||
normalizeSum = @(x, S) (x ./ sum(x)) * S; % Ensure sum of single row x equals S
|
||||
normalizeSum2 = @(x, S) (x ./ sum(x, 2)) * S; % Ensure sum of each row of 2D matrix x equals S
|
||||
|
||||
% Genetic Algorithm Parameters
|
||||
popSize = 100; % Population size
|
||||
maxGen = 2000; % Maximum number of generations
|
||||
mutationRate = 0.05; % Mutation probability
|
||||
|
||||
% Initialize Population
|
||||
pop = rand(popSize, N) .* c; % Random initial solutions (0 <= x <= c)
|
||||
pop = normalizeSum2(pop, V); % Ensure sum of each solution equals V
|
||||
|
||||
newPop = zeros(popSize, N); % Pre-allocate new population buffer
|
||||
|
||||
% Genetic Algorithm Execution
|
||||
for gen = 1:maxGen
|
||||
% Fitness Calculation
|
||||
fitness = arrayfun(@(i) fitnessFunction(pop(i, :), t, a, c, V, travelTime), 1:popSize);
|
||||
|
||||
% Selection
|
||||
[~, idx] = sort(fitness); % Sort based on fitness (ascending order)
|
||||
pop = pop(idx, :); % Retain the best solutions
|
||||
|
||||
% Crossover
|
||||
newPop(1:popSize/2, :) = pop(1:popSize/2, :); % Retain top half
|
||||
for i = 1:popSize/2
|
||||
parent1 = newPop(randi(popSize/2), :);
|
||||
parent2 = newPop(randi(popSize/2), :);
|
||||
crossPoint = randi(N);
|
||||
child = [parent1(1:crossPoint), parent2(crossPoint+1:end)];
|
||||
child = normalizeSum(child, V);
|
||||
newPop(popSize/2 + i, :) = child;
|
||||
end
|
||||
|
||||
% Mutation
|
||||
for i = 1:popSize
|
||||
if rand < mutationRate
|
||||
mutationIdx = randi(N);
|
||||
newPop(i, mutationIdx) = rand * c(mutationIdx);
|
||||
newPop(i, :) = normalizeSum(newPop(i, :), V);
|
||||
end
|
||||
end
|
||||
|
||||
% Replacement
|
||||
pop = newPop;
|
||||
end
|
||||
|
||||
% Final Solution
|
||||
bestSolution = pop(1, :);
|
||||
bestFitness = fitnessFunction(bestSolution, t, a, c, V, travelTime);
|
||||
|
||||
% Results
|
||||
disp('Best Solution [veh/min]:');
|
||||
disp(bestSolution);
|
||||
disp(['Best Objective Value: ', num2str(bestFitness), ' [min]']);
|
||||
|
||||
% Fitness Function
|
||||
function T_total = fitnessFunction(x, t, a, c, V, travelTime)
|
||||
if abs(sum(x) - V) > 1e-6 || any(x < 0) || any(x > c)
|
||||
T_total = inf; % Infeasible solutions
|
||||
return;
|
||||
end
|
||||
|
||||
T = arrayfun(@(xi, ti, ai, ci) travelTime(xi, ti, ai, ci), x, t, a, c); % Apply function to all elements
|
||||
T_total = sum(T .* x); % Total traversal time
|
||||
end
|
Loading…
x
Reference in New Issue
Block a user