Programación no determinista - Nondeterministic programming

Un lenguaje de programación no determinista es un lenguaje que puede especificar, en ciertos puntos del programa (llamados "puntos de elección"), varias alternativas para el flujo del programa . A diferencia de una instrucción if-then , el método de elección entre estas alternativas no lo especifica directamente el programador; el programa debe decidir en tiempo de ejecución entre las alternativas, mediante algún método general aplicado a todos los puntos de elección. Un programador especifica un número limitado de alternativas, pero luego el programa debe elegir entre ellas. ("Elegir" es, de hecho, un nombre típico para el operador no determinista). Se puede formar una jerarquía de puntos de elección, con elecciones de nivel superior que conducen a ramas que contienen opciones de nivel inferior dentro de ellas.

Un método de elección está incorporado en los sistemas de retroceso (como Amb , o la unificación en Prolog ), en los que algunas alternativas pueden "fallar", lo que hace que el programa retroceda y pruebe otras alternativas. Si todas las alternativas fallan en un punto de elección en particular, entonces una rama completa falla y el programa retrocederá más hacia un punto de elección más antiguo. Una complicación es que, debido a que cualquier elección es tentativa y puede rehacerse, el sistema debe poder restaurar los estados antiguos del programa deshaciendo los efectos secundarios causados ​​por la ejecución parcial de una rama que finalmente falló.

Otro método de elección es el aprendizaje por refuerzo, incorporado en sistemas como Alisp . En tales sistemas, en lugar de dar marcha atrás, el sistema realiza un seguimiento de alguna medida de éxito y aprende qué elecciones a menudo conducen al éxito y en qué situaciones (tanto el estado interno del programa como la información ambiental pueden afectar la elección). Estos sistemas son adecuados para aplicaciones en robótica y otros dominios en los que el retroceso implicaría intentar deshacer acciones realizadas en un entorno dinámico, lo que puede resultar difícil o poco práctico.

Ver también

Referencias