Biblioteca Online : ¡La Suscripción ENI por 9,90 € el primer mes!, con el código PRIMER9. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
  1. Libros
  2. Python
  3. Python y la inteligencia artificial
Extrait - Python Aprenda a programar proyectos lúdicos
Extractos del libro
Python Aprenda a programar proyectos lúdicos Volver a la página de compra del libro

Python y la inteligencia artificial

Presentación

1. Historia

Para presentar rápidamente la historia de la inteligencia artificial (IA), podemos destacar tres períodos principales:

  • 1950-1980: los desarrolladores de algoritmos de IA se centran en escribir reglas que permitan a un ordenador tomar una decisión. Luego tratan de traducir un esquema de reflexión a un programa. El ordenador se utiliza como un autómata que despliega reglas preestablecidas para llegar a una decisión. El apogeo de este período corresponde al auge de los sistemas expertos en la década de 1980, cuando se explicó que un ordenador pronto podría ofrecer el mismo nivel de diagnóstico que un médico... Sin embargo, este tipo de sistema puede funcionar bien si la reflexión es similar a una forma de deducción lógica. Encontrará sistemas de este tipo hoy en día, por ejemplo, en los criterios para adjudicar una hipoteca en un sitio web: si el prestatario ha disfrutado de un contrato indefinido durante al menos 20 meses y su contribución es superior al 20 % del monto de la compra, entonces se concluye un principio de acuerdo. Sin embargo, en ningún momento el ordenador aporta ningún valor añadido a la parte de inteligencia. En este nivel, tiene un rol pasivo; simplemente ejecuta las pruebas propuestas y devuelve un resultado.

  • 1980-2015: esta vez, el ordenador intenta aprender por sí mismo a partir de datos utilizados como referencia. Esta es la era del machine learning, es decir, del aprendizaje automático. Gracias a una gran herramienta matemática y una mayor potencia de cálculo a través de las GPU, este aprentizaje levanta el vuelo y además lo hace con buenos rendimientos. Esta generación de algoritmos ha logrado avances significativos en las siguientes áreas:

  • reconocimiento de voz (Siri, Amazon Alexa, Google Now)

  • conducción autónoma

  • segmentación de anuncios

  • capacidad para responder a una pregunta formulada en lenguaje natural

  • capacidad para vencer a los mejores jugadores de go

  • reconocimiento facial y clasificación de imágenes

  • 2017- ?: el programa AlphaGo creado en 2015 por la empresa DeepMind se convierte en el primer programa en vencer a un jugador profesional de go en una parrilla de tamaño completo (19×19) sin emplear piedras de hándicap....

El problema de la clasificación de imágenes

1. Presentación

La clasificación de imágenes es un área que ha dado un salto asombroso con respecto al rendimiento en los últimos años. Hoy en día, se puede considerar que un ordenador reconoce un objeto si las condiciones de iluminación son buenas, la imagen tiene un buen encuadre y no hay elementos perturbadores en la escena, como niebla o una mano que oscurecería una parte del sujeto. Tales resultados eran todavía impensables en el año 2000.

Incluso aunque las aplicaciones sigan siendo tímidas, esto allana el camino para tecnologías que aún están en su primer desarrollo, como la conducción autónoma. Si gracias al GPS, resulta fácil para un ordenador elegir la dirección correcta, todavía es difícil para un automóvil autónomo conducir en el centro de la ciudad. En la década de 1990, parecía imposible que los ordenadores pudieran transcribir el habla humana algún día, y mucho menos distinguir un gato de un perro. Finalmente, solo 25 años después, lo hacen casi sin dificultad. Así que, ¡nunca hay que descartar nada... sobre todo en informática!

2. Imagen y datos

Una imagen está representada por una cuadrícula de píxeles. Cada píxel codifica un color con tres valores: rojo, verde y azul. Dependiendo de las bibliotecas de imágenes, los rangos de valores están en el intervalo [0,1] o [0,255], estas representaciones son equivalentes. Lo que es interesante para nosotros es que cualquier imagen está intrínsecamente asociada con una lista de números.

images/08RI02.png

Para que una red neuronal procese un banco de imágenes, todas las imágenes deben tener la misma resolución, es decir, por ejemplo: 20 x 20 píxeles. Como cada píxel contiene tres valores de color, tenemos un total de 20 x 20 x 3 = 1.200 valores. Estos valores constituyen la columna vertebral de nuestra red.

3. Bancos de imágenes

Para poder aprender, nuestra red neuronal debe utilizar una base de datos de imágenes que sirvan de referencia. Crear una base de datos es un trabajo largo y tedioso. Afortunadamente para nosotros, hay algunas disponibles en Internet:

  • CIFAR 10:

Inteligencia artificial para juegos

¡No se trata solo de redes neuronales! En el campo de los videojuegos, existen otros problemas, como los cálculos de los movimientos de los personajes o la gestión de la IA de un juego de estrategia, para los que los mejores algoritmos no son necesariamente algoritmos basados en redes neuronales.

Vamos a retomar el proyecto de juego del tres en raya (ver el capítulo Funciones) y, en esta ocasión, le daremos una IA sobresaliente que será imbatible. ¡Es impresionante!

1. Funciones disponibles

Puede descargar desde el sitio web de la editorial la fuente del proyecto para completar, bajo el nombre de archivo: IA_y_juego_Tres_en_raya_Base.py.

El proyecto corregido también está disponible para su descarga bajo el nombre de archivo: IA_y_juego_Tres_en_raya_SuperIA.py.

Descargue y abra el archivo IA_y_juego_Tres_en_raya_Base.py de este capítulo. Tenemos una versión funcional del juego con una IA que juega aleatoriamente en el tablero. Asumiremos funciones que serán útiles para nuestra IA de gama alta. La primera función es la que detecta si uno de los dos jugadores ha ganado:

def DetectaGana(G): 
  for j in [1,2] : 
     for x in range(3): 
        if G[x][0] == G[x][1] == G[x][2] == j : return j 
     for y in range(3): 
        if G[0][y] == G[1][y] == G[2][y] == j : return j 
     if G[0][0] == G[1][1] == G[2][2] == j : return j 
     if G[0][2] == G[1][1] == G[2][0] == j : return j 
  return 0 

Esta función detecta una alineación de tres fichas en diagonal, horizontal y vertical. El jugador humano está codificado con el valor 1, y el jugador de IA, con el valor 2. Si ninguno de los dos jugadores gana, la función devuelve 0. También necesitamos una función que detecte las casillas disponibles para el jugador de IA:

def ListaCasillasVacias(G) : 
  L = [] 
  for x in range(3): 
     for y in range(3): 
        if G[x][y] == 0 : 
           L.append((x,y)) 
  return L 

He aquí...