1 / 21

JaCoP : Java Constraint Programming

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 .

delu
Télécharger la présentation

JaCoP : Java Constraint Programming

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. JaCoP: Java ConstraintProgramming Xavier Portilla Edo Luis Bernácer Sanchis

  2. Introducción • JaCoPes 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 queimportarel JaCoP-X.jar.

  3. Introducción • JaCoP ha sido desarrollado activamente desde el año 2001. • Fue creado por: KrzysztofKuchcinski y SzymanekRadosla. • Hay un número de personas que han contribuido al desarrollo JaCoPademás de los desarrolladores principales. • Ganó en 2011 la medalla de plata MiniZincChallengecomo resolutor de booleans. • Posee una licencia GNU AfferoGPL. • 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.

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

  5. Variables de dominio finito • IntVar x = new IntVar(store, "X", 1,100); • Store donde lo incluyes. • Stringidentificativa. • Máximo y mínimo posible de valores del dominio(1,100). • También existen en JaCoP variables de dominio finito que tratan booleans: • BooleanVarbv = new BooleanVar(s, "bv");

  6. Conjuntos • Set se define como un conjunto ordenado de números enteros y un dominio. • SetVars = new SetVar(store, "s", 1, 3); • Store donde lo incluyes. • Stringidentificatibo. • Maximo y minimoposible de conjunto (1,3).

  7. Constraints • JaCoPofrece restricciones primitivas, como la igualdad, la desigualdad, así como las limitaciones lógicasy condicionales. • También ofrece restricciones globales. • Hacen referencia a los predicados en MiniZinc.

  8. Constraints • Aplicación • store.impose( new XeqY(x1, x2)); • O descompuesta: • PrimitiveConstraint c = new XeqY(x1, x2); c.impose(store);

  9. PrimitiveConstraints • JaCoPofrece un conjunto de restricciones primitivas que incluyen: • Operaciones aritméticas básicas (+, -, *, /). • Relaciones básicas (=, !=, <, ≤,>, ≥).

  10. PrimitiveConstraints

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

  12. Global Constraints • Alldifferent • IntVara = new IntVar(store, "a", 1, 3); IntVarb = new IntVar(store, "b", 1, 3); IntVarc = new IntVar(store, "c", 1, 3); IntVar[] v = {a, b, c}; Constraint ctr = new Alldifferent(v); store.impose(ctr);

  13. 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);

  14. Global Constraints • Count • Circuit • Element • Distance • Knapsack • Regular • Geost • Binpacking • Diff2 • Assignment • Values • Global cardinality • NetworkFlow • Max y Min

  15. Set Constraints • Se trata de restriccionessobreconjuntos. • SetVar s1 = new SetVar(store, "s1", 1, 3); SetVar s2 = new SetVar(store, "s1", 4, 6); SetVars = new SetVar(store, "s", 1,10); Constraint c = new AunionBeqC(s1, s2, s);

  16. Set Constraints

  17. 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);

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

  19. Ejemplo 1 • Colorear un grafo no dirigido.

  20. 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 20minutos de ejecución ya que aun no había encontrado ninguna solución.

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

More Related