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

Aún no hay trackbacks