-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathindex.html
367 lines (351 loc) · 22 KB
/
index.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
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>Aprende a ser Dios con Algoritmos Genéticos</title>
<meta name="description" content="Breve introducción a los algoritmos genéticos">
<meta name="author" content="Braulio Vargas López">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<link rel="stylesheet" href="css/reveal.css">
<link rel="stylesheet" href="css/theme/sky.css">
<!-- Theme used for syntax highlighting of code -->
<link rel="stylesheet" href="lib/css/zenburn.css">
<!-- Fuentes molonas con iconos para la presentación -->
<link rel="stylesheet" href="font-awesome/css/font-awesome.min.css">
<!-- Printing and PDF exports -->
<script>
var link = document.createElement( 'link' );
link.rel = 'stylesheet';
link.type = 'text/css';
link.href = window.location.search.match( /print-pdf/gi ) ? 'css/print/pdf.css' : 'css/print/paper.css';
document.getElementsByTagName( 'head' )[0].appendChild( link );
</script>
</head>
<body>
<div class="reveal">
<div class="slides">
<section data-transition="zoom" data-background-image="images/x7bbqiy6h04-rodrigo-rodriguez.jpg">
<h2 style="color: #FB922F">Aprende a ser Dios con Algoritmos Genéticos</h2>
<h3 style="color: #FB922F">Paso 1: Introducción</h3>
<p>
<small style="color: #FB922F"l>Creado por <a href="https://github.com/BraulioV">Braulio Vargas</a></small>
</p>
<p style="margin-top: 5%">
<a href="https://twitter.com/brau_vl" style="float:left; color:#FB922F"><i class="fa fa-twitter fa-2x" aria-hidden="true"></i> @brau_vl</a>
<a href="https://github.com/BraulioV" style="float:right; color:#FB922F"><i class="fa fa-github fa-2x" aria-hidden="true"></i> @BraulioV</a>
</p>
</section>
<section data-transition="zoom" data-background-image="images/x7bbqiy6h04-rodrigo-rodriguez.jpg">
<h2 style="color: #FB922F; float: right; text-align: left;">Índice</h2>
<ul style="color: #FB922F; float: right; text-align: right;">
<li class="fragment" data-fragment-index="0">Qué es un algoritmo genético.</li>
<li class="fragment" data-fragment-index="1">¿Qué es una solución?</li>
<li class="fragment" data-fragment-index="2">Partes del algoritmo.</li>
<li class="fragment" data-fragment-index="3">¿Cómo funciona?</li>
<li class="fragment" data-fragment-index="4">Parámetros a configurar.</li>
<li class="fragment" data-fragment-index="5">Aplicaciones.</li>
<li class="fragment" data-fragment-index="6">Problemas del algoritmo.</li>
<li class="fragment" data-fragment-index="7">¿Cómo hacerlo en Python?</li>
<li class="fragment" data-fragment-index="8">Autores de las fotografías usadas en las diapositivas.</li>
</ul>
</section>
<section data-transition="zoom" data-background-image="images/qaonlvmb4lw-joshua-k-jackson.jpg">
<h2 style="color: #FFFFFF; opacity: 0.7; margin-bottom: 20%">Qué es un algoritmo genético</h2>
<div style="background: #000000; margin-top: 35%; color: #FFFFFF; opacity: 0.5">Los algoritmos genéticos son una serie de algoritmos bioinspirados, basados en:
<p><b>La Teoría Neo-Darwiniana</b></p></div>
</section>
<section data-transition="zoom" data-background-image="images/qaonlvmb4lw-joshua-k-jackson.jpg">
<h2 style="color: #FFFFFF; opacity: 0.7; margin-bottom: 22%">La Teoría Neo-Darwiniana</h2>
<div style="background: #000000; margin-top: 30%; color: #FFFFFF; opacity: 0.5">Esta teoría mezcla la teoría de Darwin sobre la <b>evolución</b> y la <b>selección natural</b> de las especies, con la teoría sobre la <b>herencia genética</b> de Gregor Mendel.
<h4 style="color: #FFFFFF"><b>¿Selección natural, evolución, herencia genética...?</b></h4>
</div>
</section>
<section data-background="http://i.giphy.com/f8WsCT0eCbUKQ.gif">
</section>
<section data-transition="zoom" data-background-image="images/sms2m-yiqcy-larm-rmah.jpg">
<h2 style="color: #E3E2E2">Más simple, please</h2>
<div class="fragment" data-fragment-index="0" style="background: #5C5C5C; color: #FFFFFF; opacity: 0.7">
<b>Teoría de Darwin</b>: tiene más posibilidades de reproducirse el más fuerte y/o mejor adaptado al entorno dentro de una población con individuos distintos.</li>
</div>
<div class="fragment" data-fragment-index="1" style="background: #5C5C5C; color: #FFFFFF; opacity: 0.7; margin-bottom: 20%"><b>Teoría de Mendel</b>: nos habla sobre cómo se recombinan los genes de dos individuos y las mutaciones posibles que pueden surgir en el código genético de los descendientes de padres durante la reproducción.</li>
</div>
</section>
<section data-transition="zoom" data-background-image="images/sms2m-yiqcy-larm-rmah.jpg">
<div style="margin-bottom: 35%; background: #5C5C5C; color: #FFFFFF; opacity: 0.7">
<p><b>Al juntar ambas teorías tenemos los siguientes elementos:</b></p>
<ul>
<li class="fragment" data-fragment-index="0"><b>Reproducción</b></li>
<li class="fragment" data-fragment-index="1"><b>Herencia</b></li>
<li class="fragment" data-fragment-index="2"><b>Mutación</b></li>
<li class="fragment" data-fragment-index="3"><b>Competición</b></li>
<li class="fragment" data-fragment-index="4"><b>Selección</b></li>
</ul>
<div class="fragment" data-fragment-index="5" >
<b>Estos elementos son claves para un algoritmo genético, así que...</b>
</div>
</div>
</section>
<section data-transition="zoom" data-background="http://i.giphy.com/wJEeKGplvQwr6.gif"></section>
<section data-transition="zoom" data-background="http://i.giphy.com/gKsJUddjnpPG0.gif">
<h2 style="color: white">Pero espera...</h2>
<h2 style="color: white; margin-top: 50% ">¡¿POR DÓNDE EMPIEZO?!</h2>
</section>
<section data-transition="zoom" data-background-image="images/i-in3cvejg-evan-dennis.jpg">
<h2 style="float: right; text-align: right; color: #FE7301; opacity: 1;">Modelando la población de soluciones o individuos.</h2>
<h3 style="float: right; text-align: right; color: #FE7301; opacity: 1;">Pero, ¿qué es una solución?</h3>
</section>
<section data-transition="zoom" data-background-image="images/dnyigwqqati-joel-herzog.jpg">
<h2 style="background-color: #FFFFFF; color:#000000; opacity: 0.5; margin-bottom: 40%">En la naturaleza.</h2>
<div style="background-color: #FFFFFF; color: #000000; opacity: 0.5">Una población está compuesta por una serie de individuos que compiten por reproducirse, y cada uno de ellos tiene una carga genética diferente.</div>
</section>
<section data-transition="zoom" data-background-image="images/DNA_methylation.jpg">
<div style="background: #627DC2; opacity: 0.75;">
<h2 style="color: #000000; opacity: 1; ">En la genética.</h2>
<h3 style="color: #000000; opacity: 1; ">Una cadena de ADN se codifica como una secuencia o <b><i>permutación</i></b> de bases nitrogenadas que son Adenina, Citosina, Guanina y Timina.</h3>
</div>
</section>
<section data-transition="zoom" data-background-image="images/bupwy7edrlq-luca-onniboni.jpg">
<div style="background: #E3E2E2; color: #000000; opacity: 0.65">
<h2>Y, ¿en mi problema?</h2>
<div>
En nuestro caso, esta "secuencia de ADN" será nuestra solución candidata, que podremos modelar a nuestro gusto (y riesgo). Estas soluciones conformarán nuestro <b>conjunto de soluciones candidatas</b> o <b>población</b>.
</div>
</div>
</section>
<section data-transition="zoom" data-background-image="images/ossryggkso4-vadim-sherbakov.jpg">
<div style="background-color: #FFFFFF; opacity: 0.7">
<h2 style="color: #FE4101">Partes del algoritmo</h2>
<ul style="color: #FE4101">
<li class="fragment" data-fragment-index="0">Especificación de una solución.</li>
<li class="fragment" data-fragment-index="1">Conjunto de soluciones.</li>
<li class="fragment" data-fragment-index="2">Operador de cruce.</li>
<li class="fragment" data-fragment-index="3">Operador de mutación.</li>
<li class="fragment" data-fragment-index="4">Función de evaluación.</li>
</ul>
</div>
</section>
<section data-transition="zoom" data-background-image="images/ossryggkso4-vadim-sherbakov.jpg">
<div style="background-color: #FFFFFF; opacity: 0.7">
<h2 style="color: #FE4101">Especificación de una solución</h2>
<div style="color: #FE4101">
Para especificar una solución, podemos obtar por varias formas, que pueden llegar a influir en la capacidad del algoritmo para hayar buenos resultados, la compljejidad de este, etc.
</div>
</div>
</section>
<section data-transition="zoom" data-background-image="images/ossryggkso4-vadim-sherbakov.jpg">
<div style="background-color: #FFFFFF; opacity: 0.7">
<h3 style="color: #FE4101">Codificaciones más básicas</h3>
<ul style="color: #FE4101">
<li class="fragment" data-fragment-index="0"><b>Especificación binaria</b>: útil para problemas de toma de decisiones de tipo <b>SI/NO</b>.<p style="float: center">[0, 1, 0, 1, ..., 0, 1, 0, 1]</p></li>
<li class="fragment" data-fragment-index="1"><b>Permutación de valores</b>: útil para problemas en los que se tenga que seguir un orden.<p>[2, 5, 13, 0, ..., 18, 1, 25, 3]</p></li>
</ul>
</div>
</section>
<section data-transition="zoom" data-background-image="images/ossryggkso4-vadim-sherbakov.jpg">
<div style="background-color: #FFFFFF; opacity: 0.7">
<h2 style="color: #FE4101">Conjunto de Soluciones</h2>
<div style="color: #FE4101">Este conjunto de soluciones tiene un tamaño, generalmente fijo, pero puede tener el tamaño que queramos.</div>
<div style="color: #FE4101">Hay que tener en cuenta, que a mayor nº de individuos, más diversidad tendrá y mejor explorará el espacio de búsqueda, obteniendo mejores soluciones.</div>
<h3 style="color: #FE4101;">Pero...</h3>
</div>
</section>
<section data-transition="zoom" data-background-image="images/ossryggkso4-vadim-sherbakov.jpg">
<div style="background-color: #FFFFFF; opacity: 0.7">
<div style="color: #FE4101">Cuanto mayor sea el número de individuos, más tardará el algoritmo en converger, por lo tanto, necesita más iteraciones.</div>
<div style="color: #FE4101">Lo que implica más cálculos, más memoria, más recursos en general y <b>más tiempo</b>.</div>
<h3 style="color: #FE4101;">¿Solución?</h3>
</div>
</section>
<section data-transition="zoom" data-background-image="images/ossryggkso4-vadim-sherbakov.jpg">
<div style="background-color: #FFFFFF; opacity: 0.7">
<h2 style="color: #FE4101">Compromiso Eficacia-Eficiencia</h2>
<div style="color: #FE4101">
Encontrar un compromiso adecuado entre el tiempo de cálculo y uso de recursos con la la calidad de los resultados que obtenemos.
</div>
<div style="color: #FE4101">
Esto se debe a que a mayor número de individuos, el número de iteraciones necesarias para obtener buenas soluciones crecerá muchísimo.
</div>
</div>
</section>
<section data-transition="zoom" data-background-image="images/ossryggkso4-vadim-sherbakov.jpg">
<div style="background-color: #FFFFFF; opacity: 0.7">
<h2 style="color: #FE4101">Operador de cruce</h2>
<div style="color: #FE4101">
Dados dos padres, realiza una operación de cruce entre sus genes generando nuevas soluciones candidatas que cumplan con las restricciones.
</div>
<div style="color: #FE4101">
El método a usar depende de la especificación de las soluciones y el tipo de problema.
</div>
</div>
</section>
<section data-transition="zoom" data-background-image="images/ossryggkso4-vadim-sherbakov.jpg">
<div style="background-color: #FFFFFF; opacity: 0.7">
<h2 style="color: #FE4101">Operador de cruce</h2>
<ul style="color: #FE4101">
<li class="fragment" data-fragment-index="0"><b>Basado en posición</b>: mantiene las posiciones comunes de las dos soluciones y el resto, aleatorio.</li>
<div class="fragment" data-fragment-index="1" align="center">
<img src="images/2.png" style="align-content: center;">
</div>
</ul>
</div>
</section>
<section data-transition="zoom" data-background-image="images/ossryggkso4-vadim-sherbakov.jpg">
<div style="background-color: #FFFFFF; opacity: 0.7">
<h2 style="color: #FE4101">Operador de cruce</h2>
<ul style="color: #FE4101">
<li class="fragment" data-fragment-index="0"><b>Cruce PMX</b>: mantiene una mayor descendencia directa con los padres manteniendo bloques inmutables e intercambiando el resto de la solución con el otro padre.</li>
<div class="fragment" data-fragment-index="1" align="center">
<img src="images/1.png" style="align-content: center;">
</div>
</ul>
</div>
</section>
<section data-transition="zoom" data-background-image="images/ossryggkso4-vadim-sherbakov.jpg">
<div style="background-color: #FFFFFF; opacity: 0.7">
<h2 style="color: #FE4101">Operador de Mutación</h2>
<div style="color: #FE4101">
Introduce un cambio aleatorio en la solución descendiente. Este operador tiene que tener una probabildad muy baja de actuar, ya que afecta mucho a la convergencia del algoritmo.
</div>
</div>
</section>
<section data-transition="zoom" data-background-image="images/ossryggkso4-vadim-sherbakov.jpg">
<div style="background-color: #FFFFFF; opacity: 0.7">
<h2 style="color: #FE4101">Función de evaluación</h2>
<ul style="color: #FE4101">
<li>Nos indica cómo de buena es una solución. Será altamente dependiente del problema, y es el paso más costoso del algoritmo.</li>
<li>En esta función se pueden introducir las restricciones como penalización.</li>
</ul>
</div>
</section>
<section data-transition="zoom" data-background-image="images/1_cmofspfso-joanna-kosinska.jpg">
<h1>¿Cómo funciona?</h1>
</section>
<section data-transition="zoom" data-background-image="images/1_cmofspfso-joanna-kosinska.jpg">
<h2 class="fragment" data-fragment-index="1">Modelo Generacional</h2>
<div class="fragment" data-fragment-index="0" align="center">
<img src="diagramas/cruce_generacional.png" style="align-content: center;">
</div>
</section>
<section data-transition="zoom" data-background-image="images/1_cmofspfso-joanna-kosinska.jpg">
<h2 class="fragment" data-fragment-index="1">Modelo Estacionario</h2>
<div class="fragment" data-fragment-index="0" align="center">
<img src="diagramas/cruce_estacionario.png" style="align-content: center;">
</div>
</section>
<section data-transition="zoom" data-background-image="images/1_cmofspfso-joanna-kosinska.jpg">
<h2 >Parámetros a configurar</h2>
<ul >
<li>Número de iteraciones.</li>
<li>Tamaño de población.</li>
<li>Probabilidad de cruce y mutación.</li>
<li>Además de:
<ul>
<li>Elegir operador de cruce.</li>
<li>Esquema evolutivo.</li>
<li>Cómo ejercer la presión selectiva.</li>
</ul>
</ul>
</section>
<section data-transition="zoom" data-background-image="images/1_cmofspfso-joanna-kosinska.jpg">
<h2>Algunas aplicaciones</h2>
<ul >
<li class="fragment" data-fragment-index="0">El viajante de comercio.</li>
<li class="fragment" data-fragment-index="1">Problemas de asignación cuadrática o QAP.</li>
<li class="fragment" data-fragment-index="2">Selección de características.</li>
<li class="fragment" data-fragment-index="3">Aprendizaje automático y redes neuronales.</li>
</ul>
<h3 class="fragment" data-fragment-index="4">Los viejos rockeros nunca mueren ¿eh?</h3>
</section>
<section data-transition="zoom" data-background="http://i.giphy.com/M5lDfX3Lers0E.gif">
<h2 style="color: #FFFFFF">Y ahí no acaba la cosa</h2>
</section>
<section data-transition="zoom" data-background-image="images/1_cmofspfso-joanna-kosinska.jpg">
<h2>Más aplicaciones</h2>
<ul >
<li class="fragment" data-fragment-index="0">Diseño en Aeronáutica.</li>
<li class="fragment" data-fragment-index="1">Técnicas de visualización.</li>
<li class="fragment" data-fragment-index="2">Equilibrado en líneas de montaje.</li>
<li class="fragment" data-fragment-index="3">Cálculo de derivadas en entornos con alta presencia de ruido.</li>
<li class="fragment" data-fragment-index="4">Identificación forense de personas desaparecidas.</li>
<li class="fragment" data-fragment-index="5">Optimización en procesos industriales.</li>
</ul>
<h3 class="fragment" data-fragment-index="6">¡¡Y mucho más!!</h3>
</section>
<section data-transition="zoom" data-background="http://i.giphy.com/RJDmEeLNgzgxW.gif"></section>
<section data-transition="zoom" data-background-image="images/jtsw-z6bfw-andrew-neel.jpg">
<h2 style="color: #B4B4B4">Pero, no son la panacea.</h2>
<ul style="color: #B4B4B4">
<li class="fragment" data-fragment-index="0">Hay problemas para los que no funciona demasiado bien.</li>
<li class="fragment" data-fragment-index="1">Necesitan una cierta cantidad de recursos.</li>
<li class="fragment" data-fragment-index="2">Suelen sufrir problemas de convergencia (tarda mucho en converger a buenas soluciones).</li>
<li class="fragment" data-fragment-index="3">Dale tiempo al pobre.</li>
</ul>
</section>
<section data-transition="zoom" data-background-image="images/6wv046ljdea-sebastian-spindler.jpg">
<div style="background-color: #FFFFFF; opacity: 0.5">
<h2 style="color: #0A15EE">¿Cómo lo hago en Python?</h2>
<ul style="color: #0A15EE">
<li class="fragment" data-fragment-index="0">Python puro: usa las listas de Python.</li>
<li class="fragment" data-fragment-index="1">Python+Scipy+Numpy: te lo haces tú mismo, pero va como un tiro.</li>
<li class="fragment" data-fragment-index="2">Bibliotecas como
<a style="color: red" href="https://github.com/DEAP/deap">DEAP</a>, <a style="color: red" href="https://pypi.python.org/pypi/Pyvolution/1.1">Pyvolution</a>...</li>
</ul>
</div>
</section>
<section data-transition="zoom" data-background-image="images/6wv046ljdea-sebastian-spindler.jpg">
<h2 style="color: #FE4901; background: white; opacity: 0.7">¿Tutoriales? Sí</h2>
<a style="float:left" href="https://github.com/AeroPython/Taller-Algoritmos-Geneticos-PyConEs16">
<img src="images/aeropython_name_mini.png">
</a>
<a style="float: right; color: #FE5153" href="https://github.com/AeroPython"><i class="fa fa-github fa-4x" aria-hidden="true"></i>AeroPython</a>
</section>
<section data-transition="zoom" data-background-image="images/uvrr8j6gteu-maurice-erlean.jpg">
<h2 style="color: #222222">Fotografías de la presentación</h2>
<div style="float: left; text-align: left; color: blue; background-color: white; opacity: 0.5">
<ul>
<li><a style="color: blue" href="https://unsplash.com/search/photos/aeroplane?photo=x7bbQIY6H04">@roka79</a></li>
<li><a style="color: blue" href="https://unsplash.com/search/science?photo=qaoNLVMb4lw">@joshua</a></li>
<li><a style="color: blue" href="https://unsplash.com/search/photos/black-and-white?photo=sMs2M-yiqCY">@larm</a></li>
<li><a style="color: blue" href="https://unsplash.com/search/question?photo=i--IN3cvEjg">@evan__bray</a></li>
<li><a style="color: blue" href="https://unsplash.com/photos/dNYIGwQqAtI">@joel_herzog</a></li>
<li><a style="color: blue" href="https://commons.wikimedia.org/wiki/Category:DNA_helix-structures#/media/File:DNA_methylation.jpg">Wikimedia</a></li>
</ul>
</div>
<div style="float: right; text-align: left; color: blue; background-color: white; opacity: 0.5">
<ul>
<li><a style="color: blue" href="https://unsplash.com/photos/bUpwY7EdrlQ">@archiobjects</a></li>
<li><a style="color: blue" href="https://unsplash.com/search/part?photo=osSryggkso4">@madebyvadim</a></li>
<li><a style="color: blue" href="https://unsplash.com/photos/1_CMoFsPfso">@joannakosinska</a></li>
<li><a style="color: blue" href="https://unsplash.com/search/dark?photo=jtsW--Z6bFw">@andrewtneel</a></li>
<li><a style="color: blue" href="https://unsplash.com/search/snake?photo=6WV046LjDeA">@kwerdenker</a></li>
<li><a style="color: blue" href="https://unsplash.com/search/photographies?photo=uvrr8j6gTeU">@mauricemcerlean</a></li>
</ul>
</div>
</section>
<section data-transition="zoom" data-background="http://i.giphy.com/YODE9YaCC6dws.gif">
<h2 style="margin-top: 50% ">¿Preguntas?</h2>
</section>
<section data-transition="zoom" data-background="http://i.giphy.com/fAj3qZVA7XlV6.gif"></section>
</div>
</div>
</div>
<script src="lib/js/head.min.js"></script>
<script src="js/reveal.js"></script>
<script>
// More info https://github.com/hakimel/reveal.js#configuration
Reveal.initialize({
history: true,
// More info https://github.com/hakimel/reveal.js#dependencies
dependencies: [
{ src: 'plugin/markdown/marked.js' },
{ src: 'plugin/markdown/markdown.js' },
{ src: 'plugin/notes/notes.js', async: true },
{ src: 'plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } }
]
});
</script>
</body>
</html>