JaCoP: Java Constraint Programming

Slides:



Advertisements
Presentaciones similares
Arreglos Unidimensionales y Bidimensionales ESTRUCTURAS DE DATOS I
Advertisements

Introducción a la Investigación de Operaciones
Extremos Absolutos y Relativos Ejemplos
INTELIGENCIA ARTIFICIAL
Diseño y análisis de algoritmos
Introducción Lenguaje de manipulación de datos (Data Manipulation Language) Permite a los usuarios llevar a cabo las tareas de consulta o manipulación.
Investigación de Operaciones
SOLUCIÓN DE PROBLEMAS Problema Solución A B S T R C I Ó N C O N R E I
Lenguaje de programación Java
Fernando Velasco
Tema 4 Introducción a la Programación Lineal
Introducción a los Algoritmos
UNIDAD II: ALGORITMOS Y LENGUAJES
Grupo 4 Matías Melgar Pablo Carbonell
Programación 10-Marzo-11.
FLAN “F- LINKS AND NODES”
Resolución de Problemas Algoritmos y Programación
Introducción al lenguaje de especificación JML
Temas Operaciones básicas Instalando el compilador
Programación 1 Introducción
Curso Administrador Linux
ALGORÍTMICA Dpto. Ingeniería de Sistemas y Automática
Búsqueda Informada Heurísticas.
ENLACES DE INTERES PAGINA OFICIAL:
Programación con restricciones
Diseño de software para la simulación y solución de redes como estrategia para dominar las materias de circuitos eléctricos” M.C. Carlos Rodríguez Pérez.
VISUAL BASIC CONSOLA Todas las ordenes o instrucciones se digitan dentro de sub Main() y End Sub ÁREA DE TRABAJO: Las aplicaciones de consola son aquellas.
Tema 7: Polimorfismo Antonio J. Sierra. Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos.
CONCEPTOS INTRODUCTORIOS DE JAVASCRIPT Preparado por: Prof. Nelliud D. Torres 14/octubre/2004.
Inteligencia Artificial Resolver problemas mediante búsqueda
Java Orientado a Objetos CLASES,OBJETOS Y MÉTODOS
Clases y objetos La unidad fundamental de programación OO son las clases. Conjunto de métodos y semántica Qué se va a hacer POO Clase: que define la implementación.
Tema 6: Clases Antonio J. Sierra.
Ingeniero Anyelo Quintero
Tercera Clase Patricio A. Navarrete Septiembre 10 de 2011.
Profesor: Julio Canales
Diseño de diagramación Diagrama: es una representación gráfica del flujo información de y el proceso de ejecución del programa. Plateo del problema en.
Matrices Es una estructura homogénea, compuesta por varios elementos, todos del mismo tipo y almacenados consecutivamente en memoria A cada elemento se.
EL PODER DE SOLVER.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.
Análisis de Algoritmos
Optimización, Búsqueda Heurística
Problemas de Decisión y Optimización
Diseño y análisis de algoritmos
Parte II. Algorítmica. 3. Algoritmos voraces.
ALGORITMOS Un algoritmo es un método para resolver un problema mediante una serie de pasos precisos, definidos y finitos. En un algoritmo siempre debe.
Introducción al lenguaje de programación SLE 2
Alcance Dinámico La Asociación Actual para un Nombre dado es el encontrado recientemente durante la ejecución, y no a sido destruido aun por el retornado.
Un lenguaje de programación orientado a objetos Maestra Graciela Prado B. Octubre 2013.
Parte II. Algorítmica. 5. Backtracking. 1. Análisis de algoritmos.
Parte I. Estructuras de Datos.
Licenciamiento de Software Santiago Morales Arango 9°A.
Unidad 1: FUNDAMENTOS DE COMPUTACIÓN Y PSEUDOLENGUAJE
Investigación de Operaciones Ing. M.Sc. Eloy Colquehuanca
Tema 6. Introducción a la programación
Parte I. Estructuras de Datos.
Programación Java y Desarrollo de Aplicaciones
POR: JUAN PABLO CLAROS SANTOS
SISTEMAS EXPERTOS (SE) Coronel Jaramillo Ricardo
Términos algoritmo diseñar algoritmo implementar algoritmo
ALGORITMO QUE ES ??.
Práctica Profesional PHP.
Introducción a los TADs
* Cuando nos permite desarrollar un programa que necesitamos para tomar un conjunto de buenas prácticas para hacer eso. Esto se debe a que podemos ahorrar.
Software libre Integrantes: Leidy Ruiz Jhoana Moncada Jhon Vargas
2.1 Tipos de software. Ismael Meza Casillas. Control de Proyectos.
Programación Java y Desarrollo de Aplicaciones Modulo 1 Arquitectura de ordenadores Tema 3 Programas.
ALGORITMO FLOYD WARSHALL
Décimo Curso de Programación Básica con NQC “Segunda Clase” Cristián Arenas Ulloa Agosto 29 de 2009.
Referencia Aspectos legales del Software ¿Qué es una licencia de software? Una licencia de software otorga al usuario derecho legal a utilizar un software.
Transcripción de la presentación:

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

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.

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

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

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.

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

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

Primitive Constraints

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

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

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

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

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

Set Constraints

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

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

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.