"Diseño de Circuitos Lógicos Combinatorios usando Programación Genética" Eduardo Serna Pérez Maestría en Inteligencia Artificial, LANIA - Universidad Veracruzana. Defendida el: 16 de febrero a las 16:00hrs, Xalapa Veracruz, Decisión unánime Asesora: Dra. Katya Rodríguez Vázquez IIMAS-UNAM, Departamento de Ingeniería de Sistemas Computacionales y Automatización Sección de Ingeniería de Sistemas Computacionales México, D.F. Co-asesor: Dr. Carlos A. Coello Coello CINVESTAV-IPN, Departamento de Ingeniería Eléctrica Sección de Computación México D.F. RESUMEN El diseño de circuitos lógicos combinatorios ha sido una de las áreas abiertas a la investigación en los últimos años. Este interés es debido a lo complejo que resulta su diseño y especialmente su simplificación. Por años se ha utilizado el álgebra booleana como la manera más sencilla de elaborar e implementar el diseño de circuitos lógicos. Posteriormente se desarrollaron diversos métodos de inspección visual que fueron dirigidos principalmente a facilitar su simplificación como los mapas de Karnaugh y el método de Quine-McCluskey. En años recientes distintas técnicas de búsqueda, optimización y aprendizaje, cuya inspiración radica en las teorías de la evolución y la selección natural, han sido aplicadas para resolver este tipo de problemas. A estas técnicas se les conoce como Computación Evolutiva. Las técnicas evolutivas han comenzado a incursionar en el diseño de circuitos debido principalmente a su poder exploratorio, ya que permiten evaluar diversas regiones de un espacio de diseño y encontrar varias soluciones a problemas complejos con relativa eficiencia. Actualmente a esta área se le conoce como Hardware Evolutivo. Diversas técnicas evolutivas han sido empleadas en hardware evolutivo. La implementación presentada en este trabajo esta situada dentro de la Programación Genética, la cual propone la utilización de cadenas prefijas como individuos para el diseño de circuitos lógicos combinatorios. La programación genética es un paradigma interesante y adecuado para este problema debido principalmente a su alto poder exploratorio. En la implementación propuesta se realiza una serie de experimentos con distintos tipos de circuitos, los cuales varían en grado de complejidad y dimensionalidad. Dichos experimentos tienen como objetivo verificar la capacidad de elaboración de diseños lógicos factibles, que finalmente serán comparados con otras técnicas tradicionales y evolutivas. Además, el algoritmo propuesto muestra una gran capacidad para simplificar diseños lógicos en un tiempo bastante razonable y un uso de recursos computacionales bajo.