La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Programación con restricciones

Presentaciones similares


Presentación del tema: "Programación con restricciones"— Transcripción de la presentación:

1 Programación con restricciones
Gecode Programación con restricciones

2 ¿Qué es Gecode? Gecode es una herramienta para el desarrollo de sistemas basados en restricciones Abierto Gratuito Portable Eficiente Concurrente Está disponible para Linux, Windows y Mac OS

3 Primera aproximación Secuencia mágica

4 Estructura de un modelo
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

5

6 Soporte de búsqueda 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

7 Impresión de la solución
Las variables de decisión se pueden imprimir como si fueran variables de C++

8 Main 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.

9

10 Tipos de datos para enteros
#include <gecode/int.hh> IntVar Son el equivalente a los var int de Minizinc. Constructora: IntVar(home, liminf, limsup)

11 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)

12 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.

13 Matrices Las matrices en Gecode son algo especiales. Creación: Acceso:
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

14 Sudoku

15 Restricciones

16 Slices Devuelven “trozos” de la matriz que cumplen ciertas condiciones
Tienen su versión para arrays

17 Restricciones y operaciones
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:

18 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

19 Operaciones aritméticas

20 Scripts Heredan de la clase Space.
Junto con la clase Options permiten parametrizar problemas de tamaño variable

21 Script secuencia mágica

22 Soporte de búsqueda

23 Main

24 Gist Es una herramienta gráfica que incluye Gecode.
Permite ver gráficamente cómo progresa la búsqueda de una solución.

25

26 ¿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

27 Para la secuencia mágica:

28 ¿Cómo instalar Gecode? 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

29

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

31

32 Conclusiones Es útil para aplicaciones reales Es extremadamente rápido
Es intuitivo La documentación disponible es excelente Muy recomendable aprender a usarlo


Descargar ppt "Programación con restricciones"

Presentaciones similares


Anuncios Google