Documentos de Académico
Documentos de Profesional
Documentos de Cultura
AGENTE VIAJERO
Fuerza bruta
■ En el problema del agente viajero la solución más directa puede ser, intentar todas las
permutaciones y ver cuál de estas es la menor.
■ El tiempo de ejecución es un factor polinómico del orden O(n!), el factorial del número
de ciudades, esta solución es impracticable para dado solamente 20 ciudades por
ejemplo. 2,432,902,008,000,000,000 permutaciones
En general, se pueden resolver problemas con subestructuras óptimas siguiendo estos tres pasos:
■ Paso 1: Generar una permutación con cada vecino hasta llegar al destino.
■ Paso 2: Guardar la posible ruta y calcular el costo
■ Paso 3: Repetir paso 1 y 2
■ Paso 4: Comparar todas las iteraciones, la ruta mínima es el resultado óptimo.
Para generar las permutaciones se usó una clase predeterminada de java llamada nextPermutation,
que aplica el algoritmo de Jhonson Trotter.
■ Johnson Trotter(n)
■ //Input: Un entero positive n
■ initialize the first permutation with: <0, <1, <2
■ //(Todos los elementos apuntando hacia la izquierda)
■ while ( //La ultima permutacion tenga un element movil)
■ // k ← el elemento movil k mas grande
■ //Intercambiar K con el elemento que lo apunta
■ //Invertir la direccion de todos los elementos > K
■ //Agregar la permutacion a la lista
Al tener las iteraciones realizadas, podemos tomar todas las rutas planteadas y calcular el costo,
después buscar la de menor costo y proponer como la mejor.
■ Para cada permutación i
Para j=0 hasta permutacion.length
Costo[i] += path[j]+ path[j+1]
fin i++
Fin
//Buscar el arreglo de menor costo.
mejorRuta=min(costo)
Programación dinámica
En este tipo de programación utiliza un método para reducir el tiempo de ejecución de un
algoritmo mediante la división en subproblemas y resolver recordando todas las soluciones
por si en las siguientes iteraciones fuera necesarias nuevamente.
■ TSP con algoritmo Held–Karp Resuelve el problema en 𝜃 𝑛2 2 𝑛
■ Necesita 𝑛2 2 𝑛 espacio para almacenar operaciones
■ 𝐷(𝑉𝑖 𝑆) Será la longitud del camino mínimo partiendo del vértice Vi que pasa por todos los
vértices del conjunto S y vuelve al vértice 𝑉𝑖
En general la relación de recurrencia es la siguiente:
𝑔 𝑖, { } = 𝐿𝑖1 Cuando S es { }
𝑔 𝑖, 𝑆 = 𝑀𝑖𝑛𝑗∈𝑆 {𝐿𝑖𝑗 + 𝑔 𝑗, 𝑆 𝑗}
𝒈(𝒊, 𝑺) Será la longitud del camino mínimo partiendo del vértice i que pasa por todos los vértices
del conjunto S y vuelve al vértice 𝒊.
Algoritmo voraz
Los algoritmos genéticos fueron introducidos por John Holland a finales de los 60´s,
inspirándose en el proceso observado en la evolución natural de los seres vivos.
Son algoritmos de búsqueda basados en la mecánica de la selección natural y en la genética.
Estos combinan la supervivencia de los individuos más aptos entre las cadenas de
estructuras con un intercambio aleatorio para formar un algoritmo de búsqueda
Algoritmos Heurísticos de Inserción
Consiste en comenzar construyendo ciclos que visiten únicamente unos cuantos vértices,
para posteriormente extenderlos insertando los vértices restantes. En cada paso se inserta un
nuevo vértice en el ciclo hasta obtener un ciclo Hamiltoniano.
Algoritmos Genéticos
la solución consiste en encontrar un individuo cuya combinación de genes (cada gen es una
variable), den solución al problema de visitar todas las ciudades una vez. Otra solución es
que cada gen es una ciudad y cuyo orden dependerá del orden en que serán visitadas. Redes
neuronales: Una red neuronal simula las conexiones entre los nodos (lugares por visitar), y
cada recorrido por las diferentes neuronas genera al final un camino que involucra el tour
por todas las ciudades visitadas una sola vez.