La programación de conjuntos de respuestas ( ASP ) es una forma de programación declarativa orientada a problemas de búsqueda difíciles (principalmente NP-difíciles ) . Se basa en la semántica de modelos estables (conjuntos de respuestas) de la programación lógica . En ASP, los problemas de búsqueda se reducen al cálculo de modelos estables, y se utilizan solucionadores de conjuntos de respuestas —programas para generar modelos estables— para realizar la búsqueda. El proceso computacional empleado en el diseño de muchos solucionadores de conjuntos de respuestas es una mejora del algoritmo DPLL y, en principio, siempre termina (a diferencia de la evaluación de consultas de Prolog , que puede conducir a un bucle infinito ).
En un sentido más general, ASP incluye todas las aplicaciones de conjuntos de respuestas a la representación del conocimiento y el razonamiento [ 1 ] [ 2 ] y el uso de la evaluación de consultas al estilo Prolog para resolver problemas que surgen en estas aplicaciones.
Historia
Un ejemplo temprano de programación de conjuntos de respuestas fue el método de planificación propuesto en 1997 por Dimopoulos, Nebel y Köhler. [ 3 ] [ 4 ] Su enfoque se basa en la relación entre planes y modelos estables. [ 5 ] En 1998, Soininen y Niemelä [ 6 ] aplicaron lo que ahora se conoce como programación de conjuntos de respuestas al problema de la configuración de productos . [ 4 ] En 1999, el término "programación de conjuntos de respuestas" apareció por primera vez en un libro, The Logic Programming Paradigm, como título de una colección de dos artículos. [ 4 ] El primero de estos artículos identificó el uso de solucionadores de conjuntos de respuestas para la búsqueda como un nuevo paradigma de programación . [ 7 ] Ese mismo año, Niemelä también propuso "programas lógicos con semántica de modelos estables" como un nuevo paradigma. [ 8 ]
Lenguaje de programación del conjunto de respuestas AnsProlog
Lparse es el nombre del programa que se creó originalmente como una herramienta de base (interfaz) para el solucionador de conjuntos de respuestas smodels . El lenguaje que acepta Lparse se conoce ahora comúnmente como AnsProlog, [ 9 ] abreviatura de Answer Set Programming in Logic (Programación de conjuntos de respuestas en lógica) . [ 10 ] Actualmente se utiliza de la misma manera en muchos otros solucionadores de conjuntos de respuestas, incluidos assat , clasp , cmodels , gNt , nomore++ y pbmodels . ( dlv es una excepción; la sintaxis de los programas ASP escritos para dlv es algo diferente).
Un programa AnsProlog consta de reglas de la forma
< cabeza > :- < cuerpo > .El símbolo :-("if") se elimina si <body>está vacío; dichas reglas se denominan hechos . El tipo más simple de reglas de Lparse son las reglas con restricciones .
Otro constructo útil incluido en este lenguaje es la elección . Por ejemplo, la regla de elección.
{ p , q , r }.dice: elige arbitrariamente cuál de los átomospara incluir en el modelo estable. El programa Lparse que contiene esta regla de elección y ninguna otra regla tiene 8 modelos estables: subconjuntos arbitrarios de. La definición de un modelo estable se generalizó a programas con reglas de elección. [ 11 ] Las reglas de elección también pueden tratarse como abreviaturas de fórmulas proposicionales bajo la semántica del modelo estable . [ 12 ] Por ejemplo, la regla de elección anterior puede verse como una abreviatura de la conjunción de tres fórmulas de " medio excluido ":
El lenguaje de Lparse también nos permite escribir reglas de elección "restringidas", como por ejemplo:
1 { p , q , r } 2.Esta regla dice: elige al menos 1 de los átomos, pero no más de 2. El significado de esta regla bajo la semántica del modelo estable está representado por la fórmula proposicional
Los límites de cardinalidad también se pueden usar en el cuerpo de una regla, por ejemplo:
:- 2 { p , q , r }.Agregar esta restricción a un programa Lparse elimina los modelos estables que contienen al menos 2 de los átomos.El significado de esta regla puede representarse mediante la fórmula proposicional.
Las variables (con mayúscula inicial, como en Prolog ) se utilizan en Lparse para abreviar conjuntos de reglas que siguen el mismo patrón, y también para abreviar conjuntos de átomos dentro de la misma regla. Por ejemplo, el programa Lparse
p ( a ). p ( b ). p ( c ) . q ( X ) :- p ( X ), X ! = a .tiene el mismo significado que
p ( a ). p ( b ). p ( c ). q ( b ). q ( c ).El programa
p ( a ). p ( b ). p ( c ). { q ( X ):- p ( X )} 2.es una abreviatura de
p ( a ). p ( b ). p ( c ). { q ( a ), q ( b ), q ( c )} 2.Un rango tiene la forma:
( inicio .. fin )donde inicio y fin son expresiones aritméticas de valor constante. Un rango es una notación abreviada que se utiliza principalmente para definir dominios numéricos de forma compatible. Por ejemplo, el hecho de que
a ( 1..3 ).es un atajo para
a ( 1 ). a ( 2 ). a ( 3 ).Los rangos también se pueden usar en cuerpos de reglas con la misma semántica.
Un literal condicional tiene la forma:
p ( X ) : q ( X )Si la extensión de qes {q(a1), q(a2), ..., q(aN)}, la condición anterior es semánticamente equivalente a escribir {p(a1), p(a2), ..., p(aN)}en lugar de la condición. Por ejemplo,
q ( 1..2 ). a :- 1 { p ( X ) : q ( X )}.es una abreviatura de
q ( 1 ). q ( 2 ). a :- 1 { p ( 1 ), p ( 2 )}.Generación de modelos estables
Para encontrar un modelo estable del programa Lparse almacenado en el archivo, ${filename}utilizamos el comando
% lparse ${ filename } | smodels La opción 0 indica a smodels que encuentre todos los modelos estables del programa. Por ejemplo, si el archivo testcontiene las reglas
1 { p , q , r } 2. s :- no p .Luego, el comando produce la salida.
% lparse test | smodels 0 Respuesta: 1 Modelo estable: qp Respuesta: 2 Modelo estable: p Respuesta: 3 Modelo estable: rp Respuesta: 4 Modelo estable: qs Respuesta: 5 Modelo estable: rs Respuesta: 6 Modelo estable: rqsEjemplos de programas ASP
Coloreado de gráficos
Un- coloración de un gráficoes una funciónde tal manera quepara cada par de vértices adyacentesNos gustaría utilizar ASP para encontrar un-coloración de un gráfico dado (o determinar que no existe).
Esto se puede lograr utilizando el siguiente programa Lparse:
c ( 1. . n ).1 { color ( X , I ) : c ( I )} 1 :- v ( X ).:- color ( X , I ), color ( Y , I ), e ( X , Y ), c ( I ).La línea 1 define los númerosser colores. Según la regla de elección en la Línea 2, un color únicodebe asignarse a cada vérticeLa restricción en la línea 3 prohíbe asignar el mismo color a los vértices.ysi hay una arista que los conecta.
Si combinamos este archivo con una definición de, como
v ( 1..100 ). % 1,...,100 son vértices e ( 1 , 55 ). % hay una arista de 1 a 55 . . .y ejecutar modelos s en él, con el valor numérico deespecificado en la línea de comandos, luego los átomos de la formaen la salida de smodels representará un-coloración de.
El programa de este ejemplo ilustra la organización de "generar y probar" que se encuentra a menudo en programas ASP sencillos. La regla de elección describe un conjunto de "soluciones potenciales", un superconjunto simple del conjunto de soluciones al problema de búsqueda dado. A continuación, se aplica una restricción que elimina todas las soluciones potenciales que no son aceptables. Sin embargo, el proceso de búsqueda empleado por smodels y otros solucionadores de conjuntos de respuestas no se basa en el método de ensayo y error .
Gran camarilla
Una camarilla en un grafo es un conjunto de vértices adyacentes por pares. El siguiente programa Lparse encuentra una camarilla de tamañoen un grafo dirigido dado, o determina que no existe:
n { en ( X ) : v ( X )}.:- en ( X ), en ( Y ), X ! = Y , no e ( X , Y ).Este es otro ejemplo de la organización de generación y prueba. La regla de elección en la Línea 1 "genera" todos los conjuntos que consisten envértices. La restricción en la línea 2 "elimina" los conjuntos que no son camarillas.
Ciclo hamiltoniano
Un ciclo hamiltoniano en un grafo dirigido es un ciclo que pasa por cada vértice del grafo exactamente una vez. El siguiente programa Lparse se puede usar para encontrar un ciclo hamiltoniano en un grafo dirigido dado, si existe; asumimos que 0 es uno de los vértices.
{ en ( X , Y )} :- e ( X , Y ).:- 2 { en ( X , Y ) : e ( X , Y )}, v ( X ).:- 2 { en ( X , Y ) : e ( X , Y )}, v ( Y ).r ( X ) :- en ( 0 , X ), v ( X ).r ( Y ) :- r ( X ), en ( X , Y ), e ( X , Y ).:- no r ( X ), v ( X ).La regla de elección en la Línea 1 "genera" todos los subconjuntos del conjunto de aristas. Las tres restricciones "eliminan" los subconjuntos que no son ciclos hamiltonianos. La última de ellas utiliza el predicado auxiliar.("es alcanzable desde 0") para prohibir los vértices que no satisfacen esta condición. Este predicado se define recursivamente en las líneas 6 y 7.
Este programa es un ejemplo de la organización más general de "generar, definir y probar": incluye la definición de un predicado auxiliar que nos ayuda a eliminar todas las posibles soluciones "malas".
Análisis de dependencias
En el procesamiento del lenguaje natural , el análisis sintáctico basado en dependencias puede formularse como un problema ASP. [ 13 ] El siguiente código analiza la oración en latín "Puella pulchra in villa linguam latinam discit", "la niña bonita está aprendiendo latín en la villa". El árbol sintáctico se expresa mediante predicados de arco que representan las dependencias entre las palabras de la oración. La estructura calculada es un árbol enraizado ordenado linealmente.
% ********** frase de entrada ********** palabra ( 1 , puella ). palabra ( 2 , pulchra ). palabra ( 3 , en ). palabra ( 4 , villa ). palabra ( 5 , linguam ). palabra ( 6 , latinam ). palabra ( 7 , discit ). % ********** léxico ********** 1 { nodo ( X , attr ( pulcher , a , fem , nom , sg )); nodo ( X , attr ( pulcher , a , fem , abl , sg )) } 1 :- palabra ( X , pulchra ). nodo ( X , atributo ( latinus , a , fem , acc , sg )) : - palabra ( X , latinam ). 1 { nodo ( X , atributo ( puella , n , fem , nom , sg )); nodo ( X , atributo ( puella , n , fem , abl , sg )) } 1 :- palabra ( X , puella ). 1 { nodo ( X , atributo ( villa , n , fem , nom , sg )); nodo ( X , atributo ( villa , n , fem , abl , sg )) } 1 :- palabra ( X, villa ). nodo ( X , attr ( linguam , n , fem , acc , sg )) :- palabra ( X , linguam ). nodo ( X , attr ( discere , v , pres , 3 , sg )) :- palabra ( X , discit ). nodo ( X , attr ( in , p )) :- palabra ( X , in ). % ********** reglas sintácticas ********** 0 { arc ( X , Y , subj ) } 1 :- nodo ( X , attr ( _ , v , _ , 3 , sg )), nodo ( Y , attr ( _ , n , _ , nom , sg )). 0 { arco ( X , Y , dobj ) } 1 :- nodo ( X , atributo ( _ , v , _ , 3 , sg )), nodo ( Y , atributo ( _ , n , _ , acc , sg )). 0 { arco ( X , Y , atributo ) } 1 :- nodo ( X , atributo ( _ , n , Género , Caso , Número )), nodo ( Y , atributo ( _ , a , Género , Caso, Número )). 0 { arc ( X , Y , prep ) } 1 :- nodo ( X , attr ( _ , p )), nodo ( Y , attr ( _ , n , _ , abl , _ )), X < Y . 0 { arc ( X , Y , adv ) } 1 :- nodo ( X , attr ( _ , v , _ , _ , _ )), nodo ( Y , attr ( _ , p )), no hoja ( Y ). % ********** garantizando la naturaleza arbórea del grafo ********** 1 { raíz ( X ) : nodo ( X , _ ) } 1. :- arc ( X , Z , _ ), arc ( Y , Z , _ ), X ! = Y . :- arco ( X , Y , L1 ), arco ( X , Y , L2 ), L1 ! = L2 . ruta ( X , Y ) :- arco ( X , Y , _ ). ruta ( X , Z ) :- arco ( X , Y , _ ), ruta ( Y , Z ). :- ruta ( X , X ). :- raíz ( X ), nodo ( Y, _ ), X ! = Y , no ruta ( X , Y ). hoja ( X ) :- nodo ( X , _ ), no arco ( X , _ , _ ).Estandarización del lenguaje y concurso ASP
El grupo de trabajo de estandarización de ASP elaboró una especificación de lenguaje estándar, denominada ASP-Core-2, [ 14 ] hacia la cual convergen los sistemas ASP recientes. ASP-Core-2 es el lenguaje de referencia para la Competencia de Programación de Conjuntos de Respuestas, en la que los solucionadores ASP se evalúan periódicamente con varios problemas de referencia.
Comparación de implementaciones
Los primeros sistemas, como smodels, utilizaban el retroceso para encontrar soluciones. A medida que la teoría y la práctica de los solucionadores SAT booleanos evolucionaron, se desarrollaron varios solucionadores ASP basados en solucionadores SAT, como ASSAT y Cmodels. Estos convertían fórmulas ASP en proposiciones SAT, aplicaban el solucionador SAT y luego convertían las soluciones de nuevo a formato ASP. Los sistemas más recientes, como Clasp, emplean un enfoque híbrido, utilizando algoritmos basados en conflictos inspirados en SAT, sin convertir completamente a un formato de lógica booleana. Estos enfoques permiten mejoras significativas en el rendimiento, a menudo de un orden de magnitud, con respecto a los algoritmos de retroceso anteriores.
El proyecto Potassco actúa como un paraguas para muchos de los sistemas que se mencionan a continuación, incluidos clasp , sistemas de puesta en tierra ( gringo ), sistemas incrementales ( iclingo ), solucionadores de restricciones ( clingcon ), compiladores de lenguaje de acción a ASP ( coala ), implementaciones distribuidas de interfaz de paso de mensajes ( claspar ) y muchos otros.
La mayoría de los sistemas admiten variables, pero solo indirectamente, al forzar la vinculación, mediante el uso de un sistema de vinculación como Lparse o gringo como interfaz. La necesidad de vinculación puede provocar una explosión combinatoria de cláusulas; por lo tanto, los sistemas que realizan la vinculación sobre la marcha podrían tener una ventaja. [ 15 ]
Las implementaciones de programación de conjuntos de respuestas basadas en consultas, como el sistema Galliwasp [ 16 ] y s(CASP) [ 17 ], evitan por completo la puesta en tierra mediante el uso de una combinación de resolución y coinducción .
Véase también
Referencias
- ↑ Baral, Chitta (2003). Representación del conocimiento, razonamiento y resolución declarativa de problemas . Cambridge University Press. ISBN 978-0-521-81802-5.
- ↑ Gelfond, Michael (2008). «Answer sets» . En van Harmelen, Frank; Lifschitz, Vladimir; Porter, Bruce (eds.). Handbook of Knowledge Representation . Elsevier. pp. 285–316 . ISBN 978-0-08-055702-1.Como PDF archivado el 3 de marzo de 2016 en Wayback Machine.
- ↑ Dimopoulos, Y.; Nebel, B .; Köhler, J. (1997). "Codificación de problemas de planificación en programas lógicos no monótonos". En Steel, Sam; Alami, Rachid (eds.). Avances recientes en planificación de IA: 4.ª Conferencia Europea sobre Planificación, ECP'97, Toulouse, Francia, 24-26 de septiembre de 1997, Actas . Lecture Notes in Computer Science: Lecture Notes in Artificial Intelligence. Vol. 1348. Springer. pp. 273-285 . ISBN 978-3-540-63912-1.como posdata
- 1 2 3 Lifschitz, Vladimir (13 de julio de 2008). "¿Qué es la programación de conjuntos de respuestas?" (PDF) . Actas de la 23.ª Conferencia Nacional sobre Inteligencia Artificial . 3. AAAI Press: 1594–1597 .
- ↑ Subrahmanian, VS; Zaniolo, C. (1995). "Relacionando modelos estables y dominios de planificación de IA" . En Sterling, Leon (ed.). Programación lógica: Actas de la Duodécima Conferencia Internacional sobre Programación Lógica . MIT Press. pp. 233–247 . ISBN 978-0-262-69177-2.como posdata
- ↑ Soininen, T.; Niemelä, I. (1998), Formalización del conocimiento de configuración mediante reglas con opciones (Postscript) , Laboratorio de Ciencias del Procesamiento de la Información, Universidad Tecnológica de Helsinki
- ↑ Marek, V.; Truszczyński, M. (20 de mayo de 1999). «Modelos estables y un paradigma alternativo de programación lógica». En Apt, Krzysztof R. (ed.). El paradigma de la programación lógica: una perspectiva de 25 años (PDF) . Springer. pp. 169–181 . arXiv : cs/9809032 . ISBN 978-3-540-65463-6.
- ↑ Niemelä, I. (noviembre de 1999). "Programas lógicos con semántica de modelo estable como paradigma de programación con restricciones" (Postscript, comprimido con gzip) . Annals of Mathematics and Artificial Intelligence . 25 (3/4): 241–273 . doi : 10.1023/A:1018930122475 . S2CID 14465318 .
- ↑ Crick, Tom (2009). Superoptimización: Generación de código demostrablemente óptimo mediante programación de conjuntos de respuestas (PDF) (Ph.D.). Universidad de Bath. Expediente 20352. Archivado del original (PDF) el 4 de marzo de 2016. Consultado el 27 de mayo de 2011 .
- ↑ Rogelio Dávila. «AnsProlog, una visión general» (PowerPoint) .
- ↑ Niemelä, I.; Simons, P.; Soinenen, T. (2000). "Semántica de modelos estables de reglas de restricción de peso" . En Gelfond, Michael; Leone, Nicole; Pfeifer, Gerald (eds.). Programación lógica y razonamiento no monótono: 5.ª Conferencia Internacional, LPNMR '99, El Paso, Texas, EE. UU., 2-4 de diciembre de 1999. Actas . Lecture Notes in Computer Science: Lecture Notes in Artificial Intelligence. Vol. 1730. Springer. pp. 317-331 . ISBN 978-3-540-66749-0.como posdata
- ↑ Ferraris, P.; Lifschitz, V. (enero de 2005). "Restricciones de peso como expresiones anidadas". Theory and Practice of Logic Programming . 5 ( 1–2 ): 45–74 . arXiv : cs/0312045 . doi : 10.1017/S1471068403001923 . S2CID 5051610 . como posdata
- ↑ "Análisis de dependencias" . Consultado el 15 de abril de 2015 .
{{cite web}}: CS1 maint: servicio de archivado obsoleto ( enlace ) - ↑ "Especificación del lenguaje de entrada de ASP-Core-2" (PDF) . Consultado el 14 de mayo de 2018 .
- ↑ Lefèvre, Claire; Béatrix, Christopher; Stéphan, Igor; Garcia, Laurent (mayo de 2017). "ASPeRiX, un enfoque de encadenamiento hacia adelante de primer orden para el cálculo de conjuntos de respuestas*" . Theory and Practice of Logic Programming . 17 (3): 266– 310. arXiv : 1503.07717 . doi : 10.1017/S1471068416000569 . ISSN 1471-0684 . S2CID 2371655 .
- ↑ Marple, Kyle.; Gupta, Gopal. (2012). "Galliwasp: Un solucionador de conjuntos de respuestas orientado a objetivos". En Albert, Elvira (ed.). Síntesis y transformación de programas basados en lógica, 22.º Simposio Internacional, LOPSTR 2012, Lovaina, Bélgica, 18-20 de septiembre de 2012, Artículos seleccionados revisados . Springer. págs. 122–136 .
- ↑ Arias, J.; Carro, M.; Salazar, E.; Marple, K.; Gupta, G. (2018). "Programación de conjuntos de respuestas con restricciones sin fundamentación" . Teoría y práctica de la programación lógica . 18 ( 3–4 ): 337–354 . arXiv : 1804.11162 . doi : 10.1017/S1471068418000285 . S2CID 13754645 .
- 1 2 "Página de la empresa DLV System" . DLVSYSTEM srl . Consultado el 16 de noviembre de 2011 .
Enlaces externos
- Especificación del lenguaje de entrada de ASP-Core-2 2.03c
- Primera competición de sistemas ASP
- Segunda competición ASP
- Tercera competición ASP
- Cuarta competición ASP
- Ornitorrinco
- Diversos solucionadores de conjuntos de respuestas empaquetados para Debian/Ubuntu
- Solucionador de conjuntos de respuestas Clasp
- Programación lógica