Programación con Restricciones Constraint Programming



Documentos relacionados
Restricciones. Inteligencia Artificial. Ingeniería Superior en Informática, 4º Curso académico: 2011/2012 Profesores: Ramón Hermoso y Matteo Vasirani

Algoritmos para CSP 1

Problemas de satisfacción de restricciones.

Satisfacción de Restricciones

Hoja de Problemas Tema 6 Búsqueda con estados estructurados: Restricciones

Tema 3: Problemas de Satisfacción de Restricciones

Ingeniería en Informática

Ecuaciones de primer grado con dos incógnitas

Técnicas de prueba 1. FUNDAMENTOS DE LA PRUEBA DEL SOFTWARE

Resolución de Problemas

Capítulo 12: Indexación y asociación

- Bases de Datos - - Diseño Físico - Luis D. García

Estas visiones de la información, denominadas vistas, se pueden identificar de varias formas.

GRAFOS. Prof. Ing. M.Sc. Fulbia Torres

Ciclo de vida y Metodologías para el desarrollo de SW Definición de la metodología

Activos Intangibles Costos de Sitios Web

1. DML. Las subconsultas

Problemas de satisfacción de restricciones. Javier Ramírez Rodríguez Departamento de Sistemas Universidad Autónoma Metropolitana

Universidad de Buenos Aires Facultad De Ingeniería. Operaciones Lógicas. [75.40] Algoritmos y Programación I. 2do Cuatrimestre 2010

Base de datos en Excel

Módulo 9 Sistema matemático y operaciones binarias

Nota 2. Luis Sierra. Marzo del 2010

Árboles AVL. Laboratorio de Programación II

Lectura: MANTENER LA DISTANCIA. CIRCULANDO POR EUROPA

x

CLASE # 5 TÉCNICAS DE CAJA BLANCA

LAS SUBCONSULTAS SQL SERVER Manual de Referencia para usuarios. Salomón Ccance CCANCE WEBSITE

Es de aplicación a todas aquellas situaciones en las que se necesita desplegar un objetivo para obtener una visión clara de cómo debe ser alcanzado.

BASES Y DIMENSIÓN. Propiedades de las bases. Ejemplos de bases.

circuitos digitales Oliverio J. Santana Jaria Sistemas Digitales Ingeniería Técnica en Informática de Sistemas Curso

Capítulo IV. INTERBLOQUEO E INANICIÓN

PRUEBAS DE SOFTWARE TECNICAS DE PRUEBA DE SOFTWARE

SISTEMAS Y MANUALES DE LA CALIDAD

Cómo?: Resolviendo el sistema lineal homógeneo que satisfacen las componentes de cualquier vector de S. x4 = x 1 x 3 = x 2 x 1

SÍNTESIS Y PERSPECTIVAS

7. Conclusiones. 7.1 Resultados

Operaciones Booleanas y Compuertas Básicas

árbol como un conjunto de nodos y líneas

SIC 32 Activos Intangibles Costos de Sitios Web

ANEXO 26-A COMITÉ PERMANENTE DE INTERPRETACIÓN SIC N 32 ACTIVOS INTANGIBLES COSTOS DE SITIOS WEB. (Modificada en 2008) (IV Difusión)

1. Descripción y objetivos

Tecnologías en la Educación Matemática. Expresiones. Datos. Expresiones Aritméticas. Expresiones Aritméticas 19/08/2014

4. Programación Paralela

Complejidad - Problemas NP-Completos. Algoritmos y Estructuras de Datos III

Tema 3. Espacios vectoriales

Ejemplos de conversión de reales a enteros

DEPARTAMENTO DE INGENIERÍA EN SISTEMAS Y COMPUTACIÓN OPCIÓN I

Resumen de técnicas para resolver problemas de programación entera Martes, 9 de abril. Enumeración. Un árbol de enumeración

El modelo relacional

Capítulo 4 Procesos con estructuras de repetición

