fbpx
Wikipedia

Vuelta atrás

Vuelta atrás (Backtracking) es una estrategia para encontrar soluciones a problemas que satisfacen restricciones. El término "backtrack" fue acuñado por primera vez por el matemático estadounidense D. H. Lehmer en la década de 1950.

Ejemplo de árbol de búsqueda. Nótese que el árbol no tiene por qué ser binario.

Enfoques

Los problemas que deben satisfacer un determinado tipo de restricciones son problemas completos, donde el orden de los elementos de la solución no importa. Estos problemas consisten en un conjunto (o lista) de variables a la que a cada una se le debe asignar un valor sujeto a las restricciones del problema. La técnica va creando todas las posibles combinaciones de elementos para obtener una solución. Su principal virtud es que en la mayoría de las implementaciones se puede evitar combinaciones, estableciendo funciones de acotación (o poda) reduciendo el tiempo de ejecución.

Vuelta atrás está muy relacionado con la búsqueda combinatoria.

Diseño e implementación

Esencialmente, la idea es encontrar la mejor combinación posible en un momento determinado, por eso, se dice que este tipo de algoritmo es una búsqueda en profundidad. Durante la búsqueda, si se encuentra una alternativa incorrecta, la búsqueda retrocede hasta el paso anterior y toma la siguiente alternativa. Cuando se han terminado las posibilidades, se vuelve a la elección anterior y se toma la siguiente opción (hijo [si nos referimos a un árbol]). Si no hay más alternativas la búsqueda falla. De esta manera, se crea un árbol implícito, en el que cada nodo es un estado de la solución (solución parcial en el caso de nodos interiores o solución total en el caso de los nodos hoja).

Normalmente, se suele implementar este tipo de algoritmos como un procedimiento recursivo. Así, en cada llamada al procedimiento se toma una variable y se le asignan todos los valores posibles, llamando a su vez al procedimiento para cada uno de los nuevos estados. La diferencia con la búsqueda en profundidad es que se suelen diseñar funciones de cota, de forma que no se generen algunos estados si no van a conducir a ninguna solución, o a una solución peor de la que ya se tiene. De esta forma se ahorra espacio en memoria y tiempo de ejecución.

Heurísticas

Algunas heurísticas son comúnmente usadas para acelerar el proceso. Como las variables se pueden procesar en cualquier orden, generalmente es más eficiente intentar ser lo más restrictivo posible con las primeras (esto es, las primeras con menores valores posibles). Este proceso poda el árbol de búsqueda antes de que se tome la decisión y se llame a la subrutina recursiva.

Cuando se elige qué valor se va a asignar, muchas implementaciones hacen un examen hacia delante (FC, Forward Checking), para ver qué valor restringirá el menor número posible de valores, de forma que se anticipa en a) preservar una posible solución y b) hace que la solución encontrada no tenga restricciones destacadas.

Algunas implementaciones muy sofisticadas usan una función de cotas, que examina si es posible encontrar una solución a partir de una solución parcial. Además, se comprueba si la solución parcial que falla puede incrementar significativamente la eficiencia del algoritmo. Por el uso de estas funciones de cota, se debe ser muy minucioso en su implementación de forma que sean poco costosas computacionalmente hablando, ya que lo más normal es que se ejecuten en para cada nodo o paso del algoritmo. Cabe destacar, que las cotas eficaces se crean de forma parecida a las funciones heurísticas, esto es, relajando las restricciones para conseguir mayor eficiencia.

Con el objetivo de mantener la solución actual con coste mínimo, los algoritmos vuelta atrás mantienen el coste de la mejor solución en una variable que va variando con cada nueva mejor solución encontrada. Así, si una solución es peor que la que se acaba de encontrar, el algoritmo no actualizará la solución. De esta forma, devolverá siempre la mejor solución que haya encontrado. Y recuerden, la vida es un backtracking

Ejemplos de problemas comunes resueltos usando Vuelta Atrás

Aplicaciones

Vuelta atrás se usa en la implementación de los lenguajes de programación tales como Lenguaje de programación Planner y Prolog. Además, se usa en los análisis sintácticos de los compiladores. Su uso en inteligencia artificial ha sido muy importante, dando lugar a nuevos tipos de búsquedas como el A estrella.

Branch & Bound (Ramificación y poda)

Este método busca una solución como en el método de backtracking, pero cada solución tiene asociado un costo y la solución que se busca es una de mínimo costo llamada óptima. Además de ramificar una solución padre (branch) en hijos se trata de eliminar de consideración aquellos hijos cuyos descendientes tienen un costo que supera al óptimo buscado acotando el costo de los descendientes del hijo (bound). La forma de acotar es un arte que depende de cada problema. La acotación reduce el tiempo de búsqueda de la solución óptima al "podar" (pruning) los subarboles de descendientes costosos.

  •   Datos: Q798554
  •   Multimedia: Backtracking

