Para fortalecer la preparación de los alumnos del DII, el año 2015 el CADII acordó, conjuntamente con el Comité Académico del Magíster en Ingeniería Informática (CAMII) establecer una base de tres asignaturas obligatorias para todos los alumnos: “Metodología de la Investigación”, “Diseño Avanzado de Algoritmos”, y “Computabilidad y Complejidad Computacional”.
Este curso introduce a los alumnos en la metodología de la investigación científica en Ingeniería Informática y les permite desarrollar algunas competencias necesarias en la formulación de proyectos de investigación y en la escritura de artículos y tesis.
El programa tiene tres áreas de especialización, agrupándose las asignaturas como se indica en los siguientes grupos:
Discutir el uso acoplado de herramientas clásicas y modernas en la computación científica. Dejando al estudiante capacitado para:
Al finalizar este curso el alumno conocerá los fundamentos de teoría de la información, será capaz de reconocer qué tipos de textos pueden ser comprimidos, conocerá las distintas familias de algoritmos de compresión, conocerá a fondo las principales herramientas de compresión de texto disponibles en la actualidad, y será capaz de modificar las herramientas de compresión actuales para agregarles mejoras o proponer nuevas variantes.
Este curso pretende introducir a los alumnos en el análisis de series de tiempo y sus aplicaciones. Se estudiarán los fundamentos teóricos del problema de pronóstico de series de tiempo, tanto desde el punto de vista estadístico, como computacional; además, se abordaran los fundamentos probabilísticos de los modelos clásicos de series de tiempo y aquellos basados en máquinas de aprendizaje. Serán tratadas las metodologías más relevantes para construir modelos de series de tiempo poniendo énfasis en aspectos computacionales y se abordarán diversas metodologías de validación.
Durante la última década, la ciencia de la computación y la teoría de la aproximación han llegado a integrarse en un área de la investigación, que subsume aspectos relevantes de varias disciplinas, tales como las redes neuronales y sus derivados, el diseño asistido por computador, el procesamiento de imágenes, las funciones especiales de la Física-Matemática, las transformaciones conformes, las "wavelets", los fractales, y otros sectores de la ciencia, la técnica y la matemática aplicada. El objetivo de este curso es discutir, y aplicar a situaciones concretas, los resultados más recientes de esta activa área de la investigación en la frontera entre la ciencia de la computación y la teoría de la aproximación.
El curso está orientado a desarrollar los conocimientos y habilidades asociadas al diseño avanzado de algoritmos. Es una asignatura auto contenida en el área, por lo que no considera pre-requisitos. En ella se tratan las técnicas básicas de diseño de algoritmos y además se profundiza en tres aspectos avanzados de diseño: algoritmos aproximados, aleatorizados y en línea.
Esta asignatura forma parte de los cursos electivos de la carrera Ingeniería Civil Informática y forma parte del área de conocimientos Ingeniería Aplicada. Esta asignatura está orientada a alumnos de la carrera Ingeniería Civil Informática y alumnos del Magíster en Ciencias de la Ingeniería Informática. En esta asignatura los estudiantes aprenderán como un conjunto de Ecuaciones Diferenciales Parciales (EDPs), que representan un comportamiento físico, se simula mediante Elementos, Volúmenes o Diferencias Finitas en un computador.
Este curso presenta una panorámica de los sistemas complejos discretos, desde los sistemas más homogéneos (autómatas celulares), donde es posible obtener más resultados teóricos exactos, hasta las redes heterogéneas y masivas, con las que debemos interactuar sin jamás llegar a conocerlas por completo; en el camino se estudian sistemas dinámicos definidos sobre grafos pequeños (en particular, redes booleanas), y se ilustran repetidamente los fenómenos emergentes y la dificultad de análisis que caracterizan a los sistemas complejos, ya desde sus instancias supuestamente más simples. Se pone énfasis en las aplicaciones al campo bioinformático (pasando revista también a otras áreas de aplicación), aunque las herramientas algorítmicas y la perspectiva amplia sobre el tipo de fenómenos son aplicables en una gran cantidad de áreas.
En esta asignatura se introduce a la Computación Gráfica. Se define un sistema computacional con gráfica y se programan aplicaciones a través de una librería con funciones gráficas como OpenGL. Temas que se estudian son: Interacción hombre- computador, transformaciones geométricas, proyecciones y modelación. Para estos temas se programan ejemplos en un lenguaje de programación como C/C++.
Este curso se introducen los fundamentos de los procesos estocásticos, y sus aplicaciones a la modelización de sistemas complejos. El diseño de un sistema computacional exige no sólo satisfacer ciertas funciones, sino también determinar de forma cuantitativa el comportamiento y la eficacia del mismo. Para ello, típicamente debemos construir modelos que suelen incluir algún elemento estocástico. En el curso se introducen los principales modelos estocásticos, así como su utilidad para la toma de decisiones. El análisis de sistemas complejos suele conducir a problemas de optimización estocásticos de difícil solución. Una alternativa puede ser el empleo de la simulación, que esencialmente, consiste en la experimentación computacional de un modelo estocástico, que describe el comportamiento dinámico del sistema bajo estudio.
Este curso es una introducción al reciente campo interdisciplinario de las redes complejas, con énfasis en redes sociales y tecnológicas. Esta área, que trata con grafos de gran tamaño y estructura no aleatoria, ha emergido con fuerza desde fines de los años 90, y ha contribuido a entender una amplia variedad de fenómenos, desde el crecimiento de la Web hasta la propagación de epidemias o rumores, o la formación de comunidades. A la vez ha puesto de manifiesto la existencia de patrones comunes en la conectividad de sistemas tan distintos como la regulación génica, el cerebro humano, las conexiones entre conceptos, o las redes sociales online. El curso cubre los principales modelos, propiedades genéricas, herramientas de análisis y los ejemplos más importantes de redes específicas.
Asignatura centrada en los conceptos, resultados y métodos del Análisis necesarios para abordar los temas de la investigación avanzada propios de la Informática y la Ciencia de la Computación contemporáneas.
Este curso cubre los fundamentos de las teorías de computabilidad y complejidad computacional, bases de la informática teórica. En el caso de la computabilidad lo que se estudia son los límites de lo que un computador es, en principio, capaz de computar. Para esto se estudian las nociones de lenguajes formales, gramáticas y máquinas abstractas, con énfasis en el modelo de la máquina de Turing, su universalidad de cómputo y la existencia de problemas indecidibles. En el caso de la complejidad computacional lo que se estudian son los límites de lo que, para efectos prácticos, podemos calcular en un computador. Para esto se definen las clases más importantes de problemas (con énfasis en P y NP), la jerarquía de clases en que se insertan, sus problemas prototípicos, y las reducciones que permiten clasificar a otros problemas y con ello tener cotas para su dificultad.
Corresponde a un curso electivo del área de Sistemas Computación, donde los alumnos aprenderán temas fundamentales para comprender astronomía, y cuáles son sus implicancias dentro de la astro-ingeniería, y en particular en la Ingeniería Informática. El objetivo general de este curso es dar al alumno suficiente conocimiento para saber cuáles son los diversos tipos de telescopios, la tecnología desarrollada para realizar observaciones astronómicas, los sistemas computacionales envueltos, y las características principales y más relevantes de los distintos proyectos de astronomía desde una perspectiva de la Ingeniería Informática.
Asignatura centrada en los métodos matemáticos y computacionales aplicados al procesamiento de señales y, especialmente, imágenes. La asignatura introduce los elementos computacionales básicos del procesamiento de señales e imágenes, tales como los modelos vectoriales, matriciales y de campos tensoriales, las técnicas de filtrado y convolución, ciertos tipos de transformadas usuales en este contexto (Fourier, Hilbert, wavelets), y aplica estos formalismos a la solución de problemas de visualización , compresión, y procesamiento de señales e imágenes en general.
El curso presenta los conceptos fundamentales de la programación con restricciones. Se estudia los problemas clásicos donde el modelamiento basado en la satisfacción de restricciones es aplicado. Se estudia los fundamentos de los métodos de resolución de problemas de satisfacción de restricciones. Los conceptos teóricos son complementados con el uso de herramientas computacionales para el modelamiento y la resolución de problemas de satisfacción de restricciones.
En este curso se profundizan los conceptos de metaheurísticas, algoritmos de búsqueda local, algoritmos genéticos, algoritmos miméticos, grasp. Se hace énfasis en las aplicaciones y en los problemas de optimización combinatoria con restricciones.
Al finalizar el curso el alumno estará capacitado para:
El curso presenta los conceptos fundamentales de la programación entera. Se estudia los modelos clásicos donde la programación entera es aplicada y los fundamentos de los métodos de resolución de los modelos de optimización combinatoria. Los conceptos teóricos son complementados con el uso de herramientas computacionales para el modelamiento y la resolución de problemas de optimización combinatoria.
Este curso es una revisión de las nuevas tendencias y avances en los métodos de búsqueda basados en heurísticas más conocidos. Tanto los problemas de optimización combinatoria y los problemas de optimización continua serán tratados con mayor énfasis en la combinatoria. Se presentarán las principales técnicas discutiéndolas en forma crítica y sus variaciones. Se utilizarán papers clave incluyendo aplicaciones. Los estudiantes conocerán cómo y por qué estas técnicas funcionan, cuándo aplicarlas, las ventajas respecto de otras técnicas más tradicionales.
Este curso introduce los fundamentos de las redes neuronales artificiales (Artificial Neural Network, ANN) y sus aplicaciones a problemas de clasificación y reconocimiento de patrones. En el curso se introducen algunos desarrollos básicos de las ANN, para diferentes arquitecturas de redes aplicadas tanto a patrones estáticos como a patrones dinámicos. Se analizan diferentes aplicaciones de las ANN, así como sus posibilidades y limitaciones. Finalmente se estudian las redes neuronales recurrentes analizando los problemas de estabilidad, así como la efectividad y aplicación de algunos algoritmos constructivos.
Fundamentos teóricos de las técnicas usadas para el reconocimiento de entidades y patrones. Estos fundamentos entregan los conocimientos necesarios para reconocer la aplicación de estas técnicas así como la base para resolver diversos tipos de problemas de reconocimiento.
La asignatura cubre los fundamentos de recuperación de información que permiten comprender y desarrollar tecnologías de búsqueda de información en la Web. Cubre también temas más avanzados que permiten que el estudiante comprenda el estado del arte de esta área, entre ellas búsqueda en la Web social, búsqueda vertical y búsqueda por facetas.
Al final de esta asignatura, el estudiante será capaz de utilizar tecnologías de la Web Semántica para lograr ese objetivo, logrando que sus propias aplicaciones puedan interpretar automáticamente el contenido de una página web, hacer que sus aplicaciones se entiendan entre ellas o que esas mismas aplicaciones razonen automáticamente acerca de los datos que ellas generan. Además, el estudiante serán capaz de desarrollar páginas web cuyos contenidos sean entendidos por los grandes jugadores de Internet: Google, Bing, Yahoo y Yandex.
Exploración sistemática de literatura científica reciente relativa a la medición, comparación y evaluación de arquitecturas de software.
Este curso es un curso dedicado a la programación paralela con las últimas arquitecturas paralelas existentes (procesadores multi-core, clusters, grids). El objetivo del curso es ser capaz de programar un algoritmo en paralelo en el marco de una tesis de Magister o de Doctorado, así que escribir un short paper para presentar los resultados obtenidos.
Este curso se ocupa de estudiar los métodos robustos en algoritmos de aprendizaje, es decir, del análisis de la insensibilidad o estabilidad de procedimientos de inferencia estadística con respecto a pequeñas desviaciones del modelo de datos supuesto y, muy pocas veces contrastado. El curso tiene como objetivo el precisar este nuevo concepto en los algoritmos de máquina de aprendizaje asociados a los problemas de clasificación, regresión y pronóstico.
En este curso se presentan los conceptos clave de medición en Ingeniería de software, particularmente en las áreas de gestión de proyectos y aseguramiento de calidad de software. Se aplican diversas técnicas y modelos del estado del arte para el dimensionamiento de software, la estimación de esfuerzo, tiempos y costos, y la gestión cuantitativa de la calidad en la producción de software. Finalmente, se analizan los fundamentos básicos del mejoramiento de procesos de software.
El diseño de sistemas de software complejos requiere competencias de concepción, evaluación y construcción diferentes de las requeridas por diseño de aplicativos individuales. El énfasis radica en la satisfacción de propiedades sistémicas (“requisitos extra funcionales”) y el uso de tecnologías para sistemas distribuidos. Este curso reporta técnicas, modelos y criterios para describir, evaluar y desarrollar sistemas de software complejos. Los elementos utilizados incluyen ejemplos de documentación de proyectos reales, casos de estudio, talleres grupales de evaluación, y lecturas complementarias.
Este curso trata todos los aspectos relevantes de la compleja interacción entre humanos y computadores. La filosofía de diseño de interfaces centrado en el usuario incluye una vista particular hacia los procesos de análisis de requerimientos, diseño de los prototipos, revisión y mantención de interfaces de sistemas interactivos. Los diferentes estilos de interacción se abarcan desde la perspectiva de proveer guía clara para sus desarrolladores.
Se expondrán primero conceptos básicos fundamentales sobre computación y algoritmos distribuidos, para luego abordar en el ámbito de los sistemas distribuidos técnicas de programación distribuida, tolerancia a fallas, identificación y seguridad. Finalmente se verá la integración de los conceptos anteriores en el diseño de servicios y aplicaciones distribuidas.
La Ingeniería de Software es la disciplina que se ocupa de la construcción sistemática, eficaz y eficiente de sistemas de software. Casi toda la Ciencia de Computación existe sobre la programación, pero el desarrollo de sistemas que satisfagan expectativas conflictivas y ambiguas de terceros es mucho más complejo, y la creación y mantención de equipos y organizaciones que hagan esto sistemáticamente es el foco de esta disciplina. Los participantes serán expuestos a las corrientes históricamente principales de investigación de la comunidad, y un panorama de la investigación actual que incluye subdisciplinas, temas transversales, y enfoques inter- disciplinarios.
Este curso es un curso avanzado con énfasis en la propia exploración e investigación. La evaluación se realizará con un certamen y un proyecto. El proyecto está orientado a diseñar e implementar un servicio a gran escala usando técnicas Peer to Peer. El trabajo será en equipo.
Esta asignatura tiene como propósito explorar y profundizar en materias específicas relacionados con el curso previo de introducción general a Sistemas Distribuidos. Cada año, según los temas que estén más vigentes y los intereses de los alumnos, se trabaja en una temática específica.
Experimentación en Ingeniería de Software concierne el uso del diseño y análisis experimental para validar ideas y creencias, en un campo ampliamente dominado por suposiciones y especulaciones, orientado en forma práctica para los ingenieros de software. ¿Son válidas nuestras suposiciones? ¿Qué afirmaciones de la comunidad de desarrollo de software son válidas? ¿Bajo qué circunstancias son válidas? Responder estas preguntas es crítico para otorgar mayor certeza a las ideas en que se fundamenta la Ingeniería de Software. Durante la construcción de software no se utilizan, habitualmente, técnicas formales de experimentación. Este hecho contrasta con las prácticas comunes de otras ingenierías y campos científicos, en las cuales es obligatorio realizar una rigurosa experimentación que apoye las investigaciones realizadas. En este curso se discute el uso de Análisis y Diseño de Experimentos en Ingeniería de Software, estableciendo las bases teóricas para la efectiva realización de experimentos.
Seminario destinado a estudiar en la literatura especializada, los trabajos relacionados con el tema de tesis del alumno, con el objeto de profundizar en el tema específico de la tesis, explorando las fronteras del conocimiento y proponiendo métodos alternativos.
La nota se obtiene al aprobar el tema de tesis.
Seminario destinado a estudiar en la literatura especializada, los trabajos relacionados con el tema de tesis del alumno, con el objeto de profundizar en el tema específico de la tesis, explorando las fronteras del conocimiento y proponiendo métodos alternativos.
La nota se obtiene al entregar la tesis para rendir su examen de doctorado.