Capitulo V Administración de memoria

NÚMEROS NATURALES Y NÚMEROS ENTEROS

Programación Genética

Árboles. Cursos Propedéuticos Dr. René Cumplido M. en C. Luis Rodríguez Flores

Matrices. Definiciones básicas de matrices. José de Jesús Angel Angel.

Métodos Heurísticos en Inteligencia Artificial

GANTT, PERT y CPM. Figura 5.3: Carta GANTT 3.

Unidad II: Análisis de Redes

Sistemas de ayuda a la decisión Tema 5. Análisis de Sensibilidad Análisis Cualitivo y Análisis Paramétrico

CAPITULO 4 JUSTIFICACION DEL ESTUDIO. En este capítulo se presenta la justificación del estudio, supuestos y limitaciones de

Gestión de la Configuración

Ciclo de vida del Software

Plan de estudios ISTQB: Nivel Fundamentos

Gestión de Configuración del Software

SISTEMAS NUMERICOS. Ing. Rudy Alberto Bravo

Sistemas de numeración

Fundamentos de Investigación de Operaciones Asignación y Vendedor Viajero

TEMA 8.- DISEÑO TEORICO DE BASES DE DATOS RELACIONALES. 1. TEORÍA DE LAS DEPENDENCIAS FUNCIONALES

TEMA 2: Representación de la Información en las computadoras

Problemas de Satisfacción de Restricciones

CAPÍTULO 2 DEFINICIÓN DEL PROBLEMA

TEMA 3 PROFESOR: M.C. ALEJANDRO GUTIÉRREZ DÍAZ 2 3. PROCESAMIENTO DE CONSULTAS DISTRIBUIDAS

PRÁCTICA N 2 SISTEMAS DE NUMERACIÓN

LA LOGÍSTICA COMO FUENTE DE VENTAJAS COMPETITIVAS

Estructura de Datos y de la Información. Pilas y expresiones aritméticas

un programa concurrente

Problemas indecidibles

Matrices Invertibles y Elementos de Álgebra Matricial

Activos Intangibles Costos de Sitios Web

Operaciones en el Modelo Relacional. Relacional. Relacional. Índice. Lenguajes de Consulta

ESTRATEGIA DE DINAMARCA: INFORME SOBRE EL FUTURO DEL ENTORNO LABORAL

Algoritmos sobre Grafos

Búsqueda heurística Prof. Constantino Malagón

ANÁLISIS SEMÁNTICO. Especificación formal: Semántica Operacional, semántica denotacional, semántica Axiomática, Gramáticas con Atributos.

Este documento enumera los diferentes tipos de Diagramas Matriciales y su proceso de construcción.

Tema 2. Espacios Vectoriales Introducción

TABLA DE DECISION. Consideremos la siguiente tabla, expresada en forma genérica, como ejemplo y establezcamos la manera en que debe leerse.

Aplicación de la inteligencia artificial a la resolución del problema de asignación de estudiantes del departamento de PDI

Relaciones binarias. ( a, b) = ( c, d) si y solamente si a = c y b = d

Espacios generados, dependencia lineal y bases

Capítulo 9. Archivos de sintaxis

Sistemas de Información Administrativo - Universidad Diego Portales. Cátedra : Sistemas de Información Administrativa S.I.A.

forma de entrenar a la nuerona en su aprendizaje.

Arquitectura de Aplicaciones

2.2. LA COMPRA. TOMA DE DECISIONES DEL CLIENTE.

En cualquier caso, tampoco es demasiado importante el significado de la "B", si es que lo tiene, lo interesante realmente es el algoritmo.

Introducción. Definición de los presupuestos

Programación de Sistemas

16.36: Ingeniería de sistemas de comunicación. Clase 15: ProtocolosARQ. Eytan Modiano

Transcripción:

Programación con Restricciones Constraint Programming Introducción basada en Roman Barták: Guide to Constraint Programming http://kti.ms.mff.cuni.cz/~bartak/constraints/index.html Constraint Programming 1

