Está en la página 1de 14

Inteligencia Artificial para desarrolladores

Conceptos e implementación en C#

Introducción

1. Estructura del capítulo 19

2. Definir la inteligencia 19

3. La inteligencia de los seres vivos 22

4. La inteligencia artificial 24

5. Dominios de aplicación 26

6. Resumen 28

Sistemas expertos

1. Presentación del capítulo 29

2. Ejemplo: un sistema experto en polígonos 30

2.1 Triángulos 30
2.2 Cuadriláteros 32
2.3 Otros polígonos 33

3. Contenido de un sistema experto 34

3.1 Base de reglas 35


3.2 Base de hechos 36
3.3 Motor de inferencia 37
3.4 Interfaz de usuario 38

4. Tipos de inferencia 39

4.1 Razonamiento deductivo 39

www.ediciones-eni.com © Ediciones ENI 1/14


Inteligencia Artificial para desarrolladores
Conceptos e implementación en C#

4.1.1 Principio 39
4.1.2 Aplicación a un ejemplo 40
4.2 Razonamiento inductivo 41
4.2.1 Principio 41
4.2.2 Aplicación a un ejemplo 42
4.3 Razonamiento mixto 43

5. Etapas de construcción de un sistema 44


5.1 Extracción del conocimiento 45
5.2 Creación del motor de inferencia 45
5.3 Escritura de las reglas 46
5.4 Creación de la interfaz de usuario 46

6. Rendimiento y mejoras 47

6.1 Criterios de rendimiento 47


6.2 Mejorar el rendimiento mediante la escritura de reglas 48
6.3 Importancia de la representación del problema 49

7. Dominios de aplicación 51

7.1 Ayuda al diagnóstico 51


7.2 Evaluación de riesgos 52
7.3 Planificación y logística 53
7.4 Transferencia de competencias y conocimiento 53
7.5 Otras aplicaciones 54

8. Creación de un sistema experto en C# 55

8.1 Definición de requisitos 55


8.2 Implementación de los hechos 56
8.3 Base de hechos 60
8.4 Reglas y base de reglas 62
8.5 Interfaz 64
8.6 Motor de inferencia 66
8.7 Escritura de reglas y uso 74

9. Uso de Prolog 76

www.ediciones-eni.com © Ediciones ENI 2/14


Inteligencia Artificial para desarrolladores
Conceptos e implementación en C#

9.1 Presentación del lenguaje 77


9.2 Sintaxis del lenguaje 78
9.2.1 Generalidades 78
9.2.2 Predicados 78
9.2.3 Plantear preguntas 79
9.2.4 Escritura de las reglas 80
9.2.5 Otros predicados útiles 81
9.3 Codificación del problema de las formas geométricas 82
9.4 Codificación del problema de las ocho reinas 86
9.4.1 Interés del razonamiento inductivo 86
9.4.2 Estudio del problema 86
9.4.3 Reglas a aplicar 87
9.4.4 Reglas de conflicto entre reinas 88
9.4.5 Objetivo del programa 90
9.4.6 Ejemplos de uso 90

10. Agregar incertidumbre y probabilidades 91

10.1 Incorporar incertidumbre 91


10.2 Hechos inciertos 92
10.3 Reglas inciertas 93

11. Resumen 94

Lógica difusa

1. Presentación del capítulo 95

2. Incertidumbre e imprecisión 96

2.1 Incertidumbre y probabilidad 96


2.2 Imprecisión y subjetividad 96
2.3 Necesidad de tratar la imprecisión 97

3. Conjuntos difusos y grados de pertenencia 98

www.ediciones-eni.com © Ediciones ENI 3/14


Inteligencia Artificial para desarrolladores
Conceptos e implementación en C#

3.1 Lógica booleana y lógica difusa 98


3.2 Funciones de pertenencia 99
3.3 Características de una función de pertenencia 102
3.4 Valores y variables lingüísticas 103

4. Operadores sobre los conjuntos difusos 104


4.1 Operadores booleanos 104
4.2 Operadores difusos 106
4.2.1 Negación 106
4.2.2 Unión e intersección 108

5. Creación de reglas 110


