-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathprojet_IntelligenceArtificielle_FR.html
284 lines (243 loc) · 14.9 KB
/
projet_IntelligenceArtificielle_FR.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
<!DOCTYPE HTML>
<html>
<head>
<title>IA_Projet</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />
<link rel="stylesheet" href="assets/css/main.css" />
<noscript><link rel="stylesheet" href="assets/css/noscript.css" /></noscript>
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-157529848-1"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'UA-157529848-1');
</script>
</head>
<body class="is-preload">
<!-- Wrapper -->
<div id="wrapper">
<!-- Header -->
<header id="header">
<a href="index_FR.html" class="logo">portfolio</a>
</header>
<!-- Nav -->
<nav id="nav">
<ul class="links">
<li style="background-color: rgba(39, 39, 39, 0.5);"><a href="projet_IntelligenceArtificielle_EN.html">FR/EN</a></li>
<li><a href="index_FR.html">Mes projets</a></li>
<li><a href="aPropos.html">à propos</a></li>
<li><a href="services_FR.html">Services</a></li>
</ul>
<ul class="icons">
<li><a href="https://www.linkedin.com/in/maxime-gillot-6b0920179/" class="icon brands fa-linkedin"><span class="label">Instagram</span></a></li>
<li><a href="https://github.com/Maxlo24" class="icon brands fa-github"><span class="label">GitHub</span></a></li>
<li><a href="https://www.instagram.com/maxime_gt69" class="icon brands alt fa-instagram"><span class="label">Instagram</span></a></li>
<li><a href="https://www.youtube.com/@maximeg3178/videos" class="icon brands alt fa-youtube"><span class="label">youtube</span></a></li>
</ul>
</nav>
<div id="BtnHautPage">
<a href="#main" class="button icon solid solo fa-arrow-up scrolly">Top</a>
</div>
<!-- Main -->
<div id="main">
<!-- Post -->
<section class="post">
<!-- Introduction -->
<header class="major">
<span class="date">2018 - 2019</span>
<h1>algorithme Genetique et
Réseaux de neurones</h1>
<p style="text-align: justify;">J'ai toujours été intrigué par le theme de l'<b>intelligence artificielle</b>. C'est en 2018 que j'ai décidé de
coder une IA qui serait capable d'<b>apprendre à conduire</b> dans un environnement virtuel. Ici les IA ont été codées dans le moteur graphique
<a href="https://unity.com/fr"><b class="Hlink">Unity 3D</b></a> en language <b>C#</b>.
</p>
</header>
<!-- Sommaire -->
<p style="text-align: justify;">J'ai ainsi découvert l'existence des <a href="#AlgoGen" class="scrolly"><b> algorithmes génétiques</b></a> et
appris à m'en servir pour entrainer des réseaux de neurones à effectuer les taches suivantes. <br>
<p>
• <a href="#IA2" class="scrolly">"Apprendre" à tirer à l'arc</a><br>
• <a href="#IA1" class="scrolly">"Apprendre" à conduire</a><br>
</p>
</p>
<p></p>
<br>
<!-- Algorithme Genetique -->
<header class="major">
<a id="AlgoGen"></a>
<span class="date">Algorithme génétique</span>
<h2>Algorithme</h2><h2>génétique</h2>
<p style="text-align: justify;">J'ai d'abord codé mon premier algorithme génétique en <b>Python</b>. L'objectif était de résoudre le problème du voyageur de commerce :
Déterminer le chemin le plus court qui visite chaque ville une seule fois et qui termine dans la ville de départ.
</p>
</header>
<div class="image main"><img src="images/IA/ExplicationAlgoGen.jpg" alt="Image de robot" /></div>
<!-- Description de l'image -->
<p style="text-align: justify;">
• Le <b>bloc (A)</b> représente l'avancement de l'algorithme à différents moments clefs.
On commence d’abord par créer un nuage de points : 15 points disposés aléatoirement sur une grille de 10x10 pixels.
L'algorithme génétique commence par la création d'une population de départ, ici une population de 100 trajets.
<br><br>
• Le <b>bloc (B)</b> correspond à la description de ces trajets. Ils sont tous caractérisés par une liste de points dont l'ordre est donné de manière aléatoire . Cette liste de points correspond à l'ADN d'un trajet.
Pour coller à la <b>théorie de l'évolution de Charles Darwin</b>, il faut maintenant procéder à une <b>sélection</b> naturelle. Pour cela, on classe les trajets en fonction de leur longueur. Plus le trajet est court, plus celui-ci sera haut dans le classement.
Maintenant que toute notre population de départ est classée, on sélectionne les 25 meilleurs trajets. Pour plus de diversité, et encore une fois en s’inspirant de la nature, on sélectionne également 25 chanceux. Ces 25+25 sélectionnés vont maintenant pouvoir se «reproduire».
<br><br>
• Le <b>bloc (C)</b> représente la <b>reproduction</b> qui consiste à choisir deux «sélectionnés» (un père et une mère) et de mélanger leur ADN pour donner 4 nouveaux trajets (4 enfants).
L'objectif est de conserver une population constante (ici de 100). On ajoute finalement une légère <b>mutation</b> à l'ADN des "enfants".
<br><br>
Ce processus de <b>sélection</b>/<b>reproduction</b>/<b>mutation</b> est répèté jusqu'à ce qu'il n'y ait plus de progression.
</p>
<br><br><br>
<!-- IA apprend a tirer a l'arc -->
<header class="major">
<a id="IA2"></a>
<span class="date">IA 1</span>
<h2>Apprendre à</h2><h2>tirer à l'arc</h2>
<p>Captures d'écran du projet sur <a href="https://unity.com/fr"><b class="Hlink">Unity 3D</b></a> :</p>
</header>
<p>L'objectif était d'apprendre le tir à l'arc à une IA. <br>
Je voulais qu'elle atteigne toujours sa cible de 10m à 80m. Peu importe la force et la direction du vent.
</p>
<header class="major">
<h3>Environnement</h3>
<div class="image main"><div style="padding:56.25% 0 0 0;position:relative;"><iframe src="https://player.vimeo.com/video/388463793?byline=0&portrait=0&loop=1&autoplay=1" style="position:absolute;top:0;left:0;width:100%;height:100%;" frameborder="0" allow="autoplay; fullscreen" allowfullscreen></iframe></div><script src="https://player.vimeo.com/api/player.js"></script><p>Modélisation et controle du robot archer</p></div>
<div class="image main"><img src="images/IA/arcEnvironement.jpg" alt="Image environnement archer"/><p>Modélisation de l'environnement dans Unity</p></div>
</header>
<p>
Le robot est muni d'un Réseau de neurones semblable à celui-ci :
<img src="images/IA/NeuralNetwork.jpg" alt="Neural Network"><br>
<b>Description des entrées :</b> <br>
• <b>x1</b> : correspond à la position suivant l'axe x de la cible<br>
• <b>x2</b> : correspond à la position suivant l'axe y de la cible<br>
• <b>x3</b> : correspond à la force du vent suivant l'axe x<br>
• <b>x4</b> : correspond à la force du vent suivant l'axe y<br><br>
<b>Description des sorties :</b> <br>
• <b>y1</b> : Rotation verticale de l'arc<br>
• <b>y2</b> : Rotation Horizontale de l'arc<br>
• <b>y3</b> : Puissance du tire<br>
</p>
<p>Nous allons entrainer ce réseau de neurones en suivant le même principe que celui présenté dans la rubrique <a href="#AlgoGen" class="scrolly"><b> algorithmes génétiques</b></a>.</p>
<br>
<header class="major">
<h3>Résultats</h3>
</header>
<div class="image main"><img src="images/IA/Arc1gen1.jpg" alt="Image environnement archer"/><p>Première génération. <br> Les tirs sont totalement aléatoires</p></div>
<div class="image main"><img src="images/IA/Arc1gen5.jpg" alt="Image environnement archer"/><p>Après 5 générations <br> On observe une concentration des tirs</p></div>
<div class="image main"><img src="images/IA/Arc1gen25.jpg" alt="Image environnement archer"/><p>Après 25 générations <br>Certains réseaux de neurones obtiennent des résultats satisfaisant et atteignent la cible.</p></div>
<p style="text-align: justify;">L'expérience à ensuite étée réalisée avec des cibles positionnées aléatoirement. Les résultats ne sont pas encore suffisamment concluant.
La puissance de calcul dont je dispose n'est pas suffisante pour une progression efficace sur ce projet. De plus il semblerait qu'un algorithme genetique n'etait pas la meilleur solution.
</p><br><br><br>
<!-- IA apprend a conduire -->
<header class="major">
<a id="IA1"></a>
<span class="date">IA 2</span>
<h2>Apprendre à </h2><h2> conduire</h2>
<p>Extrait d'une présentation du projet :</p>
</header>
<p style="text-align: justify;">L'objectif était d'apprendre à une IA à completer un circuit le plus rapidement possible sans percuter l'environnement.
Je voulais voir s'il etait envisageable d'utiliser une IA pour trouver la trajectoire optimale.
</p><br>
<header class="major">
<h3>Environnement</h3>
<div class="image main"><img src="images/IA/Environement.jpg" alt="Image de l'environnement" /></div>
</header>
<p style="text-align: justify;">
J'ai d'abord codé dans Unity une scène dans laquelle il est possible de <b>dessiner le circuit</b> que l'on veut.
Le circuit doit au minimum comporter : <br>
<br>
• un point de départ <br>
• des murs qui forment un circuit fermé <br>
• des CheckPoints (le dernier CheckPoint correspond à l'arrivée) <br>
</p><br><br>
<header class="major">
<h3>Réseau de neurones</h3>
<div class="image main"><img src="images/IA/CarCreation.jpg" alt="Image de roue omnidirectionnelle" /></div>
</header>
<p style="text-align: justify;">
J'ai ensuite codé une 2ème scène dans laquelle on peut créer son véhicule mais surtout <b>dimensionner le réseau de neurones</b> (RN) associé.
On peut choisir : <br>
• le <b>nombre d'inputs</b> (1 - 6). Ce sont les capteurs de distance du véhicule <br>
• le <b>nombre de couches cachées</b> (0 - 3). Ce sont des couches de neurones entre l'entrée et la sortie du RN <br>
• le <b>nombre de neurones par couche cachée</b> (1 - 5) <br>
</p><br><br>
<header class="major">
<h3>Algorithme génétique</h3>
<div class="image main"><img src="images/IA/Learning.jpg" alt="Image de roue omnidirectionnelle" /></div>
</header>
<p style="text-align: justify;">
Il est maintenant temps de coder la partie "apprentissage" en utilisant un <b>algorithme génétique</b>:<br>
<br>
• Notre population de départ est composée de 100 voitures munies de leur réseau de neurones.
Elles sont toutes envoyées sur le circuit où elles essayent d'aller le plus loin possible.
Une fois qu'elles ont toutes, soit complété le circuit, soit percuté un mur, elles sont classées par leur score.
(le score est calculé en fonction du temps et de la distance parcourue). <br>
<br>
• Nous pouvons maintenant procéder à la <b>sélection</b>, la <b>reproduction</b> et la <b>mutation</b>
en suivant le même principe que celui présenté dans la rubrique <a href="#AlgoGen" class="scrolly"><b> algorithmes génétiques</b></a> <br>
<br>
<i>(Ps: sur la photo au centre de la diapositive, les traits rouges correspondent aux capteurs des voitures)</i>
</p><br><br>
<header class="major">
<h3>Résultats</h3>
<div class="image main"><img src="images/IA/Result.jpg" alt="Image de roue omnidirectionnelle" /></div>
</header>
<p style="text-align: justify;">
Nous pouvons observer ci-dessus l'évolution de l'IA après 100 générations. <br>
Une grande partie des voitures arrivent au bout du circuit et certaines bien plus rapidement que d'autres. <br>
<br>
<b>Observations</b> : Il est possible de sauvegarder les valeurs du RN de la meilleure voiture. <br>
Lorsque l'on pose cette voiture dans un nouveau circuit qui lui est totalement inconnu, elle arrive sans aucun problème au bout de celui-ci.
<b>D'un certaine façon la voiture à "appris" à conduire.</b>
</p><br><br><br>
</section>
</div>
<!-- Footer -->
<footer id="footer">
<section class="split contact">
<header class="major">
<span class="date" id="contact">contact</span>
<h1>Me contacter</h1>
</header>
<section class="alt">
<h3>Addresse</h3>
<p>Saint Genis les Ollières, 69290 <br>
France</p>
</section>
<section>
<h3>Phone</h3>
<p><a href="#">+33 (0)7 81 17 52 42</a></p>
</section>
<section>
<h3>Email</h3>
<p><a href="#">[email protected]</a></p>
</section>
<section>
<h3>Social</h3>
<ul class="icons alt">
<li><a href="https://www.linkedin.com/in/maxime-gillot-6b0920179/" class="icon brands fa-linkedin"><span class="label">Instagram</span></a></li>
<li><a href="https://github.com/Maxlo24" class="icon brands fa-github"><span class="label">GitHub</span></a></li>
<li><a href="#" class="icon brands alt fa-instagram"><span class="label">Instagram</span></a></li>
</ul>
</section>
</section>
</footer>
<header id="header">
<a href="index_FR.html" class="logo">portfolio</a>
</header>
<!-- Copyright -->
<div id="copyright">
<ul><li>© Maxime GILLOT</li><li>CSS & JS: <a href="https://html5up.net">HTML5 UP</a></li></ul>
</div>
</div>
<!-- Scripts -->
<script src="assets/js/jquery.min.js"></script>
<script src="assets/js/jquery.scrollex.min.js"></script>
<script src="assets/js/jquery.scrolly.min.js"></script>
<script src="assets/js/browser.min.js"></script>
<script src="assets/js/breakpoints.min.js"></script>
<script src="assets/js/util.js"></script>
<script src="assets/js/main.js"></script>
</body>
</html>