==== Inteligencia Artificial ==== === Calificaciones finales AgoDic 2019 === https://www.dropbox.com/s/6hheqpys6prfdn9/IA%20calif%20finales%20Ago%20Dic%202019.xlsx?dl=0 [[https://www.dropbox.com/s/x4pntz47xwxxbc2/InteligenciaArtificial.pdf?dl=0|Temario y criterios de evaluación]] [[https://notebooks.azure.com/jpi-ramirez/projects/ia2019|Notebooks de Jupyter relacionados al curso]] [[https://www.dropbox.com/s/q053k2n8k8oaxzw/Inteligencia%20Artificial%20presentacion.pdf?dl=0|Diapositivas del curso]] Algoritmo de Dijkstra interactivo https://www-m9.ma.tum.de/graph-algorithms/spp-dijkstra/index_en.html Algoritmo A* interactivo https://www-m9.ma.tum.de/graph-algorithms/spp-a-star/index_en.html Pseudocódigo del algoritmo de Dijkstra https://www.dropbox.com/s/h1ke9yn81wcypb0/dijkstra.pdf?dl=0 Implementación del algoritmo de Dijkstra para referencia https://github.com/jpiramirez/roboticamovil/blob/master/dijkstra.py === Ideas para proyectos finales === * Programa para jugar al ajedrez con interfaz gráfica, con minimax o con naive bayes * Programa que obtenga el tema de un texto * Vigilancia inteligente con red profunda y reglas * Automatización de estacionamiento con reconocimiento de placas Enviar propuestas a [[https://forms.office.com/Pages/ResponsePage.aspx?id=cZgrEyXgrU6jTXvV56ODtJCtKqJk23RJnl2cQq_mg-dUM0YxWkxQNlBEWFpVU0dBSDZaWjRQTDBBRi4u|este enlace]]. === Asignatura === Ensayo con el tema "Impacto actual de la IA en la vida cotidiana", fecha de entrega 20 de agosto. Extensión mínima 3 cuartillas, incluir al menos Introducción, Desarrollo y Conclusiones. Citas y referencias a pie de página. Incluir en la primera página nombre del curso, del profesor, del estudiante y fecha. Entregar el ensayo en formato PDF [[https://www.dropbox.com/request/HHbmdbyzbN4Fd4VA8X7k|a través de este enlace.]] === Proyecto individual 1 === Implementar un programa capaz de resolver el problema del "comesolo" o peg solitaire, en su modalidad triangular de 15 posiciones, llamada también "Triangle(5)" http://recmath.org/pegsolitaire/tindex.html El objetivo es obtener un tablero con todas sus posiciones vacías con excepción de una. Si no conoce el juego puede utilizar la siguiente página interactiva para familiarizarse con el: https://www.mathsisfun.com/games/triangle-peg-solitaire/index.html El programa deberá leer una posición inicial de tablero desde la linea de comandos, indicando cuál poste comenzará vacío, y también deberá leer una posición final, que es donde se desea que quede el último poste. Si no importa la posición final, se indicará con un * (caracter de asterisco). Favor de utilizar la notación de la figura. {{ :triangular15coordinates.gif?100 |}} Después de la ejecución, el programa debe determinar si existe una solución para las posiciones inicial y final indicadas. Si existe, debe imprimir los pasos para obtener la solución. Si no existe, debe reportar este hecho. La implementación deberá ser, de preferencia, en Python. Su entrega debe incluir todos los archivos necesarios para ejecutar el programa, incluyendo un archivo llamado README.txt con instrucciones para la ejecución del programa. Favor de enviar un solo archivo comprimido Zip o Tar/GZ (RAR no, de preferencia). Enlace para enviar su proyecto: https://www.dropbox.com/request/1J1XAwV4Vz2Tu0DUl43u **Fecha de entrega: 3 de septiembre de 2019** === Proyecto individual 2 === Implementar el algoritmo de poda alfa-beta para crear un jugador de "gato". Este juego es muy popular pero si no lo conoce puede consultar [[https://es.wikipedia.org/wiki/Tres_en_línea | en este enlace]] Deberá envolver la lógica del jugador de gato en una función con el siguiente prototipo: def tttplayer(board, cross): ... return move Donde board es una lista con el estado actual del tablero, fila por fila. Ejemplo board=['X','O','X', ' ', 'O', ' ', 'X', ' ', ' '] cross es una variable booleana que indica si su jugador debe usar X (cross=True) o el símbolo O (cross=False). y move es qué movimiento se realizará, usando coordenadas en un tuple. Si para el tablero del ejemplo su jugador recomienda colocar 'O' en la esquina inferior derecha, entonces move = (2,2). El programa completo deberá pedirle a un jugador humano que escoja X o O, en general X comienza. Posteriormente debe, para cada jugada, imprimir el tablero en pantalla. Si es turno del humano, debe pedirle que introduzca la posición de su siguiente jugada en forma de tuple. El programa debe detectar cuándo alguien ha ganado y mencionarlo, o anunciar la existencia de un empate. La implementación deberá ser, de preferencia, en Python. Su entrega debe incluir todos los archivos necesarios para ejecutar el programa, incluyendo un archivo llamado README.txt con instrucciones para la ejecución del programa. Favor de enviar un solo archivo comprimido Zip o Tar/GZ (RAR no, de preferencia). Enlace para enviar su proyecto: https://www.dropbox.com/request/gPQC2BQ9KArDqYKmFxjR **Fecha de entrega: 24 de septiembre de 2019** === Proyecto individual 3 === Deberá utilizar un sistema de inferencia difusa, con su base de reglas, para crear un tutor académico artificial. El principio del programa es que el usuario especifique una serie de parámetros en forma de variables difusas, y el sistema emita recomendaciones acerca de las acciones que debe llevar a cabo según su situación. Ejemplo: el estudiante introduce que va en 4to semestre, que se inscribió a 7 materias, lleva 2 reprobadas (recursando), trabaja medio tiempo, lleva materias en la mañana y en tarde. Considerando reglas difusas como SI materias_inscrito = muchas Y materias_recursando = pocas ENTONCES dar_de_baja = pocas SI horas_trabajo = pocas Y materias_inscrito = muchas ENTONCES dar_de_baja = pocas SI materias_inscrito = pocas Y inscripciones = pocas ENTONCES dar_de_alta = medio El sistema podría recomendar que el número de materias por cursar (7) está bien, pero como trabaja y lleva materias recursadas el sistema se inclinaría por recomendar que se den de baja materias como la opción más conveniente. En este proyecto lo más importante es la base de reglas, y que se utilice algún método de inferencia y/o desdifusificación para obtener valores de recomendación que sean útiles para el estudiante. Por ejemplo, que las recomendaciones incluyan cuántas materias dar de baja, cuántas llevar en total, si debe mejor intentar presentar examen extraordinario, etc. Las reglas y el sistema son completamente abiertas al diseño que usted proponga. Puede utilizar la biblioteca scikit-fuzzy para implementar el sistema. Debido a que gran parte del éxito del sistema está en su diseño y las reglas, deberá documentar su código extensamente, incluyendo comentarios abundantes y de ser necesario documentación adicional (manual de uso). La implementación deberá ser, de preferencia, en Python. Su entrega debe incluir todos los archivos necesarios para ejecutar el programa, incluyendo un archivo llamado README.txt con instrucciones para la ejecución del programa. Favor de enviar un solo archivo comprimido Zip o Tar/GZ (RAR no, de preferencia). Enlace para enviar su proyecto: https://www.dropbox.com/request/TwUE7cS9zsoO4e3Ye0Hz ** Fecha de entrega: 11 de octubre de 2019 ** === Proyecto en equipo 1 === Objetivo: obtener una implementación de detección de números manuscritos. El sistema deberá poder reconocer 5 dígitos manuscritos y obtener el número que representan. Entregable: Programa con interfaz gráfica en Python o C++ que permita, al utilizar el mouse, trazar dígitos en 5 espacios. Tras capturar los dígitos, el sistema debe mostrar el número reconocido. Implementación: Utilice algún framework como sklearn, para entrenar un modelo predictivo con los datos de alguna base libre de dígitos manuscritos, tal como MNIST. Debe aumentar el conjunto de datos con sus propias muestras, al menos 10 muestras con todos los dígitos del 0 al 9. La efectividad del sistema debe ser apoyada por una adecuada validación cruzada y métricas de desempeño. Entrega: El día de la entrega cada equipo deberá demostrar el funcionamiento de su proyecto frente al grupo. Explicarán brevemente su implementación, su validación y métricas de desempeño y permitirán que el profesor o sus compañeros prueben el sistema. Además se enviarán las implementaciones a través de la plataforma Dropbox (un envío por equipo). La implementación deberá ser, de preferencia, en Python. Su entrega debe incluir todos los archivos necesarios para ejecutar el programa, incluyendo un archivo llamado README.txt con instrucciones para la ejecución del programa. Favor de enviar un solo archivo comprimido Zip o Tar/GZ (RAR no, de preferencia). Enlace para enviar su proyecto: https://www.dropbox.com/request/Pf8GtB4zmubjJU3AX7CU ** Fecha de entrega: 29 de octubre de 2019 ** === Proyecto en equipo 2 === Objetivo: Implementación de un sistema de reconocimiento de rostros para aplicaciones de seguridad. Entregable: Programa con interfaz de usuario que determine si una imagen contiene el rostro de un usuario autorizado. Su sistema deberá utilizar una webcam (integrada o externa) para detectar el rostro de una persona, y determinar si dicho rostro ya es conocido. El sistema deberá permitir agregar nuevos rostros a la base de datos. Por motivos éticos y de protección de datos personales, únicamente debe almacenar rostros que el usuario agregue a través de la interfaz de su programa. //No almacene a disco o memoria persistente ningún otro rostro.// En este artículo puede consultar por qué es peligroso crear un sistema de reconocimiento facial sin tener consideraciones éticas https://ipvm.com/reports/hikvision-uyghur Implementación: Por su facilidad de uso, se recomienda utilizar la biblioteca Tensorflow con el frontend Keras. Para la detección de rostros, se recomienda utilizar [[https://pypi.org/project/mtcnn/|MTCNN]]. Para la verificación de rostros, puede utilizar [[https://github.com/davidsandberg/facenet|FaceNet]]. Entrega: El día de la entrega cada equipo deberá demostrar el funcionamiento de su proyecto frente al grupo. Explicarán brevemente su implementación y permitirán que el profesor o sus compañeros prueben el sistema. Además se enviarán las implementaciones a través de la plataforma Dropbox (un envío por equipo). Nota sobre plagio o deshonestidad académica: Dado que existen proyectos similares en los que puede basarse, disponibles en línea, deberá dar crédito apropiado en caso de utilizarlos (incluyendo nombre del proyecto utilizado, ubicación en linea y nombre(s) de autor(es)), y su proyecto no podrá tener un porcentaje de similaridad mayor al 50% con respecto a otras fuentes. No respetar este parámetro puede causar que su proyecto no sea evaluable. Enlace para enviar su proyecto: https://www.dropbox.com/request/nxkDvD0UC6Jcwyols2OY ** Fecha de entrega: 19 de noviembre de 2019 **