5.1 Reglas en lógica booleana 110
5.2 Reglas difusas 110

6. Fuzzificación y defuzzificación 113

6.1 Valor de verdad 113


6.2 Fuzzificación y aplicación de las reglas 115
6.3 Defuzzificación 119

7. Ejemplos de aplicaciones 121

7.1 Primeros usos 121


7.2 En los productos electrónicos 122
7.3 En el mundo del automóvil 122
7.4 Otros dominios 122

8. Implementación de un motor de lógica difusa 123

8.1 El núcleo del código: los conjuntos difusos 124


8.1.1 Point2D: un punto de una función de pertenencia 124
8.1.2 FuzzySet: un conjunto difuso 125
8.1.3 Operadores de comparación y de multiplicación 126
8.1.4 Operadores sobre conjuntos 127
8.1.5 Cálculo del baricentro 135
8.2 Conjuntos difusos particulares 138
8.3 Variables y valores lingüísticos 140

www.ediciones-eni.com © Ediciones ENI 4/14


Inteligencia Artificial para desarrolladores
Conceptos e implementación en C#

8.3.1 LinguisticValue: valor lingüístico 140


8.3.2 LinguisticVariable: variable lingüística 141
8.4 Reglas difusas 143
8.4.1 FuzzyExpression: expresión difusa 143
8.4.2 FuzzyValue: valor difuso 143
8.4.3 FuzzyRule: regla difusa 144
8.5 Sistema de control difuso 146
8.6 Resumen del código creado 150

9. Implementación de un caso práctico 151

10. Resumen 157

Búsqueda de rutas

1. Presentación del capítulo 159

2. Rutas y grafos 160

2.1 Definición y conceptos 160


2.2 Representaciones 161
2.2.1 Representación gráfica 161
2.2.2 Matriz de adyacencia 161
2.3 Coste de una ruta y matriz de distancias 165

3. Ejemplo en cartografía 166

4. Algoritmos exhaustivos de búsqueda de rutas 168


4.1 Búsqueda en profundidad 168
4.1.1 Principio y pseudo-código 168
4.1.2 Aplicación al mapa 170
4.2 Búsqueda en anchura 173
4.2.1 Principio y pseudo-código 173
4.3 Aplicación al mapa 175

www.ediciones-eni.com © Ediciones ENI 5/14


Inteligencia Artificial para desarrolladores
Conceptos e implementación en C#

5. Algoritmos "inteligentes" 178


5.1 Algoritmo de Bellman-Ford 179
5.1.1 Principio y pseudo-código 179
5.1.2 Aplicación al mapa 181
5.2 Algoritmo de Dijkstra 185
5.2.1 Principio y pseudo-código 185
5.2.2 Aplicación al mapa 186
5.3 Algoritmo A* 189
5.3.1 Principio y pseudo-código 189
5.3.2 Aplicación al mapa 191

6. Implementación 199

6.1 Nodos, arcos y grafos 199


6.1.1 Implementación de los nodos 199
6.1.2 Clase que representa los arcos 200
6.1.3 Interfaz de los grafos 201
6.2 Fin del programa genérico 202
6.2.1 IHM 202
6.2.2 Algoritmo genérico 203
6.3 Codificación de los diferentes algoritmos 204
6.3.1 Búsqueda en profundidad 204
6.3.2 Búsqueda en anchura 206
6.3.3 Algoritmo de Bellman-Ford 207
6.3.4 Algoritmo de Dijkstra 208
6.3.5 Algoritmo A* 210
6.4 Aplicación al mapa 211
6.4.1 Tile y Tiletype 211
6.4.2 Implementación del mapa 214
6.4.3 Programa principal 221
6.5 Comparación de los rendimientos 225

7. Dominios de aplicación 227

8. Resumen 228

www.ediciones-eni.com © Ediciones ENI 6/14


Inteligencia Artificial para desarrolladores
Conceptos e implementación en C#

Algoritmos genéticos

1. Presentación del capítulo 231

2. Evolución biológica 232


2.1 El concepto de evolución 232
2.2 Las causas de las mutaciones 233
2.3 El soporte de esta información: los factores 234
2.4 De los factores al código genético 237
2.5 El "ciclo de la vida" 239

3. Evolución artificial 240

3.1 Principios 240


3.2 Visión general del ciclo 242
3.2.1 Fases de inicialización y de finalización 242
3.2.2 Fase de selección 242
3.2.3 Fase de reproducción con mutaciones 243
3.2.4 Fase de supervivencia 243
3.3 Convergencia 243

4. Ejemplo del grifo 244


4.1 Presentación del problema 244
4.2 Inicialización del algoritmo 244
4.3 Evaluación de los individuos 245
4.4 Reproducción con mutaciones 245
4.5 Supervivencia 247
4.6 Resto del proceso 248

5. Elección de la representación 248

5.1 Población e individuos 248


5.2 Genes 248
5.3 Caso de un algoritmo de resolución de laberinto 249

6. Evaluación, selección y supervivencia 252

www.ediciones-eni.com © Ediciones ENI 7/14


Inteligencia Artificial para desarrolladores
Conceptos e implementación en C#

6.1 Elección de la función de evaluación 252


6.2 Operadores de selección 253
6.3 Operadores de supervivencia 255

7. Reproducción: crossover y mutación 255


7.1 Crossover 255
7.2 Mutación 259

8. Dominios de aplicación 260

9. Implementación de un algoritmo genético 262


9.1 Implementación genérica de un algoritmo 262
9.1.1 Especificaciones 262
9.1.2 Parámetros 263
9.1.3 Individuos y genes 264
9.1.4 IHM 267
9.1.5 Proceso evolutivo 267
9.2 Uso para el hombre de negocios 272
9.2.1 Presentación del problema 272
9.2.2 Entorno 274
9.2.3 Genes 276
9.2.4 Individuos 278
9.2.5 Programa principal 282
9.2.6 Resultados 283
9.3 Uso para la resolución de un laberinto 284
9.3.1 Presentación del problema 284
9.3.2 Entorno 286
9.3.3 Genes 292
9.3.4 Individuos 293
9.3.5 Programa principal 298
9.3.6 Resultados 299

10. Coevolución 301

11. Resumen 302

www.ediciones-eni.com © Ediciones ENI 8/14


Inteligencia Artificial para desarrolladores
Conceptos e implementación en C#

Metaheurísticos de optimización

1. Presentación del capítulo 305

2. Optimización y mínimos 306


2.1 Ejemplos 306
2.2 El problema de la mochila 306
2.3 Formulación de los problemas 307
2.4 Resolución matemática 308
2.5 Búsqueda exhaustiva 310
2.6 Metaheurísticos 310

3. Algoritmos voraces 311

4. Descenso por gradiente 314

5. Búsqueda tabú 317

6. Recocido simulado 319

7. Optimización por enjambre de partículas 321

8. Meta-optimización 323

9. Dominios de aplicación 323

10. Implementación 325

10.1 Clases genéricas 325


10.2 Implementación de los distintos algoritmos 327
10.2.1 Algoritmo voraz 327
10.2.2 Descenso por gradiente 327
10.2.3 Búsqueda tabú 329
10.2.4 Recocido simulado 330

www.ediciones-eni.com © Ediciones ENI 9/14


Inteligencia Artificial para desarrolladores
Conceptos e implementación en C#

10.2.5 Optimización por enjambre de partículas 331


10.3 Resolución del problema de la mochila 333
10.3.1 Implementación del problema 333
10.3.2 Algoritmo voraz 340
10.3.3 Descenso por gradiente 342
10.3.4 Búsqueda tabú 343
10.3.5 Recocido simulado 346
10.3.6 Optimización por enjambre de partículas 348
10.3.7 Programa principal 352
10.4 Resultados obtenidos 354

11. Resumen 357

Sistemas multi-agentes

1. Presentación del capítulo 359

2. Origen biológico 360


2.1 Las abejas y la danza 360
2.2 Las termitas y la ingeniería civil 362
2.3 Las hormigas y la optimización de caminos 363
2.4 Inteligencia social 364

3. Sistemas multi-agentes 364

3.1 El entorno 364


3.2 Los objetos 365
3.3 Los agentes 365

