Advertisement
Bienvenido a Squishdot Reportes Anuncios Debian Ciencia Linux
 principal
 nivel superior
 enviar artículo
 buscar
 administrar
 acerca de ...
 rdf
 rss
 main


Parser de CAML ... la historia continua
Programación Posted by David Suarez on Wednesday September 28, @01:56AM el 2005
from the Santos reptiles Guido! dept.

Para los que no lo sepan (o no lo recuerden), estoy trabajando en un intérprete programado en Python de CAML (cellular automata modelling language). A continuación los avances más recientes ...


La última versión "estable" del parser ya era capaz de representar e interpretar las reglas a través de una estructura jerárquica y de evaluación recursiva. Las principales ventajas de tener este tipo de estructura, a pesar de la lentitud que implica son las siguientes:

  • La estructura se puede modificar en tiempo de ejecución.
  • Para cada cambio pueden evaluarse las reglas para verificar que no generen errores.
  • Esto permitiría utilizar técnicas de programación evolutiva para obtener algoritmos que cumplan con ciertas restricciones definidas y sean óptimos.

Los cambios más recientes agregan la posiblidad de transformar automáticamente la estructura jerárquica en código de Python que puede ser compilado y evaluado en tiempo de ejecución, acelerando la evaluación de un algoritmo particular. En teoría esta capacidad podría extenderse para abarcar otros lenguajes, ¿C, Java?

Si bien el código generado no es muy legible, debe funcionar. A continuación dos ejemplos del código generado:

Sierpinsky:
reduce(operator.and_, [reduce(operator.and_, [reduce(operator.or_, [cmp(2.000000,sum([grid.get(map(operator.add, address, (1, 0, 0))), grid.get(map(operator.add, address, (0, 0, 0))), grid.get(map(operator.add, address, (-1, 0, 0)))])) == 0, cmp(1.000000,sum([grid.get(map(operator.add, address, (1, 0, 0))), grid.get(map(operator.add, address, (0, 0, 0))), grid.get(map(operator.add, address, (-1, 0, 0)))])) == 0])])]) and 1.000000 or 0.000000

Game of life:
reduce(operator.and_, [reduce(operator.and_, [reduce(operator.or_, [cmp(3.000000,sum([grid.get(map(operator.add, address, (1, 1, 0))), grid.get(map(operator.add, address, (0, 1, 0))), grid.get(map(operator.add, address, (-1, 1, 0))), grid.get(map(operator.add, address, (1, 0, 0))), grid.get(map(operator.add, address, (-1, 0, 0))), grid.get(map(operator.add, address, (1, -1, 0))), grid.get(map(operator.add, address, (0, -1, 0))), grid.get(map(operator.add, address, (-1, -1, 0)))])) == 0, cmp(2.000000,sum([grid.get(map(operator.add, address, (1, 1, 0))), grid.get(map(operator.add, address, (0, 1, 0))), grid.get(map(operator.add, address, (-1, 1, 0))), grid.get(map(operator.add, address, (1, 0, 0))), grid.get(map(operator.add, address, (-1, 0, 0))), grid.get(map(operator.add, address, (1, -1, 0))), grid.get(map(operator.add, address, (0, -1, 0))), grid.get(map(operator.add, address, (-1, -1, 0)))])) == 0]), cmp(1.000000,grid.get(address)) == 0])]) and 1.000000 or 0.000000

¿Qué falta?, pues varias cosas:

  • Implementar el elemento Pattern, que está talachudo, y que no parece muy adecuado pensando en trabajar con autómatas de más de dos dimensiones.
  • Agregar validación para checar que la modificación de la estructura cumpla con las especificaciones.
  • Integrar algún tipo de rejilla(grid), ya sea el de CAGE, el de Birdcage o algún otro.
  • Implementar la construcción del mapa a partir de las definición de topología formulada a partir de la propuesta de Vian.
  • Plantearle al autor de CAML algunas mejoras al lenguaje.
  • Pruebas extensivas.
  • Etc.
  • Para checar el código:
    cvs -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/ouroborus login
    cvs -z3 -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/ouroborus co -P PyCAML

    SE LES CONVOCA A TODOS A UNA REUNION DE TRABAJO CON LA MTRA. MARCELA SANTILLÁN EL VIERNES 30 DE SEPTIEMBRE A LAS 18:30 HORAS EN LA RECTORIA | Una razon mas para cambiar a Linux  >

     

    Related Links
  • Articles on Programación
  • Also by David Suarez
  • Contact author
  • The Fine Print: The following comments are owned by whoever posted them.
    ( Reply )

    Re: Parser de CAML ... la historia continua
    by jergas on Thursday September 29, @08:15AM
    Hola david, me parece muy bien, estoy bastante impresionado de que tengas codigo que escupe python. Lo de evolucionar los algoritmos me parece bastante impresionante tambien, mas impresionante en realidad, pero no esta implementado.
    Ahora, como abogado del diablo, la pregunta que mas me interesa hacer, y por tanto la unica que hare por ahora: que tan cerca estamos a pegar esto con lo de panx o vian? Despues de todo, esa era la motivacion para usar XML, construir el MonDem.
    Panx, nos debes tu opinion sobre este reporte y sobre el ultimo de Vian.
    [ Reply to this ]
    • Re: Parser de CAML ... la historia continua
      by David Suarez on Thursday September 29, @12:50PM
      Hola Edgar, pues te diré que me decepciona mucho, aunque no me sorprende, la forma en que valoras la contribución de estos avances al proyecto (obviamente para mí conlleva mucho más que serialización).
      En fin, sobre tu pregunta de qué tan cerca estamos de unir lo que hice con TODO lo demás, pues bastante cerca. Te adjunto un ejemplo de cómo modificar la clase SynchronousAutomaton de CAGE para usar el parser de CAML.
      Has de notar que partes de CAGE se tornan obsoletas al tener una forma dinámica de construir las reglas.


      Click to download attachment SynchronousAutomaton.py
      1KB (1221 bytes)

      [ Reply to this ]
      • Re: Parser de CAML ... la historia continua
        by jergas on Monday October 03, @04:11AM
        hola david,
        estas equivocado, y no te sientas conmigo. que decidi fijarme en eso no significa que es lo unico que valoro, lo primero que hice en el post fue decir que me parece padre e interesante.
        sin embargo, habras notado, en la junta, lo urgente que es tener algo que mostrar. por eso tenia que preguntar eso. por eso voy a tener que insistir cada vez mas hasta que tengamos un prototipo.
        en fin, luego hablamos mas en persona, pero insisto: me parece muy interesante lo que estas haciendo, pero para que sea mas que un interes pasajero, es mi trabajo asegurarme que sea parte de un proyecto existente y funcional.
        saludos,
        edgar
        [ Reply to this ]

     
    The Fine Print: The following comments are owned by whoever posted them.
    ( Reply )

    Powered by Zope  Squishdot Powered
      "Any system that depends on reliability is unreliable." -- Nogg's Postulate
    All trademarks and copyrights on this page are owned by their respective companies. Comments are owned by the Poster. The Rest ©1999 Butch Landingin.
    [ home | post article | search | admin ]