32
Gecode Programación con restricciones

Programación con restricciones. Gecode es una herramienta para el desarrollo de sistemas basados en restricciones ◦ Abierto ◦ Gratuito ◦ Portable ◦

Embed Size (px)

Citation preview

Page 1: Programación con restricciones.  Gecode es una herramienta para el desarrollo de sistemas basados en restricciones ◦ Abierto ◦ Gratuito ◦ Portable ◦

GecodeProgramación con restricciones

Page 2: Programación con restricciones.  Gecode es una herramienta para el desarrollo de sistemas basados en restricciones ◦ Abierto ◦ Gratuito ◦ Portable ◦

Gecode es una herramienta para el desarrollo de sistemas basados en restricciones◦ Abierto◦ Gratuito◦ Portable◦ Eficiente◦ ConcurrenteEstá disponible para Linux, Windows y Mac OS

www.gecode.org

¿Qué es Gecode?

Page 3: Programación con restricciones.  Gecode es una herramienta para el desarrollo de sistemas basados en restricciones ◦ Abierto ◦ Gratuito ◦ Portable ◦

Primera aproximación Secuencia mágica

Page 4: Programación con restricciones.  Gecode es una herramienta para el desarrollo de sistemas basados en restricciones ◦ Abierto ◦ Gratuito ◦ Portable ◦

Constructura:◦ En la constructora se inicializan las variables de

decisión, se declaran las restricciones y el branching

◦ El branching es, a grandes rasgos, la definición de por dónde debe empezar y hacia dónde debe ir la búsqueda de una solución al problema

Estructura de un modelo

Page 5: Programación con restricciones.  Gecode es una herramienta para el desarrollo de sistemas basados en restricciones ◦ Abierto ◦ Gratuito ◦ Portable ◦
Page 6: Programación con restricciones.  Gecode es una herramienta para el desarrollo de sistemas basados en restricciones ◦ Abierto ◦ Gratuito ◦ Portable ◦

Todo modelo debe incluir:◦ Constructora adicional que actualiza el valor de

las variables de decisión

◦ Función Copy() que devuelve una copia del espacio apoyándose en la constructora anterior

Soporte de búsqueda

Page 7: Programación con restricciones.  Gecode es una herramienta para el desarrollo de sistemas basados en restricciones ◦ Abierto ◦ Gratuito ◦ Portable ◦

Las variables de decisión se pueden imprimir como si fueran variables de C++

Impresión de la solución

Page 8: Programación con restricciones.  Gecode es una herramienta para el desarrollo de sistemas basados en restricciones ◦ Abierto ◦ Gratuito ◦ Portable ◦

En el main se deben seguir los siguientes pasos:

◦ Se crea el modelo◦ se crea el motor de búsqueda para el modelo◦ se obtiene una (o varias) de las soluciónes y se

imprimen.

Main

Page 9: Programación con restricciones.  Gecode es una herramienta para el desarrollo de sistemas basados en restricciones ◦ Abierto ◦ Gratuito ◦ Portable ◦
Page 10: Programación con restricciones.  Gecode es una herramienta para el desarrollo de sistemas basados en restricciones ◦ Abierto ◦ Gratuito ◦ Portable ◦

#include <gecode/int.hh>

IntVar◦ Son el equivalente a los var int de Minizinc.

◦ Constructora: IntVar(home, liminf, limsup)

Tipos de datos para enteros

Page 11: Programación con restricciones.  Gecode es una herramienta para el desarrollo de sistemas basados en restricciones ◦ Abierto ◦ Gratuito ◦ Portable ◦

IntSet◦ Son el equivalente a los conjuntos de minizinc.

◦ Constructora: IntSet(home, minDom, maxDom)

