programación con restricciones. gecode es una herramienta para el desarrollo de sistemas basados...
TRANSCRIPT
![Page 1: Programación con restricciones. Gecode es una herramienta para el desarrollo de sistemas basados en restricciones ◦ Abierto ◦ Gratuito ◦ Portable ◦](https://reader033.vdocuments.net/reader033/viewer/2022061301/54d772c84979596c658b5f20/html5/thumbnails/1.jpg)
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 ◦](https://reader033.vdocuments.net/reader033/viewer/2022061301/54d772c84979596c658b5f20/html5/thumbnails/2.jpg)
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 ◦](https://reader033.vdocuments.net/reader033/viewer/2022061301/54d772c84979596c658b5f20/html5/thumbnails/3.jpg)
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 ◦](https://reader033.vdocuments.net/reader033/viewer/2022061301/54d772c84979596c658b5f20/html5/thumbnails/4.jpg)
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 ◦](https://reader033.vdocuments.net/reader033/viewer/2022061301/54d772c84979596c658b5f20/html5/thumbnails/5.jpg)
![Page 6: Programación con restricciones. Gecode es una herramienta para el desarrollo de sistemas basados en restricciones ◦ Abierto ◦ Gratuito ◦ Portable ◦](https://reader033.vdocuments.net/reader033/viewer/2022061301/54d772c84979596c658b5f20/html5/thumbnails/6.jpg)
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 ◦](https://reader033.vdocuments.net/reader033/viewer/2022061301/54d772c84979596c658b5f20/html5/thumbnails/7.jpg)
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 ◦](https://reader033.vdocuments.net/reader033/viewer/2022061301/54d772c84979596c658b5f20/html5/thumbnails/8.jpg)
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 ◦](https://reader033.vdocuments.net/reader033/viewer/2022061301/54d772c84979596c658b5f20/html5/thumbnails/9.jpg)
![Page 10: Programación con restricciones. Gecode es una herramienta para el desarrollo de sistemas basados en restricciones ◦ Abierto ◦ Gratuito ◦ Portable ◦](https://reader033.vdocuments.net/reader033/viewer/2022061301/54d772c84979596c658b5f20/html5/thumbnails/10.jpg)
#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 ◦](https://reader033.vdocuments.net/reader033/viewer/2022061301/54d772c84979596c658b5f20/html5/thumbnails/11.jpg)
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 ◦](https://reader033.vdocuments.net/reader033/viewer/2022061301/54d772c84979596c658b5f20/html5/thumbnails/12.jpg)
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 ◦](https://reader033.vdocuments.net/reader033/viewer/2022061301/54d772c84979596c658b5f20/html5/thumbnails/13.jpg)
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 ◦](https://reader033.vdocuments.net/reader033/viewer/2022061301/54d772c84979596c658b5f20/html5/thumbnails/14.jpg)
Sudoku
![Page 15: Programación con restricciones. Gecode es una herramienta para el desarrollo de sistemas basados en restricciones ◦ Abierto ◦ Gratuito ◦ Portable ◦](https://reader033.vdocuments.net/reader033/viewer/2022061301/54d772c84979596c658b5f20/html5/thumbnails/15.jpg)
Restricciones
![Page 16: Programación con restricciones. Gecode es una herramienta para el desarrollo de sistemas basados en restricciones ◦ Abierto ◦ Gratuito ◦ Portable ◦](https://reader033.vdocuments.net/reader033/viewer/2022061301/54d772c84979596c658b5f20/html5/thumbnails/16.jpg)
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 ◦](https://reader033.vdocuments.net/reader033/viewer/2022061301/54d772c84979596c658b5f20/html5/thumbnails/17.jpg)
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 ◦](https://reader033.vdocuments.net/reader033/viewer/2022061301/54d772c84979596c658b5f20/html5/thumbnails/18.jpg)
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 ◦](https://reader033.vdocuments.net/reader033/viewer/2022061301/54d772c84979596c658b5f20/html5/thumbnails/19.jpg)
Operaciones aritméticas
![Page 20: Programación con restricciones. Gecode es una herramienta para el desarrollo de sistemas basados en restricciones ◦ Abierto ◦ Gratuito ◦ Portable ◦](https://reader033.vdocuments.net/reader033/viewer/2022061301/54d772c84979596c658b5f20/html5/thumbnails/20.jpg)
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 ◦](https://reader033.vdocuments.net/reader033/viewer/2022061301/54d772c84979596c658b5f20/html5/thumbnails/21.jpg)
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 ◦](https://reader033.vdocuments.net/reader033/viewer/2022061301/54d772c84979596c658b5f20/html5/thumbnails/22.jpg)
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 ◦](https://reader033.vdocuments.net/reader033/viewer/2022061301/54d772c84979596c658b5f20/html5/thumbnails/23.jpg)
Main
![Page 24: Programación con restricciones. Gecode es una herramienta para el desarrollo de sistemas basados en restricciones ◦ Abierto ◦ Gratuito ◦ Portable ◦](https://reader033.vdocuments.net/reader033/viewer/2022061301/54d772c84979596c658b5f20/html5/thumbnails/24.jpg)
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 ◦](https://reader033.vdocuments.net/reader033/viewer/2022061301/54d772c84979596c658b5f20/html5/thumbnails/25.jpg)
![Page 26: Programación con restricciones. Gecode es una herramienta para el desarrollo de sistemas basados en restricciones ◦ Abierto ◦ Gratuito ◦ Portable ◦](https://reader033.vdocuments.net/reader033/viewer/2022061301/54d772c84979596c658b5f20/html5/thumbnails/26.jpg)
¿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 ◦](https://reader033.vdocuments.net/reader033/viewer/2022061301/54d772c84979596c658b5f20/html5/thumbnails/27.jpg)
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 ◦](https://reader033.vdocuments.net/reader033/viewer/2022061301/54d772c84979596c658b5f20/html5/thumbnails/28.jpg)
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 ◦](https://reader033.vdocuments.net/reader033/viewer/2022061301/54d772c84979596c658b5f20/html5/thumbnails/29.jpg)
![Page 30: Programación con restricciones. Gecode es una herramienta para el desarrollo de sistemas basados en restricciones ◦ Abierto ◦ Gratuito ◦ Portable ◦](https://reader033.vdocuments.net/reader033/viewer/2022061301/54d772c84979596c658b5f20/html5/thumbnails/30.jpg)
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 ◦](https://reader033.vdocuments.net/reader033/viewer/2022061301/54d772c84979596c658b5f20/html5/thumbnails/31.jpg)
![Page 32: Programación con restricciones. Gecode es una herramienta para el desarrollo de sistemas basados en restricciones ◦ Abierto ◦ Gratuito ◦ Portable ◦](https://reader033.vdocuments.net/reader033/viewer/2022061301/54d772c84979596c658b5f20/html5/thumbnails/32.jpg)
Es útil para aplicaciones reales
Es extremadamente rápido
Es intuitivo
La documentación disponible es excelente
Muy recomendable aprender a usarlo
Conclusiones