Contenidos Introducción Satisfacción de restricciones Algoritmos de búsqueda sistemática Técnicas de consistencia Propagación de restricciones Ordenación de variables y valores Constraint Programming 2

Introducción I La programación con restricciones es una tecnología utilizada para la resolución de efectiva de problemas grandes, usualmente combinatorios, y especialmente en áreas como planificación y programación Multidisciplinar: inteligencia artificial, lenguajes de programación, lógica computacional y simbólica,... Inicios en la década de los 70 dentro de la IA junto con las redes de restricciones. Constraint Programming 3

Introducción II Programación con restricciones = generación de restricciones + solución Dominios Gráficos: coherencia geométrica Lenguaje natural: reconocedores eficientes Bases de datos: asegurar/restaurar consistencia Biología molecular: secuenciamiento DNA Aplicaciones de negocios: elección de mercados Ingeniería eléctrica: localización de averías Diseño de circuitos: especificación de esquemas Constraint Programming 4

Constraint Programming 5

Constraint Programming 6

Constraint Programming 7

Definiciones Programación con restricciones: 1. Especificar restricciones entre las variables del problema 2. Encontrar soluciones que satisfagan todas las restricciones Restricción: relación entre varios elementos desconocidos Ej. A+B=C, X<Y, N=LENGTH(S) Constraint Programming 8

Definiciones II Restricción = relación lógica entre variables desconocidas, cada una tomando un valor determinado de su dominio particular Una restricción limita los valores que puede tomar una variable Ejemplos El círculo C está dentro del rectángulo R La longitud de la palabra W es de 10 caracteres X es menor que Y La suma de los ángulos del triángulo es 180 Juan puede venir a clase el miércoles después de las 12:00 Propiedades Pueden especificar información parcial (no es necesario que precisen unívocamente el valor de sus variables) Son no direccionales Son declarativas Son aditivas Raramente son independientes Constraint Programming 9

Constraint Programing Es el estudio de sistemas computacionales basados en restricciones. La idea es la de resolver problemas mediante la especificación de restricciones (condiciones y propiedades) que debe satisfacer la solución Sub-áreas Satisfacción de restricciones Resolución de restricciones Constraint Programming 10

Satisfacción de restricciones Surge de los subcampos de IA de problemas combinacionales y búsqueda, y de el de gráficos por computador En un problema de satisfacción de restricciones (CSP) dados Un conjunto finito de variables Una función que asigna a cada variable un dominio finito Un conjunto finito de restricciones Cada restricción limita las combinaciones de valores que puede tomar simultáneamente un conjunto de variables. Una solución es una asignación a cada variable de un valor de su dominio que satisfaga todas las restricciones La tarea puede consistir en conseguir una o todas las soluciones Se resuelven con métodos de búsqueda. Constraint Programming 11

Resolución de restricciones Difiere de la satisfacción de restricciones en la utilización de variables con dominios infinitos Las restricciones individuales son también más complejas (pe. inecuaciones no lineales) Utilizan métodos algebraicos y numéricos en lugar combinaciones y búsqueda. Es posible discretizar dominios infinitos y aplicar entonces técnicas de satisfacción de restricciones. Constraint Programming 12

Satisfacción de restricciones Un Constraint Satisfaction Problem (CSP) se compone de Un conjunto de variables X={x 1,..., x n } Para cada variable x i, un conjunto finito de valores posibles D i (su dominio) Y un conjunto de restricciones limitando los valores que pueden tomar simultáneamente las variables de cada restricción Una solución de un CSP consiste en la asignación de un valor a cada variable de sus correspondientes dominios, de forma que se satisfagan todas las restricciones Podemos querer encontrar Sólo una solución, si preferir cual Todas las soluciones Una óptima o, al menos, una buena solución, dada una función objetivo definida en término de algunas o todas las variables Constraint Programming 13

