Ja Co P Java Constraint Programming Xavier Portilla

  • Slides: 21
Download presentation
Ja. Co. P: Java Constraint Programming Xavier Portilla Edo Luis Bernácer Sanchis

Ja. Co. P: Java Constraint Programming Xavier Portilla Edo Luis Bernácer Sanchis

Introducción Ja. Co. P es una librería Java, que permite modelar y resolver problemas

Introducción Ja. Co. P 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 Ja. Co. P-X. jar.

Introducción Ja. Co. P ha sido desarrollado activamente desde el año 2001. Fue creado

Introducción Ja. Co. P 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 Ja. Co. P además de los desarrolladores principales. Ganó en 2011 la medalla de plata Mini. Zinc 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.

Store Variables y restricciones se almacenan en un Store. El Store tiene que ser

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();

Variables de dominio finito Int. Var x = new Int. Var(store, "X", 1, 100);

Variables de dominio finito Int. Var x = new Int. Var(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 Ja. Co. P variables de dominio finito que tratan booleans: � Boolean. Var bv = new Boolean. Var(s, "bv");

Conjuntos Set se define como un conjunto ordenado de números enteros y un dominio.

Conjuntos Set se define como un conjunto ordenado de números enteros y un dominio. Set. Var s = new Set. Var(store, "s", 1, 3); � Store donde lo incluyes. � String identificatibo. � Maximo y minimo posible de conjunto (1, 3).

Constraints Ja. Co. P ofrece restricciones primitivas, como la igualdad, la desigualdad, así como

Constraints Ja. Co. P 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 Mini. Zinc.

Constraints Aplicación � store. impose( new Xeq. Y(x 1, x 2)); � O descompuesta:

Constraints Aplicación � store. impose( new Xeq. Y(x 1, x 2)); � O descompuesta: Primitive. Constraint c. impose(store); c = new Xeq. Y(x 1, x 2);

Primitive Constraints Ja. Co. P ofrece un conjunto de restricciones primitivas que incluyen: �

Primitive Constraints Ja. Co. P ofrece un conjunto de restricciones primitivas que incluyen: � Operaciones aritméticas básicas (+, -, *, /). � Relaciones básicas (=, !=, <, ≤, >, ≥).

Primitive Constraints

Primitive Constraints

Logical and Conditional constraints JACOP permite la utilización de constraints a partir de predicados

Logical and Conditional constraints JACOP permite la utilización de constraints a partir de predicados lógicos:

Global Constraints Alldifferent � Int. Var a = new Int. Var(store, "a", 1, 3);

Global Constraints Alldifferent � Int. Var a = new Int. Var(store, "a", 1, 3); Int. Var b = new Int. Var(store, "b", 1, 3); Int. Var c = new Int. Var(store, "c", 1, 3); Int. Var[] v = {a, b, c}; Constraint ctr = new Alldifferent(v); store. impose(ctr);

Global Constraint Cumulative � Int. Var[] o = {O 1, . . . ,

Global Constraint Cumulative � Int. Var[] o = {O 1, . . . , On}; Int. Var[] d = {D 1, . . . , Dn}; Int. Var[] r = {AR 1, . . . , ARn}; Int. Var Limit = new Int. Var(Store, "limit", 0, 10); Constraint ctr = Cumulative(o, d, r, Limit);

Global Constraints Count Circuit Element Distance Knapsac k Regular Geost Binpacki ng Diff 2

Global Constraints Count Circuit Element Distance Knapsac k Regular Geost Binpacki ng Diff 2 Assignment Values Global cardinality Network. Flo w Max y Min

Set Constraints Se trata de restricciones sobre conjuntos. � Set. Var s 1 =

Set Constraints Se trata de restricciones sobre conjuntos. � Set. Var s 1 = new Set. Var(store, "s 1", 1, 3); Set. Var s 2 = new Set. Var(store, "s 1", 4, 6); Set. Var s = new Set. Var(store, "s", 1, 10); Constraint c = new Aunion. Beq. C(s 1, s 2, s);

Set Constraints

Set Constraints

Búsqueda de la solución Se elige el método de búsqueda que se desee para

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 Depth. First. Search<Tipo. Variable>(); (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 Input. Order. Select<tipo. Variable>(store, variable , valor del domino a coger);

Búsqueda de la solución Finalmente solo nos queda llamar al método labeling de nuestro

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.

Ejemplo 1 Colorear un grafo no dirigido.

Ejemplo 1 Colorear un grafo no dirigido.

Ejemplo 2 El Problema de las n-reinas. � En Ja. Co. P con 50

Ejemplo 2 El Problema de las n-reinas. � En Ja. Co. P con 50 reinas tarda aproximadamente unos 156 ms. � En Mini. Zinc lo tuvimos que parar a los 20 minutos de ejecución ya que aun no había encontrado ninguna solución.

Conclusiones Al ser una librería de Java, tenemos todas las prestaciones de éste lenguaje

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 Mini. Zinc, pero no es tan rápido como otros lenguajes de restricciones o librerías, como Gecode o Comet.