◦ Se puede construir una variable entera pasándole un IntSet como dominio: IntVar x(home, IntSet(-10, 10)

Page 12: Programación con restricciones.  Gecode es una herramienta para el desarrollo de sistemas basados en restricciones ◦ Abierto ◦ Gratuito ◦ Portable ◦

IntVarArray◦ Son el equivalente a los array of var de Minizinc

◦ Constructoras: IntVarArray(home, n, liminf, limsup)

◦ Acceso: IntVarArray x(home, 10, 0, 9) x[i] será la posición i-ésima del array siendo i un

entero.

Page 13: Programación con restricciones.  Gecode es una herramienta para el desarrollo de sistemas basados en restricciones ◦ Abierto ◦ Gratuito ◦ Portable ◦

Matrices◦ Las matrices en Gecode son algo especiales.

◦ Creación: IntVarArray x(home, N*M, a, b) Matrix<IntVarArray> m(x, N, M)

◦ Acceso: m(i,j) m.row(i): Fila i-ésima de la matriz m.col(i): Columna i-ésima de la matriz

Page 14: Programación con restricciones.  Gecode es una herramienta para el desarrollo de sistemas basados en restricciones ◦ Abierto ◦ Gratuito ◦ Portable ◦

Sudoku

Page 15: Programación con restricciones.  Gecode es una herramienta para el desarrollo de sistemas basados en restricciones ◦ Abierto ◦ Gratuito ◦ Portable ◦

Restricciones

Page 16: Programación con restricciones.  Gecode es una herramienta para el desarrollo de sistemas basados en restricciones ◦ Abierto ◦ Gratuito ◦ Portable ◦

Devuelven “trozos” de la matriz que cumplen ciertas condiciones

Tienen su versión para arrays

Slices

Page 17: Programación con restricciones.  Gecode es una herramienta para el desarrollo de sistemas basados en restricciones ◦ Abierto ◦ Gratuito ◦ Portable ◦

Relaciones:◦ Las relaciones en Gecode se definen de una

manera especial: rel(home, var1, rel_type, var2)Ejemplo:

rel(home, x, ITR_LE, y) => x< y

Tipos de relaciones:

Restricciones y operaciones

Page 18: Programación con restricciones.  Gecode es una herramienta para el desarrollo de sistemas basados en restricciones ◦ Abierto ◦ Gratuito ◦ Portable ◦

Count(home, var1, var2, rel_type, c)◦ c será igual al número de veces que aparece var2

en el vector var1. Member(home,x,y):

◦ El valor y debe aparecer por lo menos una vez en el array x

Distinct(home, x): ◦ Todos los valores del array x deben ser distintos

Page 19: Programación con restricciones.  Gecode es una herramienta para el desarrollo de sistemas basados en restricciones ◦ Abierto ◦ Gratuito ◦ Portable ◦

Operaciones aritméticas

Page 20: Programación con restricciones.  Gecode es una herramienta para el desarrollo de sistemas basados en restricciones ◦ Abierto ◦ Gratuito ◦ Portable ◦

Heredan de la clase Space.

Junto con la clase Options permiten parametrizar problemas de tamaño variable

Scripts

Page 21: Programación con restricciones.  Gecode es una herramienta para el desarrollo de sistemas basados en restricciones ◦ Abierto ◦ Gratuito ◦ Portable ◦

Script secuencia mágica

Page 22: Programación con restricciones.  Gecode es una herramienta para el desarrollo de sistemas basados en restricciones ◦ Abierto ◦ Gratuito ◦ Portable ◦

Soporte de búsqueda

Page 23: Programación con restricciones.  Gecode es una herramienta para el desarrollo de sistemas basados en restricciones ◦ Abierto ◦ Gratuito ◦ Portable ◦

Main

Page 24: Programación con restricciones.  Gecode es una herramienta para el desarrollo de sistemas basados en restricciones ◦ Abierto ◦ Gratuito ◦ Portable ◦

Es una herramienta gráfica que incluye Gecode.

Permite ver gráficamente cómo progresa la búsqueda de una solución.

Gist

Page 25: Programación con restricciones.  Gecode es una herramienta para el desarrollo de sistemas basados en restricciones ◦ Abierto ◦ Gratuito ◦ Portable ◦
Page 26: Programación con restricciones.  Gecode es una herramienta para el desarrollo de sistemas basados en restricciones ◦ Abierto ◦ Gratuito ◦ Portable ◦

¿Cómo usar Gist en un modelo?

◦ Solo hace falta cambiar el main:

Se crea el modelo Se crea la instancia de Gist para el modelo Se elige el motor de búsqueda y se le pasa el modelo

y las opciones de Gist

Page 27: Programación con restricciones.  Gecode es una herramienta para el desarrollo de sistemas basados en restricciones ◦ Abierto ◦ Gratuito ◦ Portable ◦

Para la secuencia mágica:

Page 28: Programación con restricciones.  Gecode es una herramienta para el desarrollo de sistemas basados en restricciones ◦ Abierto ◦ Gratuito ◦ Portable ◦

Descargar el ejecutable correspondiente a la versión de Visual Studio del sistema.

Al crear un proyecto nuevo acceder a propiedades del proyecto->C/C++ y agregar la carpeta /Gecode/include en Directorios de inclusión adicionales

¿Cómo instalar Gecode?

Page 29: Programación con restricciones.  Gecode es una herramienta para el desarrollo de sistemas basados en restricciones ◦ Abierto ◦ Gratuito ◦ Portable ◦
Page 30: Programación con restricciones.  Gecode es una herramienta para el desarrollo de sistemas basados en restricciones ◦ Abierto ◦ Gratuito ◦ Portable ◦

En las opciones del vinculador añadir la carpeta /Gecode/lib en Directorios de bibliotecas adicionales

Page 31: Programación con restricciones.  Gecode es una herramienta para el desarrollo de sistemas basados en restricciones ◦ Abierto ◦ Gratuito ◦ Portable ◦
Page 32: Programación con restricciones.  Gecode es una herramienta para el desarrollo de sistemas basados en restricciones ◦ Abierto ◦ Gratuito ◦ Portable ◦

Es útil para aplicaciones reales

Es extremadamente rápido

Es intuitivo

La documentación disponible es excelente

Muy recomendable aprender a usarlo

Conclusiones