Este documento presenta una introducción a varios tipos de algoritmos, incluyendo algoritmos voraces, algoritmos probabilísticos, algoritmos paralelos, algoritmos genéticos y algoritmos de tiempo real. Define cada tipo de algoritmo y ofrece ejemplos para ilustrar sus aplicaciones.
2. AlgoritmoVoraz
■ Un algoritmo voraz es aquel que, para resolver un
determinado problema, sigue una heurística consistente en
elegir la opción óptima en cada paso local con la esperanza de
llegar a una solución general óptima. Este esquema
algorítmico es el que menos dificultades plantea a la hora de
diseñar y comprobar su funcionamiento. Normalmente se
aplica a los problemas de optimización.
3. Caracterización y Esquema
■ Este tema se dedica a presentar un esquema de resolución de
problemas denominado método Voraz, Greedy Method. Los
algoritmos que se obtienen aplicando este esquema se
denominan, por extensión, algoritmos voraces. El esquema
forma parte de una familia de algoritmos mucho más amplia
denominada ALGORITMOS DE BUSQUEDA LOCAL de la que
también forman parte, por ejemplo, el método del gradiente,
los algoritmos Hill-Climbing, los algoritmos genéticos o los
Simulated Annealing.
4. ■ Un algoritmo voraz determina el mínimo número de monedas que debe devolverse en el
cambio. En la figura se muestran los pasos que un ser humano debería seguir para emular
a un algoritmo voraz para acumular 36 céntimos usando sólo monedas de valores
nominales de 1, 5, 10 y 20. La moneda del mayor valor menor que el resto debido es el
óptimo local en cada paso. Nótese que en general el problema de devolución del cambio
requiere programación dinámica o programación lineal para encontrar una solución
óptima. Sin embargo, en muchos sistemas monetarios, incluyendo el euro y el dólar
estadounidense, son casos especiales donde en la estrategia del algoritmo voraz da con la
solución óptima.
5. Problema de la mochila
■ Enunciado: "Se tiene una mochila que es capaz de soportar
un peso máximo P, así como un conjunto de objetos, cada
uno de ellos con un peso y un beneficio. La solución pasa por
conseguir introducir el máximo beneficio en la mochila,
eligiendo los objetos adecuados. Cada objeto puede tomarse
completo o fraccionado".
6. Solución
■ Solución: La forma más simple de saber qué objetos se deben tomar es ordenar
dichos objetos por la relación beneficio / peso de mayor a menor. De esta forma,
tomaremos los objetos con mayor beneficio en este orden hasta que la bolsa se llene,
fraccionando si fuera preciso, el último objeto a tomar.
7.
8. Algoritmos Probabilísticos
■ Los algoritmos probabilísticos o probabilistas son aquellos que basan el resultado
devuelto en decisiones aleatorias, de tal forma que, en promedio se obtienen una
buena solución al problema planteado, dada una distribución de datos de entrada.
9. Se pueden distinguir fundamentalmente cuatro grandes categorías:
■ Algoritmos numéricos, que devuelvan una aproximación al resultado,
frecuentemente en forma de intervalo. Son útiles cuando la solución exacta es
demasiado costosa (o directamente imposible de calcular, como, por ejemplo, para
números irracionales) y una aproximación es lo suficientemente buena.
■ Algoritmos de Monte Carlo, que siempre devuelven una solución, aunque está a veces
no sea correcta. Son útiles cuando una aproximación no es suficiente (por ejemplo, en
un problema de decisión).
Clasificación de los algoritmos
probabilísticos;
10. ■ Algoritmos de LasVegas, similares a los de Monte Carlo pero que nunca
devuelven una solución errónea, con el inconveniente de que pueden no
terminar o devolver solución. Esto garantiza que la respuesta sea la buena,
pero no garantiza que el algoritmo funcione.
■ Algoritmos de Sherwood, los cuales devuelven siempre una respuesta, la
cual es forzosamente exacta. Aparecen cuando un algoritmo determinista
conocido es más rápido en el caso medio que en el peor. El uso del azar
permite reducir, e incluso eliminar, la diferencia entre buenos y malos
ejemplares.
11. Aplicación
■ Una aplicación del teorema de Buffon es utilizarlo para predecir el valor de π. Sea
μ=w/2, entonces p=1/. Si se tira la aguja un número de veces n suficientemente grande
y se cuenta el número k de veces que la aguja toca más de una tira de madera, se
puede estimar el valor de p: k ~ n/p → p ~ n/k.
■ En la práctica, no es un algoritmo útil, porque se pueden obtener aproximaciones de π
mucho mejores empleando métodos deterministas. A pesar de esto, esta
aproximación fue muy utilizada en el siglo XIX, haciendo de éste uno de los primeros
algoritmos probabilistas que se utilizaron.
12. Algoritmos GeometricosY Aritmeticos
■ Consideramos un “algoritmo” a una secuencia de pasos para resolver un problema
determinado. De tal manera que denominamos “Algoritmos geométricos y
aritméticos” a una cierta clase de algoritmos de solución que abordan el ámbito de la
geometría y aritmética.
■ Por ejemplo, supongamos que deseamos determinar el perímetro y área de un terreno
rectangular. Para ello empleamos diversas fórmulas correspondientes a la figura
geométrica, de tal manera que esta acción implica la ejecución de 2 algoritmos
diferentes.
13. ■ Uno en cuestión del área y el otro en cuestión del perímetro, de tal manera que la
correcta ejecución del mismo implica un resultado en el algoritmo.
■ Esta abstracción es posible gracias al hecho del núcleo de un algoritmo, pues en sí mismo
un “Algoritmo” es un producto de las matemáticas ya que sus bases se encuentran en
está.
14. Algoritmo Paralelo
■ En las ciencias de la computación, un algoritmo paralelo, en oposición a los algoritmos clásicos
o algoritmos secuenciales, es un algoritmo que puede ser ejecutado por partes en el mismo
instante de tiempo por varias unidades de procesamiento, para finalmente unir todas las partes
y obtener el resultado correcto.
15. ■ Los algoritmos paralelos son importantes porque es más rápido tratar grandes tareas
de computación mediante la paralelización que mediante técnicas secuenciales. Esta
es la forma en que se trabaja en el desarrollo de los procesadores modernos, ya que es
más difícil incrementar la capacidad de procesamiento con un único procesador que
aumentar su capacidad de cómputo mediante la inclusión de unidades en paralelo,
logrando así la ejecución de varios flujos de instrucciones dentro del procesador.
16. ■ Algunos algoritmos son fácilmente divisibles en partes; como, por ejemplo, un
algoritmo que calcule todos los números primos entre 1 y 100, donde se podría dividir
los números originales en subconjuntos y calcular los primos para cada uno de los
subconjuntos de los números originales; al final, uniríamos todos los resultados y
tendríamos la solución final del algoritmo.Otro ejemplo, puede ser el cálculo de Pi en
paralelo.
17. ALGORITMOTIEMPO REAL
■ Un sistema de tiempo real es uno en el cual el tiempo juega un papel esencial.Típicamente,
se tiene uno o más dispositivos físicos externos al ordenador que generan estímulos a los
cuales debe reaccionar el ordenador de la manera apropiada y dentro de un plazo de
tiempo prefijado. Por ejemplo, el ordenador interno de un reproductor de discos
compactos recibe los bits tal y como salen de la unidad y debe convertirlos en música en un
intervalo de tiempo muy ajustado.
18. ■ Se caracteriza por garantizar que todo programa se ejecutará en un límite máximo de
tiempo. El planificador debe comportarse de manera que esto sea cierto para
cualquier proceso.
■ Los sistemas en tiempo real se clasifican generalmente en sistemas de tiempo real
estricto (hard real time) y sistemas de tiempo real moderado (soft real time).
ALGORITMOTIEMPO REAL
19. ALGORITMOTIEMPO REAL
■ En los sistemas de tiempo real estricto hay plazos absolutos que deben cumplirse,
pase lo que pase. En los sistemas de tiempo real moderado el incumplimiento
ocasional de un plazo aunque es indeseable, es sin embargo tolerable. En ambos
casos, el comportamiento en tiempo real se logra dividiendo el programa en varios
procesos cuyo comportamiento es predecible y conocido por adelantado.
20. Algoritmo Genético
■ Un algoritmo es una serie de pasos organizados que describe el proceso que se debe
seguir, para dar solución a un problema específico.
■ En los años 1970, de la mano de John Henry Holland, surgió una de las líneas más
prometedoras de la inteligencia artificial, la de los algoritmos genéticos. Son llamados
así porque se inspiran en la evolución biológica y su base genético-molecular.
21. ■ Estos algoritmos hacen evolucionar una población de individuos sometiéndola a
acciones aleatorias semejantes a las que actúan en la evolución biológica (mutaciones
y recombinaciones genéticas), así como también a una selección de acuerdo con algún
criterio, en función del cual se decide cuáles son los individuos más adaptados, que
sobreviven, y cuáles los menos aptos, que son descartados.
■ Los algoritmos genéticos se enmarcan dentro de los algoritmos evolutivos, que
incluyen también las estrategias evolutivas, la programación evolutiva y la
programación genética.
22. Funcionamiento
■ Los algoritmos genéticos (AG) funcionan entre el conjunto de soluciones de un
problema llamado fenotipo, y el conjunto de individuos de una población natural,
codificando la información de cada solución en una cadena, generalmente binaria,
llamada cromosoma. Los símbolos que forman la cadena son llamados genes. Cuando
la representación de los cromosomas se hace con cadenas de dígitos binarios se le
conoce como genotipo. Los cromosomas evolucionan a través de iteraciones,
llamadas generaciones.
23. Aplicaciones
■ Diseño automatizado, incluyendo investigación en diseño de materiales y diseño
multiobjetivo de componentes automovilísticos: mejor comportamiento ante
choques, ahorros de peso, mejora de aerodinámica, etc.
■ Diseño automatizado de equipamiento industrial.
■ Diseño automatizado de sistemas de comercio en el sector financiero.
■ Construcción de árboles filogenéticos.
■ Optimización de carga de contenedores.
■ Diseño de sistemas de distribución de aguas.
■ Diseño de topologías de circuitos impresos.