Descargar la presentación
La descarga está en progreso. Por favor, espere
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
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.
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.
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
30
En las opciones del vinculador añadir la carpeta /Gecode/lib en Directorios de bibliotecas adicionales
32
Conclusiones Es útil para aplicaciones reales Es extremadamente rápido
Es intuitivo La documentación disponible es excelente Muy recomendable aprender a usarlo
Presentaciones similares
© 2024 SlidePlayer.es Inc.
All rights reserved.