# Planification (intelligence artificielle)

En intelligence artificielle, la planification automatique (automated planning en anglais) ou plus simplement planification, vise à développer des algorithmes pour produire des plans typiquement pour l'exécution par un robot ou tout autre agent. Les logiciels qui incorporent ces algorithmes s'appellent des planificateurs. La difficulté du problème de planification dépend des hypothèses de simplification qu'on tient pour acquises, par exemple un temps atomique, un temps déterministe, une observabilité complète, etc. La compétition IPC (international planning competition) a lieu tous les ans durant le congrès ICAPS (International Conference on Planning and Scheduling).

## Principe

Un planificateur typique manipule trois entrées décrites dans un langage formel (tel que STRIPS ou PDDL) qui utilise des prédicats logiques :
* une description de l'état initial d'un monde,
* une description d'un but à atteindre et
* un ensemble d'actions possibles (parfois appelés opérateurs).
Chaque action est spécifiée par des préconditions qui doivent être satisfaites dans l'état actuel pour qu'elle puisse être appliquée, et des postconditions (effets sur l'état actuel).

### Description de l'exemple
## Applications

Un logiciel informatique BRIDGE BARON , utilisant un planificateur, remporte la compétition Baron Barclay World Bridge Computer Challenge, une compétition internationale gérée par le American Contract Bridge League, en juillet 1997. Ce logiciel s'appuyait sur de la planification hiérarchique de tâches.
En 2015, la planification a été utilisée pour construire des programmes qui jouent automatiquement aux jeux Atari. Le système SHPE basé sur de la planification dite hiérarchique permet de faire de la planification pour des jeux vidéo, en particulier des jeux de tir tactique (FPS pour first-person shooter ; ils ont des benchmarks appelés SimpleFPS pour ce type de jeu). D'autres jeux comme Transformers: Fall of Cybertron ou FEAR utilisent de la planification.
Le téléscope spatial Hubble utilise le planificateur Spike, développé par le Space Telescope Science Institute.

## Planification classique

La planification classique repose sur deux hypothèses :
* le déterminisme des actions. Par exemple, l'action "poser un cube sur la table" est déterministe. En l'exécutant, on passe d'un état à un autre. Au contraire, "jeter un dé" est non-déterministe car il y a 6 valeurs possibles. L'action "jeter un dé" ne rentre donc pas dans le cadre de la planification classique.
* l'observation parfaite. L'agent (le robot, le programme, etc.) connaît complétement l'état du monde.
En planification classique, il s'agit de chercher une séquence d'actions (par exemple, "prendre une casserole", "mettre de l'eau", "mettre des pâtes", "allumer le feu", "attendre", "éteindre le feu"). L'algorithme A* est un exemple typique d'algorithme de planification classique, souvent employé dans les cours d'introduction pour sa simplicité. Voici quelques techniques algorithmiques utilisées dans les planificateurs classiques :
* la recherche avant dans un espace d'états : algorithme heuristic search planning (HSP), algorithme Fast-Forward (FF),
* la recherche arrière dans un espace d'états,
* la recherche avant dans un espace de plans, Graphplan (en)
* la relaxation d'un problème de planification : on calcule un problème relaxé, pour lequel il est plus simple de savoir s'il existe un plan, qui aide à résoudre le problème initial
* la transformation vers un problème de satisfiabilité d'une formule de la logique propositionnelle.
Bylander a démontré en 1994 que la planification classique est PSPACE-complète.

### Description formelle

Un problème de planification classique est défini généralement comme un problème de recherche dans un graphe. Chaque état qui décrit l'environnement dans lequel le planificateur cherche un plan est représenté par un nœud dans le graphe et chaque arête entre deux nœuds représente une action qui fait la transition d’un état à un autre.
Formellement un problème de planification classique est défini par une tuple $\left\langle S,A,T,s_{0},G\right\rangle$ où
* $S$ est un ensemble d'états,
* $A$ est un ensemble d'actions,
* $T$ est une fonction de transition qui à un état et une action associe un état t.q. $T:S\times A\rightarrow S$,
* $s_{0}\in S$ est l'état initial,
* $G\subseteq S$ est l'ensemble d'états but.

## Autres types de planification

Des extensions généralisent la planification classique, trop restrictives dans certaines applications.

### Planification contingente

On parle de planification contingente (contingent planning) où l'environnement est observable grâce à des senseurs, qui peuvent être fautifs. Pour un problème de planification contingente, un plan n'est plus une séquence d'actions mais un arbre de décision car chaque étape du plan est représentée par un ensemble d'états plutôt qu'un seul état parfaitement observable comme dans le cas de la planification classique. Les actions choisies dépendent de l'état du système. Par exemple, s'il pleut, l'agent choisit de prendre le parapluie, et sinon, il peut décider de ne pas le prendre.
Rintanen utilise la terminologie planification conditionnelle (conditionnal planning, comme mentionné par Rintanen dans son article de 2004, p. 1). Mikael L. Littman démontre en 1998 que si on ajoute du branchement (planification contingente), le problème de planification devient EXPTIME-complet. Ce résultat est redémontré par Jussi Rintanen en 2004. Un cas particulier de planification contigente est représentée par les problèmes FOND – pour "fully-observable and non-deterministic". Si le but est spécifié en LTLf (logique temporelle linéaire sur trace finie) alors le problème est toujours EXPTIME-complet et 2EXPTIME-complet pour une spécification du but en LDLf.

### Planification conformante

On parle de planification conformante (conformant planning, comme mentionné par Rintanen dans son article de 2004, p. 1) où l'agent est incertain de l'état du système, et que l'agent ne peut faire aucune observation. L'agent a alors des croyances sur le monde réel. Ces problèmes sont résolus par des techniques semblables à celles de la planification classique, mais où l'espace des états est exponentiel dans les dimensions du problème, à cause de l'incertain sur l'état actuel. Une solution pour un problème de conformant planning est une séquence d'actions. Haslum et Jonsson ont démontré que le problème de planification conformante est EXPSPACE-complet.
Rintanen a démontré que, si on ajoute à la fois du branchement et de l'incertain (planification à la fois conformante et contingente), le problème devient 2EXPTIME-complet. Dans ce problème, les agents ont une information partielle sur l'état du système mais peuvent disposer de certaines actions d'observation de l'état - par exemple, vérifier s'il pleut ou pas - et ainsi gagner de l'information sur l'état du système.

### Planification probabiliste

Kushmerick et al. ont introduit la planification probabiliste. Dans leurs travaux, l'effet des actions est décrite avec des probabilistes. Il donne l'exemple de l'action `le robot prend un bloc' décrite de la manière suivante : si la pince du robot est sèche, alors le robot tient le bloc avec une probabilité 0.95 ; si la pince est humide, alors le robot ne tient le bloc qu'avec une probabilité de 0.5.
Cette problématique est du ressort de la théorie de la décision dans l'incertain. Ceci mène au problème de la génération de politique (ou stratégie) dans un arbre de décision ou dans un diagrame d'influence. Si l'hypothèse Markovienne est posée alors on se place dans le cadre d'un Processus de décision markovien (MDP) ou (dans le cas général) un Processus de décision markovien partiellement observable (POMDP).

### Planification non linéaire

La planification classique résout les sous-buts dans un ordre donné. Le problème est que cela amène parfois à détruire ce qui a déjà été construit. Ce phénomène est connu sous le nom d'anomalie de Sussman.
Supposons qu'un individu pieds nus doive se retrouver dans l'état où il porte sa chaussure droite, sa chaussure gauche, sa chaussette droite et sa chaussette gauche. S'il cherche à réaliser les buts dans l'ordre de l'énoncé, il échouera.
Pour résoudre ce type de problème, on peut passer à des plans partiellement ordonnés dans lesquels l'ordre entre les actions n'est fixé que lorsque c'est nécessaire (engagement au plus tard ou least commitment planning).
Dans l'exemple précédent, mettre la chaussure gauche doit se faire après avoir mis la chaussette gauche. Idem pour la droite. En revanche l'exécution du plan pour la gauche est indépendante de l'exécution pour la droite. Le plan global est donc partiellement ordonné.
Les planificateurs capables de gérer cette catégorie de problème sont dits à ordre partiel (POP, NOAH, etc).

### Planification hiérarchique

Généralement, lorsque l'on planifie, on peut disposer d'une information hiérarchique sur les actions, c'est-à-dire une description sur la manière avec laquelle des actions complexes se décomposent. Par exemple, une action complexe comme "servir un café" peut se décomposer en la séquence de deux actions complexes "préparer un café" puis "apporter le café". Ainsi, il existe des planificateurs, comme ABSTRIPS, qui en plus de la description des actions, prennent en entrée la description hiérarchique des actions. On peut par exemple commencer à planifier à haut niveau puis descendre dans le détail au besoin (comme le fait ABSTRIPS par exemple). L'objectif est alors décrit à l'aide d'un réseau hiérarchique de tâches (HTN pour hierarchical task network en anglais).

### Planification temporelle

La planification temporelle permet d'exprimer des durées d'actions, des conditions au début, à la fin et pendant l'action et des effets au début et à la fin des actions. Le langage PDDL 2.1 inclut la planification temporelle. La méthode TLP-GP 1 construit un graphe, puis on résout des contraintes temporelles en utilisant un solveur SMT. On backtracke en cas d'inconsistance. Rintanen a démontré que la planification temporelle concurrente (plusieurs instances d'une même action en parallèle est possible) est EXPSPACE-complète. Par contre, si on relâche ces conditions, on peut se ramener à de la planification classique et donc la planification temporelle avec ces restrictions devient PSPACE-complète.

### Planification générale

La planification générale consiste à produire un plan qui fonctionne pour plusieurs environnements de départ.

### Planification multi-agents

La planification multi-agents étudie la réalisation d'une tâche par plusieurs agents, par exemple plusieurs robots. La génération du plan et son exécution est alors souvent distribuée/décentralisée$^,$$^,$. Un aspect important dans les plans est la coopération entre agents. Il existe aussi un algorithme de planification centralisé, qui s'appuie sur une généralisation de STRIPS au cadre multi-agents, appelée MA-STRIPS. L'algorithme a ensuite été rendu distribué, en utilisant un solveur CSP distribué pour gérer la coordination entre agents. Les auteurs, Nissim, Brafman et Domshlak, ont expérimentalement vérifié que leur algorithme est meilleur qu'une planification centralisée lorsque les agents ont peu d'interactions entre eux.
Une difficulté majeure de la planification multi-agent est l'explosion combinatoire de l'ensemble des actions, qui est exponentiel en le nombre d'agents. En 2011, Jonsson et Rovatsos propose une solution pour contrecarrer ce problème et se ramène à de la planification classique mono-agent. Il y a aussi un gain à utiliser des techniques de parallélisation pour que les algorithmes de planification passent à l'échelle.

### Planification épistémique

Le problème de planification épistémique consiste à prendre en compte les connaissances des agents dans la description des états et des actions. Typiquement, l'objectif est une formule de la logique modale épistémique, comme "l'agent a sait que l'agent b que le bloc C est sur le bloc A" et les actions sont représentées avec des modèles d'actions de la logique épistémique dynamique. Le problème de planification est indécidable dans toute sa généralité.