jacop : java constraint programming
DESCRIPTION
JaCoP : Java Constraint Programming. Xavier Portilla Edo Luis Bernácer Sanchis. Introducción. JaCoP es una librer í a Java, que permite modelar y resolver problemas con restricciones . - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: JaCoP : Java Constraint Programming](https://reader035.vdocument.in/reader035/viewer/2022062217/56813ace550346895da2f0e4/html5/thumbnails/1.jpg)
JaCoP: Java Constraint Programming
Xavier Portilla EdoLuis Bernácer Sanchis
![Page 2: JaCoP : Java Constraint Programming](https://reader035.vdocument.in/reader035/viewer/2022062217/56813ace550346895da2f0e4/html5/thumbnails/2.jpg)
Introducción
JaCoP es una librería Java, que permite modelar y resolver problemas con restricciones.
Proporciona primitivas para definir dominios finitos, variables, restricciones y métodos de búsqueda.
Descarga e instalación: Descargar de su página
http://sourceforge.net/projects/jacop-solver Para instalar, simplemente hay que importar el JaCoP-X.jar.
![Page 3: JaCoP : Java Constraint Programming](https://reader035.vdocument.in/reader035/viewer/2022062217/56813ace550346895da2f0e4/html5/thumbnails/3.jpg)
Introducción
JaCoP ha sido desarrollado activamente desde el año 2001.
Fue creado por: Krzysztof Kuchcinski y Szymanek Radosla. Hay un número de personas que han contribuido al
desarrollo JaCoP además de los desarrolladores principales. Ganó en 2011 la medalla de plata MiniZinc Challenge
como resolutor de booleans. Posee una licencia GNU Affero GPL.
Su propósito es declarar que el software cubierto por esta licencia es software libre y protegerlo de intentos de apropiación que restrinjan esas libertades a los usuarios. Si haces alguna modificación debes publicarlo.
![Page 4: JaCoP : Java Constraint Programming](https://reader035.vdocument.in/reader035/viewer/2022062217/56813ace550346895da2f0e4/html5/thumbnails/4.jpg)
Store
Variables y restricciones se almacenan en un Store.
El Store tiene que ser creado antes de variables y de las restricciones.
Store store = new Store();
![Page 5: JaCoP : Java Constraint Programming](https://reader035.vdocument.in/reader035/viewer/2022062217/56813ace550346895da2f0e4/html5/thumbnails/5.jpg)
Variables de dominio finito
IntVar x = new IntVar(store, "X", 1,100); Store donde lo incluyes. String identificativa. Máximo y mínimo posible de valores del
dominio(1,100). También existen en JaCoP variables de
dominio finito que tratan booleans: BooleanVar bv = new BooleanVar(s, "bv");
![Page 6: JaCoP : Java Constraint Programming](https://reader035.vdocument.in/reader035/viewer/2022062217/56813ace550346895da2f0e4/html5/thumbnails/6.jpg)
Conjuntos
Set se define como un conjunto ordenado de números enteros y un dominio.
SetVar s = new SetVar(store, "s", 1, 3); Store donde lo incluyes. String identificatibo. Maximo y minimo posible de conjunto (1,3).
![Page 7: JaCoP : Java Constraint Programming](https://reader035.vdocument.in/reader035/viewer/2022062217/56813ace550346895da2f0e4/html5/thumbnails/7.jpg)
Constraints
JaCoP ofrece restricciones primitivas, como la igualdad, la desigualdad, así como las limitaciones lógicas y condicionales.
También ofrece restricciones globales. Hacen referencia a los predicados en
MiniZinc.
![Page 8: JaCoP : Java Constraint Programming](https://reader035.vdocument.in/reader035/viewer/2022062217/56813ace550346895da2f0e4/html5/thumbnails/8.jpg)
Constraints
Aplicación store.impose( new XeqY(x1, x2)); O descompuesta:
PrimitiveConstraint c = new XeqY(x1, x2); c.impose(store);
![Page 9: JaCoP : Java Constraint Programming](https://reader035.vdocument.in/reader035/viewer/2022062217/56813ace550346895da2f0e4/html5/thumbnails/9.jpg)
Primitive Constraints
JaCoP ofrece un conjunto de restricciones primitivas que incluyen: Operaciones aritméticas básicas (+, -, *, /). Relaciones básicas (=, !=, <, ≤,>, ≥).
![Page 10: JaCoP : Java Constraint Programming](https://reader035.vdocument.in/reader035/viewer/2022062217/56813ace550346895da2f0e4/html5/thumbnails/10.jpg)
Primitive Constraints
![Page 11: JaCoP : Java Constraint Programming](https://reader035.vdocument.in/reader035/viewer/2022062217/56813ace550346895da2f0e4/html5/thumbnails/11.jpg)
Logical and Conditional constraints
JACOP permite la utilización de constraints a partir de predicados lógicos:
![Page 12: JaCoP : Java Constraint Programming](https://reader035.vdocument.in/reader035/viewer/2022062217/56813ace550346895da2f0e4/html5/thumbnails/12.jpg)
Global Constraints
Alldifferent IntVar a = new IntVar(store, "a", 1, 3); IntVar b = new IntVar(store, "b", 1, 3); IntVar c = new IntVar(store, "c", 1, 3); IntVar[] v = {a, b, c}; Constraint ctr = new Alldifferent(v); store.impose(ctr);
![Page 13: JaCoP : Java Constraint Programming](https://reader035.vdocument.in/reader035/viewer/2022062217/56813ace550346895da2f0e4/html5/thumbnails/13.jpg)
Global Constraint
Cumulative IntVar[] o = {O1, ..., On};
IntVar[] d = {D1, ..., Dn};IntVar[] r = {AR1, ..., ARn};IntVar Limit = new IntVar(Store, "limit", 0, 10); Constraint ctr = Cumulative(o, d, r, Limit);
![Page 14: JaCoP : Java Constraint Programming](https://reader035.vdocument.in/reader035/viewer/2022062217/56813ace550346895da2f0e4/html5/thumbnails/14.jpg)
Global Constraints
Count Circuit Element Distance Knapsac
k Regular Geost Binpacki
ng
Diff2 Assignme
nt Values Global
cardinality NetworkFl
ow Max y Min
![Page 15: JaCoP : Java Constraint Programming](https://reader035.vdocument.in/reader035/viewer/2022062217/56813ace550346895da2f0e4/html5/thumbnails/15.jpg)
Set Constraints
Se trata de restricciones sobre conjuntos. SetVar s1 = new SetVar(store, "s1", 1, 3);
SetVar s2 = new SetVar(store, "s1", 4, 6); SetVar s = new SetVar(store, "s", 1,10); Constraint c = new AunionBeqC(s1, s2, s);
![Page 16: JaCoP : Java Constraint Programming](https://reader035.vdocument.in/reader035/viewer/2022062217/56813ace550346895da2f0e4/html5/thumbnails/16.jpg)
Set Constraints
![Page 17: JaCoP : Java Constraint Programming](https://reader035.vdocument.in/reader035/viewer/2022062217/56813ace550346895da2f0e4/html5/thumbnails/17.jpg)
Búsqueda de la solución
Se elige el método de búsqueda que se desee para hallar la solución. Ejemplo: s = new DepthFirstSearch<TipoVariable>();
(primero en profundidad) Seguidamente se selecciona algunos parámetro
que determinan la heurística del método de búsqueda seleccionado. A esto se le llaman Select. Ejemplo: select = new
InputOrderSelect<tipoVariable>(store, variable , valor del domino a coger);
![Page 18: JaCoP : Java Constraint Programming](https://reader035.vdocument.in/reader035/viewer/2022062217/56813ace550346895da2f0e4/html5/thumbnails/18.jpg)
Búsqueda de la solución
Finalmente solo nos queda llamar al método labeling de nuestro algoritmo de búsqueda. Ejemplo: s.labeling(store, select); Este método imprime por pantalla una
solución a parte de información adicional, como nodos expandidos, número de decisiones tomadas, etc…
Este método devuelve true si se ha encontrado al menos alguna solución, false en caso contrario.
![Page 19: JaCoP : Java Constraint Programming](https://reader035.vdocument.in/reader035/viewer/2022062217/56813ace550346895da2f0e4/html5/thumbnails/19.jpg)
Ejemplo 1
Colorear un grafo no dirigido.
![Page 20: JaCoP : Java Constraint Programming](https://reader035.vdocument.in/reader035/viewer/2022062217/56813ace550346895da2f0e4/html5/thumbnails/20.jpg)
Ejemplo 2
El Problema de las n-reinas. En JaCoP con 50 reinas tarda
aproximadamente unos 156 ms. En MiniZinc lo tuvimos que parar a los 20
minutos de ejecución ya que aun no había encontrado ninguna solución.
![Page 21: JaCoP : Java Constraint Programming](https://reader035.vdocument.in/reader035/viewer/2022062217/56813ace550346895da2f0e4/html5/thumbnails/21.jpg)
Conclusiones
Al ser una librería de Java, tenemos todas las prestaciones de éste lenguaje de programación.
Tiene una sintaxis bastante sencilla de entender si tienes conocimientos básicos de lenguajes orientados a objetos y de lenguajes de restricciones.
Es bastante veloz, al contrario que MiniZinc, pero no es tan rápido como otros lenguajes de restricciones o librerías, como Gecode o Comet.