4. Clasificación de los agentes 366

4.1 Percepción del mundo 366


4.2 Toma de decisiones 366
4.3 Cooperación y comunicación 367
4.4 Capacidad del agente 368

www.ediciones-eni.com © Ediciones ENI 10/14


Inteligencia Artificial para desarrolladores
Conceptos e implementación en C#

5. Principales algoritmos 369


5.1 Algoritmos de manadas 369
5.2 Optimización por colonia de hormigas 370
5.3 Sistemas inmunitarios artificiales 372
5.4 Autómatas celulares 373

6. Dominios de aplicación 375


6.1 Simulación de multitudes 375
6.2 Planificación 376
6.3 Fenómenos complejos 376

7. Implementación 377

7.1 Banco de peces 377


7.1.1 Los objetos del mundo y las zonas a evitar 377
7.1.2 Los agentes-peces 380
7.1.3 El océano 388
7.1.4 La aplicación gráfica 391
7.1.5 Resultados obtenidos 394
7.2 Recogida selectiva 396
7.2.1 Los residuos 396
7.2.2 Los agentes limpiadores 399
7.2.3 El entorno 403
7.2.4 La aplicación gráfica 407
7.2.5 Resultados obtenidos 411
7.3 El juego de la vida 413
7.3.1 La malla 413
7.3.2 La aplicación gráfica 417
7.3.3 Resultados obtenidos 420

8. Resumen 421

Redes neuronales

www.ediciones-eni.com © Ediciones ENI 11/14


Inteligencia Artificial para desarrolladores
Conceptos e implementación en C#

1. Presentación del capítulo 423

2. Origen biológico 424

3. La neurona formal 426

3.1 Funcionamiento general 426


3.2 Funciones de agregación 427
3.3 Funciones de activación 428
3.3.1 Función "heavyside" 428
3.3.2 Función sigmoide 428
3.3.3 Función gausiana 429
3.4 Pesos y aprendizaje 430

4. Perceptrón 430

4.1 Estructura 430


4.2 Condición de linealidad 431

5. Redes feed-forward 433

6. Aprendizaje 434

6.1 Aprendizaje no supervisado 434


6.2 Aprendizaje por refuerzo 436
6.3 Aprendizaje supervisado 436
6.3.1 Principio general 436
6.3.2 Descenso por gradiente 437
6.3.3 Algoritmo de Widrow-Hoff 439
6.3.4 Retropropagación 439
6.4 Sobreaprendizaje y generalización 441
6.4.1 Reconocer el sobreaprendizaje 442
6.4.2 Creación de subconjuntos de datos 443

7. Otras redes 444

7.1 Redes neuronales recurrentes 444

www.ediciones-eni.com © Ediciones ENI 12/14


Inteligencia Artificial para desarrolladores
Conceptos e implementación en C#

7.2 Mapas de Kohonen 444


7.3 Redes de Hopfield 445

8. Dominios de aplicación 445


8.1 Reconocimiento de patrones 446
8.2 Estimación de funciones 446
8.3 Creación de componentes 446

9. Implementación de un MLP 447

9.1 Puntos y conjuntos de puntos 447


9.2 Neurona 451
9.3 Red neuronal 453
9.4 IHM 457
9.5 Sistema completo 457
9.6 Programa principal 461
9.7 Aplicaciones 462
9.7.1 Aplicación al XOR 462
9.7.2 Aplicación a Abalone 464
9.7.3 Posibles mejoras 466

10. Resumen del capítulo 466

Webgrafía

1. ¿ Por qué una webgrafía ? 473

2. Sistemas expertos 473

3. Lógica difusa 475

4. Algoritmos genéticos 477

www.ediciones-eni.com © Ediciones ENI 13/14


Inteligencia Artificial para desarrolladores
Conceptos e implementación en C#

5. Búsqueda de rutas 478

6. Metaheurísticos 479

7. Sistemas multi-agentes 480

8. Redes neuronales 481

Anexo

1. Instalación de SWI-Prolog 485

2. Uso de SWI-Prolog 486

índice 489

www.ediciones-eni.com © Ediciones ENI 14/14

También podría gustarte