Satisfacción de restricciones II Las soluciones se encuentran probando sistemáticamente todas las asignaciones posibles. Existen distintas familias de métodos de búsqueda: Explorar el espacio de asignaciones parciales Explorar el espacio de asignaciones completas (a todas las variables) estocásticamente. porqué no utilizar métodos como los de investigación operativa? La representación de un CSP es mucho más cercana al problema original En ocasiones los métodos de CS son más rápidos que los de programación entera Constraint Programming 14

Satisfacción de restricciones III qué veremos? Algoritmos de búsqueda sistemática Técnicas de consistencia Propagación de restricciones Ordenación de variables y valores Constraint Programming 15

Algoritmos de búsqueda sistemáticos La mayoría de los algoritmos utilizados para resolver CSP buscan sistemáticamente entre las asignaciones posibles de valores a variables. Garantizan encontrar una solución (si es que existe) Desventaja: ineficiencia Representativos Generar y Testear GT Vuelta atrás (cronológica) BT Constraint Programming 16

Generar y Testear GT Primero prueba una combinación y después comprueba si es correcta El número de combinaciones posibles es el producto cartesiano de todos los dominios de las variables Desventaja No es eficiente: genera muchas asignaciones erróneas Se puede mejorar fácilmente Backtracking Constraint Programming 17

Vuelta atrás BT Es el más usual de los que realizan busca sistemática Intenta extender una solución parcial incrementalmente con la asignación a una variable que sea consistente con la solución parcial obtenida hasta ese momento Si una solución parcial viola alguna restricción, se realiza la vuelta atrás con la variable que recibió su valor más recientemente y tiene valores alternativos BT es capaz de eliminar un subespacio del producto cartesiano de todos los dominios de las variables Aunque mejor que GT su complejidad computacional es exponencial Constraint Programming 18

Vuelta atrás. Desventajas Thrashing (vapulear, golpear?) Falla reiteradamente debido a la misma causa Ej. A, B, C, D, E: 1.. 10 A>E Intenta todas las asignaciones para B,C,D antes de encontrar que A <> 1 Se produce porque no detecta la causa real del conflicto Se puede evitar con Vuelta atrás inteligente (Backjumping) La vuelta atrás se produce al punto que genera el problema Trabajo redundante Aunque se identifiquen las variables conflictivas, no se almacenan para volver a detectar la misma situación posteriormente Ej. A, B, C, D, E: 1.. 10 B+8<D C=5*E En las asignaciones a C,E comprueba reiteradamente los valores 1..9 para D Métodos de vuelta atrás dirigidos por dependencias eliminan estos dos inconvenientes (backmarking, backchecking recuerda las asignaciones fallidas) Detecta conflictos demasiado tarde No es capaz de detectar el conflicto hasta que ocurre Ej. A, B, C, D, E: 1.. 10 A= 3*E El hecho de que A>2 se detecta al asignar E Se evita aplicando técnicas para comprobar por anticipado los posibles conflictos (forward checking) Constraint Programming 19

Técnicas de consistencia Aparecen en los primeros programas de reconocimiento de imágenes Consiste en descartar combinaciones que no conducen a soluciones antes de la búsqueda Reduce el espacio de búsqueda Se podrían utilizar sin búsqueda (aunque no es lo usual) Los algoritmos que fuerzan la consistencia en CSP binarios persiguen que una solución parcial que define una pequeña red (de restricciones) se pueda extender a una red adyacente Ejemplo: A:[3..7]; B:[1..5] con A<B resulta en A[3..4]; B[4..5] Tipos Nodo Arco Camino Constraint Programming 20

Consistencia de nodos Es la más simple de conseguir El nodo V es consistente a nivel de nodo si cada valor x de su dominio actual satisface todas las restricciones unarias sobre V Todos aquellos valores que violen alguna restricción unaria se eliminan del dominio Algoritmo NodeConsistency procedure NC for each V in nodes(g) for each X in the domain D of V if any unary constraint on V is inconsistent with X then delete X from D; endif endfor endfor end NC Constraint Programming 21

