2 puntos por GN⁺ 2024-02-22 | 1 comentarios | Compartir por WhatsApp

Las características mágicas del lenguaje de programación Picat

  • Picat es un lenguaje de investigación que intenta unir la programación lógica, la programación imperativa y la resolución de restricciones.
  • El módulo planner de Picat es uno de los modelos de programación más interesantes.

Explicación breve de la programación lógica

  • En programación imperativa y funcional, se escriben algoritmos que toman una entrada y generan una salida.
  • En programación lógica y resolución de restricciones, se proporcionan un conjunto de ecuaciones y se busca una asignación que satisfaga esas relaciones.

Definición del problema

  • Se plantea un problema de mover un marcador en una cuadrícula desde un punto inicial (el origen) hasta una coordenada objetivo.
  • En cada paso se puede mover una celda en las cuatro direcciones, y no se puede salir de los límites de la cuadrícula.
  • El programa tiene éxito cuando el marcador está en la coordenada objetivo.

Primera implementación

  • Debes proporcionar un estado inicial Start, una serie de funciones action que representen las transiciones de estado y una función final(S) que determine el estado final.
  • Al llamar a best_plan(Start, Plan), se asigna a Plan la secuencia más corta de pasos necesaria para llegar a un estado final.

Agregar múltiples objetivos

  • El planificador debe alcanzar todos los objetivos en orden.
  • Se añade una nueva función action para eliminar un objetivo de la cola al alcanzarlo.

Minimización de costos

  • Visitar los objetivos en orden no siempre significa la ruta total más corta.
  • Si quieres encontrar la ruta más corta sin importar el orden de los objetivos, modifica action para que el planificador pueda elegir el siguiente objetivo y así minimizar la longitud total del camino.

Otras variantes

  • Picat admite muchas variantes de planificación.
  • best_plan(S, Limit, Plan) limita el costo máximo a Limit.
  • sequence(P, Action) limita las acciones posibles según el plan parcial actual.

Uso de Picat

  • Picat es un lenguaje de investigación y carece de comodidades como documentación sólida o mensajes de error claros.
  • Picat es más útil como lenguaje "herramienta" para aprender a resolver problemas de computación específicos.

Apéndice: otros lenguajes de planificación

  • La "planificación" se desarrolló para robótica e IA, pero se usa principalmente en la IA de videojuegos como "Goal-Oriented Action Planning" (GOAP).
  • PDDL es un lenguaje de descripción de planificación usado como entrada por planificadores autónomos.

Opinión de GN⁺

  • Innovación en el modelo de programación: El módulo planner de Picat añade una nueva dimensión a la programación y es especialmente potente para resolver problemas complejos de búsqueda de rutas.
  • Valor educativo: Picat es importante desde el punto de vista educativo de los lenguajes de programación; puede ayudar a aprender conceptos de programación lógica y resolución de restricciones.
  • Resolución de problemas específicos: Picat tiene valor como lenguaje instrumental para resolver problemas computacionales concretos y ofrece un enfoque nuevo para tratar problemas difíciles con lenguajes de programación convencionales.

1 comentarios

 
GN⁺ 2024-02-22
Comentario de Hacker News
  • Casos de aplicación real del modo de planificación de Picat en el trabajo

    • Desarrollo de un prototipo de sistema para mantenimiento de equipos
    • Se le indicó al sistema qué se quería lograr, no cómo hacerlo
    • Se generó un plan óptimo con Picat, pero surgieron problemas al escalar a gran escala
    • Como la planificación es EXPTIME, la escalabilidad tenía límites esperados
    • Se usaron heurísticas, un clasificador Naive Bayes y restricciones de simetría, pero aun así se necesitó mucho manejo
    • En los dominios clásicos de GOFAI, aún hay un estado de "invierno de la IA"
  • Información de recursos y ejemplos de Picat

    • Material y ejemplos de Picat desde el sitio web de Hakan Kjellerstrand, miembro activo de la comunidad de programación por restricciones
  • Recomendaciones de Prolog y MiniZinc

    • Prolog es un lenguaje maduro y fácil de entender que ofrece capacidades de resolución de restricciones
    • MiniZinc es una interfaz para acceder a solver especializados para distintos propósitos
    • Para exprimir el rendimiento de Prolog se necesita una comprensión bastante profunda
    • Se recomienda considerar si lo escrito en Picat puede trasladarse fácilmente a otro lenguaje
  • Comentario relacionado con entrevistas técnicas de Firebase

    • La entrevista técnica de Firebase sería más fácil con herramientas como Picat
    • Alegría por ver a Predrag apareciendo como revisor
  • Comparación entre sistema de tipos y lenguajes de programación

    • Similar al sistema de tipos de TypeScript, pero hay que resolverlo directamente uno mismo
    • TypeScript no es suficientemente poderoso para expresar restricciones
    • Se enfatizó la simplicidad y facilidad del estilo de programación de planificación
  • Mención de GOAP (Goal-Oriented Action Planning)

    • GOAP usado en la IA enemiga de F.E.A.R., que hizo la experiencia más divertida
    • Se valoró el paper de Jeff Orkin sobre GOAP como fácil de leer y entretenido
  • Evaluación de las funciones de planificación de Picat

    • Picat es similar a Prolog, pero con capacidades de planificación añadidas
    • Aunque el planner permite resolver problemas de forma sencilla, el rendimiento debe compararse con programación imperativa
  • El sueño de decirle al ordenador el estado final y dejar que lo resuelva

    • Se genera código y transiciones de estado usando el algoritmo A*
    • Falta de experiencia con comunidades de planificación o solvers, pero experimentan con ortools
    • Se ve la programación como algo parecido a logística, y se la compara con un "sliding puzzle"
  • Comentario adicional sobre la sintaxis similar a Prolog

    • Se usa una sintaxis parecida a Prolog y se propone terminar con true. en lugar de comma first como una solución más elegante

Este resumen refleja las opiniones de varias personas y transmite de forma neutral cada perspectiva. Los contenidos técnicos relacionados con lenguajes de programación se explican de forma concisa para que sean comprensibles para un ingeniero de software junior.