Aplicación básica en ASP – Clasp & Gringo parte 2

Para seguir en la diversión que los ASP nos dan, en este post explicaré un ejemplo básico para adentrarnos mas en el paradigma de el manejo de conflictos en base a negaciones (Constraints). En caso de no contar con los conceptos básicos en ASPs les dejo un artículo en donde explican una brece introducción a los ASP (páginas 85-93) y el uso que le veo a los ASP en la música.

Existen dos archivos para este ejemplo y así poder encontrar al menos un modelo estable para este problema y ambos archivos son de extensión “.lp”. El primer archivo se llama “bird.lp” y contiene lo siguiente:

bird(tux).     penguin(tux).
bird(tweety).  chicken(tweety).

Este es un archivo de hechos (facts) en donde quieren decir lo siguiente: tanto “tux” como “tweety” son de de tipo pájaros (bird), pero “tux” es un pingüino denotado  como “penguin(tux)” y “tweety” es un pollo “chicken(tweety)”. Todas las sentencias u oraciones (statements) deben terminar con un punto (.) es por ello que da lo mismo colocar el documento de la siguiente manera:
bird(tux).
penguin(tux).
bird(tweety).
chicken(tweety).

El otro archivo es el que contiene las reglas del juego a seguir y lo llamamos “fly.lp”. Tenemos tres instrucciones que nos ayudarán a resolver el problema y obtener para este caso un modelo estable:
-flies(X) :- penguin(X).
flies(X) :- bird(X), not -flies(X).
-flies(X) :- bird(X), not  flies(X).

La manera más fácil de interpretar este “código” es leyéndolo línea por línea de derecha a izquierda. Empezamos con la primera línea en donde dice “penguin(X)” que quiere decir que un pingüino equis (X es la variable y siempre se denotan con mayúsculas) implica (“:-” es equivalente a la flecha implicando algo -> ) que NO vuela (“-flies(X)”). El guión implica que una negación y es equivalente a decir “-flies(X)” que “neg_flies(X)”.
La segunda línea quiere decir que si es un pájaro “bird(X)” y (el símbolo lógico AND representado por una coma) no está explícito que NO vuela (not – flies(X)) , implica que en efecto vuela. La tercera línea es lo opuesto a la segunda y nos sirve para validar ese caso en donde si es un pájaro y NO vuela (not flies(X)) entonces el resultado es que no va a volar (-flies(X)).
De nueva cuenta cada enunciado termina con un punto y los comentarios se denotan con el caracter del porcentaje (%) es decir, todo lo que se escriba seguido del % no es tomado en cuenta por Clasp (Solver) ni Gringo (Grounder).
Para ejecutar dichos archivos abrimos una línea de comandos (cmd) y nos vamos al directorio en donde estén guardados nuestros archivos “.lp” y escribimos “gringo bird.lp fly.lp | clasp -n 0″. Esta instrucción quiere decir que usamos Gringo como Grounder para los archivos bird y fly ambos con extensión “.lp” y que decidimos que el Solver sea Clasp y que nos de todos los modelos posibles. En caso de solo querer uno omitimos “-n 0″ de la instrucción anterior. Para este último caso el modelo estable es el que muestra la imagen siguiente:
El resultado es que “tux” es un pingüino y “tweety” es un pollo y ambos son pájaros, “tux” no vuela y “tweety” si.
Espero que les haya gustado y que les interese más los ASPs y que sigan usando Clasp y Gringo. Para más información pueden visitar su página oficial como referencias.
Advertisement
  1. Aún no hay trackbacks

Deja un comentario

Fill in your details below or click an icon to log in:

Logo de WordPress.com

You are commenting using your WordPress.com account. Log Out / Cambiar )

Twitter picture

You are commenting using your Twitter account. Log Out / Cambiar )

Facebook photo

You are commenting using your Facebook account. Log Out / Cambiar )

Connecting to %s

Seguir

Get every new post delivered to your Inbox.