Consistencia de Arcos Persigue asegurar la consistencia de restricciones binarias (en CSP binarios) El arco (Vi,Vj) es consistente a nivel de arcos si para cada valor x en el dominio actual de Vi existe algún valor y en el dominio de Vj de forma que Vi=x y Vj=y es una combinación permitida por las restricciones binarias entre Vi y Vj NO es simétrica: Si (Vi,Vj) es consistente, no significa que (Vj,Vi) también lo sea. Sólo hay que eliminar aquellos valores de Vi para los que no existe algún valor en Vj que verifique las restricciones binarias entre Vi y Vj Constraint Programming 22

Consistencia de Arcos: REVISE procedure REVISE(Vi,Vj) DELETE <- false; for each X in Di do if there is no such Y in Dj such that (X,Y) is consistent, then delete X from Di; DELETE <- true; endif; endfor; return DELETE; End REVISE Para conseguir la consistencia en un grafo de restricciones no es suficiente con ejecutar este procedimiento una sola vez Cada vez que REVISE reduce el dominio de alguna variable Vi, algunos arcos (Vj,Vi) ya analizados, deben ser revisados nuevamente algoritmo AC-1 Constraint Programming 23

Consistencia de Arcos: AC-1 procedure AC-1 Q <- {(Vi,Vj) in arcs(g),i#j}; repeat CHANGE <- false; for each (Vi,Vj) in Q do CHANGE <- REVISE(Vi,Vj) or CHANGE; Endfor until not(change) end AC-1 Principal limitación Ineficiencia: cada modificación de un dominio fuerza la re-evaluación de todos los arcos AC-3 Constraint Programming 24

Consistencia de Arcos: AC-3 Es suficiente una cola de arcos para revisitar Sólo se incluyen en la cola los arcos afectados por la reducción del dominio. No se incluye el arco inverso al que provocó la reducción del dominio procedure AC-3 Q <- {(Vi,Vj) in arcs(g),i#j}; while not Q empty select and delete any arc (Vk,Vm) from Q; if REVISE(Vk,Vm) then Q <- Q union {(Vi,Vk) such that (Vi,Vk) in arcs(g),i#k,i#m} Endif Endwhile End AC- Constraint Programming 25

Conjuntos de apoyo Se comprueban muchos pares de valores en cada revisión del arco Dichos test se repiten cada vez que se revisa el arco Realmente los valores a,b,c no necesitan ser re-evaluados porque todavía tienen apoyos en V 2 distintos de a no podríamos computar los conjuntos de apoyo una vez y usarlos durante la revisión? Constraint Programming 26

Consistencia de Arcos: AC-4 procedure INITIALIZE Q <- {}; S <- {}; % initialize each element of structure S for each (Vi,Vj) in arcs(g) do % (Vi,Vj) and (Vj,Vi) are same elements for each a in Di do total <- 0; for each b in Dj do if (a,b) is consistent according to the constraint (Vi,Vj) then total <- total+1; Sj,b <- Sj,b union {<i,a>}; Endif endfor; counter[(i,j),a] <- total; if counter[(i,j),a]=0 then delete a from Di; Q <- Q union {<i,a>}; endif; endfor; endfor; return Q; end INITIALIZE procedure AC-4 Q <- INITIALIZE; while not Q empty select and delete any pair <j,b> from Q; for each <i,a> from Sj,b do counter[(i,j),a] <- counter[(i,j),a] - 1; if counter[(i,j),a]=0 & a is still in Di then delete a from Di; Q <- Q union {<i,a>}; Endif Endfor Endwhile end AC-4 Constraint Programming 27

Cálculo de los apoyos y su utilización Después de procesar el arco (i,j) de INITIALIZE Utilizando los conjuntos de apoyo 1. Sea b3 eliminado del domino de j (por algún motivo) 2. Examinando Sj,b3 encontramos los valores a los que b3 apoya 3. Decrementamos el contador para estos valores (indicarles que han perdido uno de los apoyos) 4. Si algún contador es cero (a3) eliminar el valor y repetir el procedimiento con el valor respectivo (ir a 1) Constraint Programming 28

Consistencia de Arcos AC-3 y AC-4 son los más utilizados AC-4 consigue el óptimo para el peor caso Su eficiencia media no es buena... y además consume gran cantidad de memoria También existen evoluciones como AC-5, AC-6, AC-7,... No está clara su eficacia (compromiso entre carga computacional, velocidad, y almacenamiento) Si después de aplicar consistencia de arcos el dominio de cada variable es uno, el CSP tendrá solución única En cualquier otro caso la respuesta no es general. Ejemplo: red de restricciones consistente en arcos, dominios no vacíos, y sin solución que satisfaga todas las restricciones... Constraint Programming 29

Consistencia de caminos Consistencia-k Consiste en aplicar un mayor grado de consistencia para salvar la ineficacia de la consistencia de arcos Un grafo es k-consistente cuando Seleccionamos k-1 variables que satisfagan todas las restricciones entre estas variables y tomar una k-ésima variable cualquiera, y existe un valor para la variable k-ésima que satisfaga todas las restricciones entre las k variables Un grafo es fuertemente k-consistente si es j-consistente para todo j<=k Consistencia de nodos es 1-consistente Consistencia de arcos es 2-consistente Consistencia de caminos >= 3-consistente Aunque existen algoritmos no se suelen utilizar por motivos de eficiencia: mayor consumo de memoria, baja relación potencia/eficiencia, amplia la red de restricciones y tampoco garantiza encontrar una solución Constraint Programming 30

Pensar globalmente CSP: los problemas se describen localmente Las restricciones afectan a pequeños conjuntos de variables La reducción de los dominios es pobre Analizar restricciones globales Aplicables sobre subproblemas concretos Utilizar información semántica para mejorar la eficiencia Ejemplo La consistencia local no detecta poda, aunque es posible eliminar algunos valores Constraint Programming 31

Propagación de restricciones Combina técnicas de backtracking con técnicas de consistencia. Backtracking-> construye una solución parcial y la va extendiendo con nuevas variables Consistencia-> se aplica después de cada nueva asignación Obtendremos distintos algoritmos de satisfacción de restricciones dependiendo de la técnica de consistencia aplicada Backtracking Forward checking Look ahead Constraint Programming 32

Backtracking Se puede ver como una combinación de GT y una fracción de consistencia de arcos Comprueba consistencia de arcos entre las variables instanciadas de la solución parcial y la nueva extensión que se pretende hacer Como los dominios de las variables de la solución parcial sólo contienen un valor, si se viola una restricción alguno de estos dominios se reducirán y se producirá el backtracking Podemos redefinir el algoritmo BT como sigue: Constraint Programming 33

Algoritmo AC-3 para backtracking procedure AC3-BT(cv) Q <- {(Vi,Vcv) in arcs(g),i<cv}; consistent <- true; while not Q empty & consistent select and delete any arc (Vk,Vm) from Q; consistent <- not REVISE(Vk,Vm) Endwhile return consistent end AC3-BT Donde Vcv es la siguiente variable a asignar Constraint Programming 34

Algoritmo AC-3 para backtracking ejemplo Constraint Programming 35

Forward checking Es una técnica que intenta prevenir posibles conflictos futuros Persigue consistencia de arcos sobre variables que todavía no han sido instanciadas. Consistencia de arcos restrictiva: sólo comprueba consistencia de arco entre la variable actual y las futuras Se eliminan de los dominios de las variables futuras aquellos valores que entran en conflicto con la asignación que se pretende realizar Se produce un backtracking cuando un dominio futuro se vacía Es casi siempre mejor opción que la vuelta atrás cronológica Detecta inconsistencias antes permitiendo podar el árbol de búsqueda mucho más que con backtracking simple Constraint Programming 36

Algoritmo AC-3 para Forward checking procedure AC3-FC(cv) Q <- {(Vi,Vcv) in arcs(g),i>cv}; consistent <- true; while not Q empty & consistent select and delete any arc (Vk,Vm) from Q; if REVISE(Vk,Vm) then consistent <- not Dk empty endif endwhile return consistent end AC3-FC Constraint Programming 37

Algoritmo AC-3 para Forward checking: ejemplo Constraint Programming 38

Look Ahead Persigue consistencia de arcos entre la variable actual y las futuras (full) look ahead o MAC (maintaining arc consistency) Detecta conflictos entre variables futuras Poda más ramas del árbol de búsqueda El coste computacional cada vez que se realiza un asignación también es mayor que con forward checking Constraint Programming 39

Algoritmo AC-3 para Look Ahead procedure AC3-LA(cv) Q <- {(Vi,Vcv) in arcs(g),i>cv}; consistent <- true; while not Q empty & consistent select and delete any arc (Vk,Vm) from Q; if REVISE(Vk,Vm) then Q <- Q union {(Vi,Vk) such that (Vi,Vk) in arcs(g),i#k,i#m,i>cv} consistent <- not Dk empty Endif Endwhile return consistent end AC3-LA Constraint Programming 40

Comparación de técnicas de propagación Cuanta más propagación de restricciones más poda en el árbol de búsqueda El costo computacional total será mayor Obtener n-consistencia para el problema original podría eliminar completamente la necesidad de búsqueda Suele ser más costoso que el backtracking simple Para algunos problemas look-ahead puede ser más costoso que forward checking Constraint Programming 41

Ordenación de variables y valores Los algoritmos de búsqueda requieren especificar el orden en el que se instancian las variables y el orden en el que se les asignan valores. La elección del orden adecuado (de variables y valores) incide significativamente en la eficiencia de la satisfacción de restricciones Constraint Programming 42

Ordenación de variables Estático: se especifica antes de que comience la búsqueda Dinámico: la elección de la siguiente variable depende en cada momento del estado actual de la búsqueda. No es viable para todos los algoritmos de búsqueda (ej. Backtracking simple) Heurísticas Intentar primero donde sea más probable que falle (ej. primero la variable con menos alternativas) Intentar primero la variable que participe en más restricciones Elegir la variable con el mayor número de restricciones con las variables pasadas Constraint Programming 43

Ordenación de valores Es indiferente si se buscan todas las soluciones o no existe solución La ordenación ideal permitiría encontrar la primera solución sin backtracking Se suele aplicar el principio de las correctas primero Valores que maximizan el número de opciones disponibles Usar el count del AC-4 Valores que conducen a una solución más fácil Existen métodos para evaluar la dificultad de resolución de un CSP Usar conocimiento del dominio Constraint Programming 44

Por qué utilizar Constraint Programming? Cercano a los problemas reales (combinatorios) Todos utilizan restricciones para especificar las propiedades de los problemas Las restricciones de la vida real pueden ser descritas con naturalidad utilizando restricciones Carácter declarativo Se concentra en la descripción del problema más que en resolverlo Resolución de problemas cooperativa Estructura unificada para integrar varias técnicas de resolución Búsqueda simple y técnicas sofisticadas de propagación Semánticamente puro Lenguajes de programación claros y elegantes Bases en programación lógica Aplicaciones Existen múltiples aplicaciones reales Constraint Programming 45

Notas finales Restricciones Relaciones arbitrarias sobre variables del problema Expresan información local parcial de forma declarativa Tecnología Búsqueda combinada con propagación de restricciones Búsqueda local Es fácil especificar problemas combinatorios en términos de CSP.. Pero es más difícil diseñar modelos resolubles Constraint Programming 46