Les fonctionnalités quasi magiques du langage de programmation Picat
- Picat est un langage de recherche qui tente de combiner la programmation logique, la programmation impérative et la résolution de contraintes.
- Le module
planner de Picat est l’un des modèles de programmation les plus intéressants.
Brève explication de la programmation logique
- En programmation impérative et fonctionnelle, on écrit des algorithmes qui prennent des entrées et produisent des sorties.
- En programmation logique et en résolution de contraintes, on fournit une série d’équations et on cherche une affectation qui satisfait ces relations.
Définition du problème
- Il faut résoudre un problème de placement de marqueur sur une grille, avec un déplacement du point de départ (l’origine) vers une coordonnée cible.
- À chaque étape, on peut se déplacer d’une case dans l’un des quatre sens cardinales, sans dépasser les limites de la grille.
- Le programme réussit lorsque le marqueur se trouve sur la coordonnée cible.
Première implémentation
- Il faut fournir l’état initial
Start, une suite de fonctions action représentant les transitions d’état, et la fonction final(S) qui détermine les états finaux.
- En appelant
best_plan(Start, Plan), la séquence d’étapes la plus courte nécessaire pour atteindre un état final est assignée à Plan.
Ajouter plusieurs objectifs
- Le planner doit atteindre tous les objectifs dans l’ordre.
- On ajoute une nouvelle fonction
action qui supprime de la file l’objectif dès que celui-ci est atteint.
Minimiser le coût
- Atteindre les objectifs dans l’ordre ne signifie pas forcément un chemin total minimal.
- Si l’on veut obtenir le plus court chemin global sans contrainte d’ordre sur les objectifs, on peut modifier
action pour permettre au planner de choisir le prochain objectif afin de minimiser la longueur totale du chemin.
Variantes supplémentaires
- Picat prend en charge de nombreuses variantes de planification.
best_plan(S, Limit, Plan) limite le coût maximum à Limit.
sequence(P, Action) limite les actions possibles en fonction de la partie actuelle du plan.
Utilisation de Picat
- Picat est un langage de recherche et manque de certaines commodités, comme une bonne documentation ou des messages d’erreur clairs.
- Picat est plus utile en tant que langage « outil » pour apprendre à résoudre certains problèmes de calcul.
Annexe : autres langages de planification
- La « planification » a été développée pour la robotique et l’IA, mais elle est surtout utilisée dans l’IA des jeux vidéo comme GOAP (Goal-Oriented Action Planning).
- PDDL est un langage de description de planification utilisé en entrée d’un planner autonome.
Opinion de GN⁺
- Innovation de modèle de programmation : le module
planner de Picat ajoute une nouvelle dimension à la programmation, notamment pour les problèmes complexes de recherche de chemin.
- Valeur pédagogique : Picat est important du point de vue pédagogique en programmation; il peut aider à apprendre les concepts de programmation logique et de résolution de contraintes.
- Résolution de problèmes spécifiques : Picat a de la valeur comme langage outil pour résoudre certains problèmes de calcul, offrant une approche nouvelle pour des problèmes difficiles à traiter avec un langage de programmation général.
1 commentaires
Commentaires Hacker News
Cas d'utilisation concrets du mode de planification de Picat
Informations sur les ressources et exemples Picat
Recommandations de Prolog et de MiniZinc
Commentaire lié à l'entretien technique Firebase
Comparaison entre système de types et langages de programmation
Mention du GOAP (Goal-Oriented Action Planning)
Évaluation des capacités de planification de Picat
Le rêve de donner l'état final à l'ordinateur pour le laisser trouver la solution
Remarque supplémentaire sur la syntaxe proche de Prolog
true.comme solution plus élégante quecomma firstCe résumé reflète les opinions variées de plusieurs personnes et transmet chaque point de vue de manière neutre. Les éléments techniques liés aux langages de programmation y sont expliqués de façon concise pour un ingénieur logiciel débutant.