Saataa andagii !

This commit is contained in:
Lukian 2025-01-05 15:55:27 +01:00
parent 6c32b8e523
commit dbfbb0960e
11 changed files with 2 additions and 134 deletions

2
.gitignore vendored
View file

@ -1,3 +1,5 @@
.venv
lib/__pycache__
__pycache__
cr/

5
cr/.gitignore vendored
View file

@ -1,5 +0,0 @@
*.pdf
*.aux
*.lof
*.log
*.toc

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

View file

@ -1,79 +0,0 @@
\usepackage{graphicx}
\usepackage{geometry}
\usepackage[french]{babel}
\usepackage[T1]{fontenc}
\usepackage{xparse}
\graphicspath{{images/}}
\geometry{
a4paper,
left=2.5cm,
right=2.5cm,
top=1.5cm,
bottom=1.5cm
}
\newcommand{\subtitle}[1]{\def\@subtitle{#1}}
\newcommand{\@subtitle}{}
\newcommand{\coverpage}[3] {
\begin{titlepage}
\begin{figure}[h]
\centering
\includegraphics[width=0.20\textwidth]{#2}
\end{figure}
\begin{center}
\large #1
\vspace{0.5cm}
\rule{\textwidth}{1pt}
\Huge \@title
\large \@subtitle
\rule{\textwidth}{1pt}
\large Par \@author
\large Le \today
\end{center}
\vspace{0.5cm}
\begin{figure}[h]
\centering
\includegraphics[width=0.75\textwidth]{#3}
\end{figure}
\end{titlepage}
}
\NewDocumentCommand{\crfigure}{O{0.75\textwidth} m m}{
\begin{figure}[h]
\centering
\includegraphics[width=#1]{#2}
\caption{#3}
\end{figure}
}
\NewDocumentCommand{\twofigures}{O{0.75\textwidth} m m m m}{
\begin{figure}[h]
\centering
\begin{minipage}[t]{0.45\dimexpr#1}
\centering
\includegraphics[width=\textwidth]{#2}
\caption{#3}
\end{minipage}
\hspace{0.05\textwidth}
\begin{minipage}[t]{0.45\dimexpr#1}
\centering
\includegraphics[width=\textwidth]{#4}
\caption{#5}
\end{minipage}
\end{figure}
}

View file

@ -1,10 +0,0 @@
name=projet_UMM_Lukian_LEIZOUR
make:
pdflatex -jobname=$(name) src/source.tex
pdflatex -jobname=$(name) src/source.tex
rm -rf *.lof *.log *.toc *.aux
rm -rf src/*.lof src/*.log src/*.toc src/*.aux
clean:
rm -rf *.pdf

View file

@ -1,40 +0,0 @@
\documentclass[12pt, a4paper]{article}
\usepackage{./lib/cr}
\title{Algorithmique et programmation impérative}
\subtitle{Implémentation d'un algorithme génétique en python}
\author{Lukian LEIZOUR}
\date{\today}
\begin{document}
\coverpage{ICE - Informatique et Cybersécurité (Cybersécurité du logiciel)}{logo_ensibs}{python}
\tableofcontents
\listoffigures
\newpage
\section{Introduction}
Le mastermind est un jeu de société à deux joueurs dont le but est de trouver une suite de couleurs. Le premier joueur doit trouver la bonne suite, tandis que le deuxième lui donne des informations sur ses tentatives (couleurs bien placées, mal placées et non présentes). Le jeu que nous avons implémenté est légèrement plus compliqué. Il s'agit de l'ultra mastermind, dans ce jeu le but n'est pas de trouver une suite de couleurs mais une phrase en ASCII sur 255 bits. Pour cela nous avons utilisé un algorithme génétique que nous expliquerons plus tard. Nous avons donc utilisé le langage python pour implémenter notre algorithme. Dans ce compte rendu nous commencerons par expliquer notre algorithme, ensuite nous présenterons notre implémentation, nous ferons une analyse des différents paramètres de l'algorithme, et enfin nous mettrons en perspective ce projet avec des cas de figure réels.
\section{Description du problème}
Dans le cadre de ce projet nous avons donc dû réaliser une "intelligence artificielle" qui devrait retrouver une chaîne de caractères de taille fixe (puis de taille variable) codée en ASCII sur 8 bits.
\section{Algorithme génétique}
Les algorithmes génétiques sont des algorithmes qui reposent sur la théorie de l'évolution de Charles Darwin. En effet, les principales étapes d'un algorithme générique sont la sélection naturelle, la mutation et la reproduction, ce qui permet à des individus de s'adapter à leur environnement, comme le suggère la théorie de l'évolution. Dans notre cas nous utiliserons un algorithme générique pour faire "muter" un chaîne de caractère jusqu'à lui faire atteindre une chaîne de caractère non connue du programme. Dans un algorithme génétique on fait évoluer une population d'individus, la nature des individus change selon les cas de figure.
\section{Présentation de la solution choisie}
Afin de résoudre le problème posé nous avons donc dû mettre en place un algorithme génétique. Notre population sera donc composée de chaînes de caractères que nous ferons évoluer. Notre algorithme se décompose en 3 grandes étapes : la sélection, la reproduction et enfin les mutations. Nous utiliserons des fonctions de fitness dans la sélection afin d'indiquer au programme lesquels de ses individus sont plus "performants" que d'autres. Nous utiliserons 3 fonctions de "fitness" différentes : une qui prendra en compte la différences entre les codages des deux chaînes, la seconde prendra en compte les caractères bien placés et mal placés et enfin la troisième utilisera la distance de Levenshtein. Pour les mutations nous modifierons des caractères aléatoires sur des individus aléatoires (selon un coefficient), nous en ajouterons ou en retirerons dans le cas des chaîne de caractère à taille variable. Et enfin pour la reproduction nous ferons la concaténation des parties de deux individus choisis aléatoirement dans la population. Ces trois étapes nous permettront d'obtenir la phrase cachée.
\section{Algortihme simplifié}
Voici des algorigrammes de la boucle principale du programme ainsi que des fonctions principales :
\twofigures[0.8\textwidth]{algo\_base}{Algorigramme de la boucle principale}{selection}{Algorigramme de la fonction de sélection}
\twofigures[0.8\textwidth]{reproduction}{Algorigramme de la fonction de reproduction}{mutation}{Algorigrammes de la fonction de mutation}
\end{document}