Anuncios
-
11/11/18: No olviden que mañana viernes son las presentaciones
de los proyectos. Tendrán 8 minutos por
equipo para presentar, seguido de unos minutos para preguntas. Voy a
aceptar reportes sin penalización hasta el lunes 26 por
si quieren trabajar en el durante el fin de semana. La
estructura del reporte debe incluir una descripción del problema,
una descripción de la solución técnica, y discusión de resultados.
-
10/15/18: La tarea 3 ha sido publicada.
-
9/8/18: La tarea 2 ha sido publicada.
-
8/11/18: La tarea 1 ha sido publicada.
-
8/11/18: Habrá horas de oficina los lunes de 2 a 3, y los miércoles de 11 a 1
en mi oficina para los que tengan dudas o preguntas acerca del curso o de sus proyectos.
Introducción a la síntesis de programas
Este curso provee una introducción a la síntesis de programas, un nuevo campo de estudio en la intersección de lenguajes de programación, métodos formales e inteligencia artificial.
El curso estará dividido en tres unidades:
- Inductive synthesis: Esta unidad se enfoca en técnicas para generar programas cuyo comportamiento se define a base de ejemplos. En esta unidad se describirán diferentes mecanismos para representar espacios de posibles programas, así como mecanismos de búsqueda eficientes y mecanismos de ranking.
- Functional synthesis: Esta unidad cubrirá técnicas para sintetizar funciones que satisfacen especificaciones formales. En esta unidad se cubrirán algunos mecanismos de verificación, así como técnicas de síntesis por deducción.
- Quantitative and probabilistic synthesis: En esta unidad se cubrirán técnicas para sintetizar funciones bajo objetivos cuantitativos o probabilísticos. También se explorarán técnicas basadas en aprendizaje de máquinas y "Deep learning" para aprender distribuciones de programas que se pueden utilizar como parte del proceso de síntesis.
Requisitos: El curso asume una base solida en Matematicas Discretas y Algoritmos, pero el resto del materiál necesario se cubrirá como parte del curso.
El curso se calificará en base a tres ejercicios individuales y un proyecto final en equipo:
- Tarea 1: 20%
- Tarea 2: 20%
- Tarea 3: 20%
- Proyecto final: 40%
Proyecto:
La meta del Proyecto es demostrar que se han asimilado a fondo algunos de los temas cubiertos en el curso. Los proyectos pueden ya sea
aplicar los conceptos que se han aprendido en el curso a un problema nuevo, o pueden extender dichos conceptos en una dirección novedosa.
Los proyectos serán en grupos de dos alumnos, y se calificarán en base a los siguientes criterios.
- Propuesta (20%): La propuesta deberá ser un documento de una página más referencias. Deberá ser entregada como un PDF creado usando LaTeX que
incluya los nombres de los miembros del equipo y una descripción breve de que es lo que se planea hacer para el proyecto y una justificación de por
qué es interesante y novedoso en relación a lo que se ha hecho antes.
-
Reporte Intermedio (20%): El reporte intermedio deberá ser de tres páginas, y deberá describir lo que se ha hecho hasta la fecha y lo que se planea
hacer para completar el proyecto. Se espera que el reporte intermedio elabore sobre lo que se describió en la propuesta e incluya descripciones
claras de la hipótesis a evaluar y los métodos que se planean utilizar y las métricas que se utilizaran para evaluar el resultado.
-
Reporte Final (50%): El reporte final debe describir el proyecto en su totalidad. Es importante recordar que no es necesario un resultado positivo
para obtener crédito completo. El reporte deberá ser de entre cinco y siete páginas en el formato que será proveido.
-
Presentación de resultados (10%): La parte final de la calificación consistirá en una presentación oral del proyecto y los resultados obtenidos.
Temario y Fechas Importantes: