Articulo de referencia

Programación no determinista

Un lenguaje de programación no determinista es aquel que permite especificar, en ciertos puntos del programa (denominados "puntos de decisión"), diversas alternativas para el fl...

Un lenguaje de programación no determinista es aquel que permite especificar, en ciertos puntos del programa (denominados "puntos de decisión"), diversas alternativas para el flujo del programa . A diferencia de una sentencia condicional (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 , mediante un método general aplicado a todos los puntos de decisión. El programador especifica un número limitado de alternativas, pero el programa debe elegir entre ellas posteriormente. ("Elegir" es, de hecho, un nombre típico para el operador no determinista). Se puede formar una jerarquía de puntos de decisión, donde las opciones de nivel superior conducen a ramas que contienen opciones de nivel inferior.

Un método de elección se materializa en los sistemas de retroceso (como Amb , [ 1 ] o la unificación en Prolog ), en los que algunas alternativas pueden "fallar", lo que provoca que el programa retroceda y pruebe otras alternativas. Si todas las alternativas fallan en un punto de elección determinado, entonces falla toda una rama y el programa retrocederá aún más, a un punto de elección anterior. Una complicación es que, dado que cualquier elección es provisional y puede rehacerse, el sistema debe ser capaz de restaurar estados anteriores del programa deshaciendo los efectos secundarios causados ​​por la ejecución parcial de una rama que finalmente falló.

Otro método preferido es el aprendizaje por refuerzo , implementado en sistemas como Alisp . [ 2 ] En estos sistemas, en lugar de retroceder, el sistema registra una medida de éxito y aprende qué decisiones suelen conducir al éxito y en qué situaciones (tanto el estado interno del programa como la información del entorno pueden afectar la decisión). Estos sistemas son adecuados para aplicaciones en robótica y otros ámbitos donde retroceder implicaría intentar deshacer acciones realizadas en un entorno dinámico, lo cual puede resultar difícil o poco práctico.

Véase también

Referencias

  1. "Estructura e interpretación de programas informáticos" .
  2. David Andre; Stuart J. Russell (julio de 2002). «Abstracción de estado para agentes de aprendizaje por refuerzo programables» . Decimoctava Conferencia Nacional sobre Inteligencia Artificial : 119–125 . ISBN 978-0-262-51129-2.