vuelta, atrás, este, artículo, sección, sobre, matemáticas, necesita, wikificado, favor, edítalo, para, cumpla, convenciones, estilo, este, aviso, puesto, mayo, 2011, backtracking, estrategia, para, encontrar, soluciones, problemas, satisfacen, restricciones, . Este articulo o seccion sobre matematicas necesita ser wikificado por favor editalo para que cumpla con las convenciones de estilo Este aviso fue puesto el 29 de mayo de 2011 Vuelta atras Backtracking es una estrategia para encontrar soluciones a problemas que satisfacen restricciones El termino backtrack fue acunado por primera vez por el matematico estadounidense D H Lehmer en la decada de 1950 Ejemplo de arbol de busqueda Notese que el arbol no tiene por que ser binario Indice 1 Enfoques 2 Diseno e implementacion 3 Heuristicas 4 Ejemplos de problemas comunes resueltos usando Vuelta Atras 5 Aplicaciones 6 Branch amp Bound Ramificacion y poda Enfoques EditarLos problemas que deben satisfacer un determinado tipo de restricciones son problemas completos donde el orden de los elementos de la solucion no importa Estos problemas consisten en un conjunto o lista de variables a la que a cada una se le debe asignar un valor sujeto a las restricciones del problema La tecnica va creando todas las posibles combinaciones de elementos para obtener una solucion Su principal virtud es que en la mayoria de las implementaciones se puede evitar combinaciones estableciendo funciones de acotacion o poda reduciendo el tiempo de ejecucion Vuelta atras esta muy relacionado con la busqueda combinatoria Diseno e implementacion EditarEsencialmente la idea es encontrar la mejor combinacion posible en un momento determinado por eso se dice que este tipo de algoritmo es una busqueda en profundidad Durante la busqueda si se encuentra una alternativa incorrecta la busqueda retrocede hasta el paso anterior y toma la siguiente alternativa Cuando se han terminado las posibilidades se vuelve a la eleccion anterior y se toma la siguiente opcion hijo si nos referimos a un arbol Si no hay mas alternativas la busqueda falla De esta manera se crea un arbol implicito en el que cada nodo es un estado de la solucion solucion parcial en el caso de nodos interiores o solucion total en el caso de los nodos hoja Normalmente se suele implementar este tipo de algoritmos como un procedimiento recursivo Asi en cada llamada al procedimiento se toma una variable y se le asignan todos los valores posibles llamando a su vez al procedimiento para cada uno de los nuevos estados La diferencia con la busqueda en profundidad es que se suelen disenar funciones de cota de forma que no se generen algunos estados si no van a conducir a ninguna solucion o a una solucion peor de la que ya se tiene De esta forma se ahorra espacio en memoria y tiempo de ejecucion Heuristicas EditarAlgunas heuristicas son comunmente usadas para acelerar el proceso Como las variables se pueden procesar en cualquier orden generalmente es mas eficiente intentar ser lo mas restrictivo posible con las primeras esto es las primeras con menores valores posibles Este proceso poda el arbol de busqueda antes de que se tome la decision y se llame a la subrutina recursiva Cuando se elige que valor se va a asignar muchas implementaciones hacen un examen hacia delante FC Forward Checking para ver que valor restringira el menor numero posible de valores de forma que se anticipa en a preservar una posible solucion y b hace que la solucion encontrada no tenga restricciones destacadas Algunas implementaciones muy sofisticadas usan una funcion de cotas que examina si es posible encontrar una solucion a partir de una solucion parcial Ademas se comprueba si la solucion parcial que falla puede incrementar significativamente la eficiencia del algoritmo Por el uso de estas funciones de cota se debe ser muy minucioso en su implementacion de forma que sean poco costosas computacionalmente hablando ya que lo mas normal es que se ejecuten en para cada nodo o paso del algoritmo Cabe destacar que las cotas eficaces se crean de forma parecida a las funciones heuristicas esto es relajando las restricciones para conseguir mayor eficiencia Con el objetivo de mantener la solucion actual con coste minimo los algoritmos vuelta atras mantienen el coste de la mejor solucion en una variable que va variando con cada nueva mejor solucion encontrada Asi si una solucion es peor que la que se acaba de encontrar el algoritmo no actualizara la solucion De esta forma devolvera siempre la mejor solucion que haya encontrado Y recuerden la vida es un backtrackingEjemplos de problemas comunes resueltos usando Vuelta Atras EditarSudoku Problema de los movimientos de un caballo Las ocho reinasAplicaciones EditarVuelta atras se usa en la implementacion de los lenguajes de programacion tales como Lenguaje de programacion Planner y Prolog Ademas se usa en los analisis sintacticos de los compiladores Su uso en inteligencia artificial ha sido muy importante dando lugar a nuevos tipos de busquedas como el A estrella Branch amp Bound Ramificacion y poda EditarEste metodo busca una solucion como en el metodo de backtracking pero cada solucion tiene asociado un costo y la solucion que se busca es una de minimo costo llamada optima Ademas de ramificar una solucion padre branch en hijos se trata de eliminar de consideracion aquellos hijos cuyos descendientes tienen un costo que supera al optimo buscado acotando el costo de los descendientes del hijo bound La forma de acotar es un arte que depende de cada problema La acotacion reduce el tiempo de busqueda de la solucion optima al podar pruning los subarboles de descendientes costosos Datos Q798554 Multimedia BacktrackingObtenido de https es wikipedia org w index php title Vuelta atras amp oldid 130540546, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos