Programmation non déterministe - Nondeterministic programming

Un langage de programmation non déterministe est un langage qui peut spécifier, à certains points du programme (appelés "points de choix"), diverses alternatives pour le déroulement du programme . Contrairement à une instruction if-then , la méthode de choix entre ces alternatives n'est pas directement spécifiée par le programmeur ; le programme doit décider au moment de l'exécution entre les alternatives, via une méthode générale appliquée à tous les points de choix. Un programmeur spécifie un nombre limité d'alternatives, mais le programme doit ensuite choisir entre elles. ("Choisir" est, en fait, un nom typique pour l'opérateur non déterministe.) Une hiérarchie de points de choix peut être formée, avec des choix de niveau supérieur conduisant à des branches contenant des choix de niveau inférieur.

Une méthode de choix est incorporée dans les systèmes de retour en arrière (tels que Amb , ou l'unification dans Prolog ), dans lesquels certaines alternatives peuvent "échouer", provoquant le retour en arrière du programme et l'essai d'autres alternatives. Si toutes les alternatives échouent à un point de choix particulier, alors une branche entière échoue et le programme reviendra plus loin, jusqu'à un point de choix plus ancien. Une complication est que, parce que tout choix est provisoire et peut être refait, le système doit être capable de restaurer les anciens états du programme en annulant les effets secondaires causés par l'exécution partielle d'une branche qui a finalement échoué.

Une autre méthode de choix est l'apprentissage par renforcement, intégré dans des systèmes tels que Alisp . Dans de tels systèmes, plutôt que de revenir en arrière, le système garde une trace d'une certaine mesure du succès et apprend quels choix mènent souvent au succès et dans quelles situations (l'état interne du programme et l'apport environnemental peuvent affecter le choix). Ces systèmes conviennent aux applications à la robotique et à d'autres domaines dans lesquels le retour en arrière impliquerait de tenter d'annuler des actions effectuées dans un environnement dynamique, ce qui peut être difficile ou peu pratique.

Voir également

Les références