Marcelo Apolo E. César Menéndez C. Nelson Ruíz William Sánchez V. HARMONY SEARCH Es un algoritmo meta heurístico (también conocido como algoritmo de cálculo suave o algoritmo evolutivo), el cual imita el proceso de improvisación musical. HARMONY SEARCH La música (del griego: μουσική [τέχνη] - mousikē [téchnē], "el arte de las musas") es, según la definición tradicional del término, el arte de organizar sensible y lógicamente una combinación coherente de sonidos y silencios utilizando los principios fundamentales de la melodía, la armonía y el ritmo, mediante la intervención de complejos procesos psico-anímicos. Elementos de la música La organización coherente de los sonidos y los silencios (según una forma de percepción) nos da los parámetros fundamentales de la música, que son la melodía, la armonía y el ritmo. La melodía es un conjunto de sonidos. La armonía, bajo una concepción vertical de la sonoridad, y cuya unidad básica es el acorde, regula la concordancia entre sonidos que suenan simultáneamente y su enlace con sonidos vecinos. La métrica, se refiere a la pauta de repetición a intervalos regulares, y en ciertas ocasiones irregulares, de sonidos fuertes o débiles y silencios en una composición. El ritmo, es el resultado final de los elementos anteriores, a veces con variaciones muy notorias. FACTORES DE COMPARACION Conjunto de Músicos → Variables de Decisión Rango de Afinación→ Rango de Valores Armonía → Solución de vectores Estética → Función Objetivo Práctica → Iteración Experiencia → Matriz de memoria Procedimientos de Harmony Search 1. 2. 3. 4. 5. Parámetros de inicialización Harmony Memory Nueva Armonía Actualización de Harmony Memory Criterio de Verificación y Terminación Parámetros de Inicialización Minimizar o Maximizar F(X) Sujeto ; i=1,2, … ,N N es el número de variables de decisión K es el número de candidatos de las variables de decisión. HARMONY MEMORY INICIAL k Nueva Armonía “Vector Harmony” El nuevo vector Harmony x´ = Dicho vector esta dado por tres reglas: 1. Selección Aleatoria 2. Se debe considerar HM 3. Se debe hacer un ajuste (Ajuste de Tono) Vector Harmony SELECCIÓN ALEATORIA Partimos de que el músico puede entonar cualquier nota del pentagrama y que tiene grabada la melodía en su memoria (HM). Vector Harmony SELECCIÓN ALEATORIA Donde Ajuste de Tono Una vez que obtuvimos el nuevo tono (Vector Harmony), el músico puede ajustar aún mas el paso, probando con notas vecinas. Ejemplo: Sol su vecindad es La o Fa En este caso Do puede ajustar a Re Ajuste de Tono Donde se obtiene del HM y elemento de . es el K-ésimo m es el índice de la vecindad Para variables discretas m varía entre 1 y -1 ; Actualización de Harmony Memory Si x´ = tiene una mejor respuesta en la función objetivo, lo reemplazamos en la Harmony Memory. Presentación del Algoritmo Harmony Search Defina Función Objetivo F(x) Defina Harmony Memory (Raccept) Defina Ajuste de Tono (Rap) Generar Harmony Memory con armonías aleatorias While (t <Maximo_Numero_Iteraciones) While (i <=Numero_Variables) If (U [0,1 ] <Raccept) Elegir un valor del Harmony Memory por la variable i If (U [0,1] <Rap) Ajustar el valor mediante la adición de cierta cantidad End If Else Elegir un valor aleatorio End If End While Aceptar el new Harmony si es mejor End While Buscar la actual mejor solución End Aplicaciones y Comparaciones con otros Modelos Diseño de Estructuras Aplicaciones y Comparaciones con otros Modelos Problemas de Logística de Transportes Aplicaciones y Comparaciones con otros Modelos Diseño de Redes de Aguas Aplicaciones y Comparaciones con otros Modelos Diseño de Redes de Aguas en Gran Escala Aplicaciones y Comparaciones con otros Modelos Operaciones de Represas Aplicaciones y Comparaciones con otros Modelos Optimizar parámetros de Calibración Hidrológicas Aplicaciones y Comparaciones con otros Modelos Conservación Ecológica Conclusiones El HS no requiere de cálculos complejos, por lo tanto siempre esta libre de divergencia. El HS no requiere ajustes de valor inicial para las variables de decisión. El HS puede manejar variables discretas, así como variables continuas, mientras que las técnicas basadas en gradiente solo pueden manejar continuas. EJERCICIO DE APLICACION OBS: PASO 1 Generar una Harmony Memory X1 X2 X3 F(X) 2 2 1 4 1 3 4 13 5 3 3 16 PASO 2 “Recordar Bucles y Sentencias de Decisión” Seguir los pasos del algoritmo, lo volvemos a anunciar While (t <Maximo_Numero_Iteraciones) While (i <=Numero_Variables) If (U [0,1 ] <Raccept) Elegir un valor del Harmony Memory por la variable i If (U [0,1] <Rap) Ajustar el valor mediante la adición de cierta cantidad End If Else Elegir un valor aleatorio End If End While Aceptar el new Harmony si es mejor PASO 3 I-ésima Iteración (Para este caso se cumplieron las 2 sentencias If) Se generaron 2 números aleatorios adicionales de tal manera que el primero escogió la variable X1 y el 3er rank del mismo. Como expone el algoritmo se cambio el componente del rank próximo por un valor de ± 1. Siempre y cuando la función se optimice de acuerdo al criterio del problema. X1 X2 X3 F(X) Rank1 2 2 1 4 Rank2 2 3 4 12 Rank3 5 3 3 16 I+K Iteración (Para este caso se cumplieron las 2 sentencias If) Se generaron 2 números aleatorios adicionales de tal manera que el primero escogió la variable X2 y el 3er rank del mismo. Como expone el algoritmo se debería cambiar el componente del Rank próximo por un valor de ± 1. Pero en este caso la función objetivo no optimiza por lo que no escogemos el vector Harmony en la Harmony Memory. X1 X2 X3 F(X) Rank1 2 2 1 4 Rank2 2 3 4 12 Rank3 5 3 3 16 I+k+J Iteración (Para este caso se cumplieron las 2 sentencias If) Se generaron 2 números aleatorios adicionales de tal manera que el primero escogió la variable X3 y el 2do rank del mismo. Como expone el algoritmo se cambio el componente del rank próximo por un valor de ± 1. Siempre y cuando la función se optimice de acuerdo al criterio del problema. Podíamos tomar el rank1 o el Rank 3. De manera aleatoria se obtuvo el tercero. X1 X2 X3 F(X) Rank1 2 2 1 4 Rank2 2 3 4 12 Rank3 5 3 2 13 I+k+J+L Iteración (Para este caso se cumplieron las 2 sentencias If) Se generaron 2 números aleatorios adicionales de tal manera que el primero escogió la variable X1 y el 2do rank del mismo. Como expone el algoritmo se cambio el componente del rank próximo por un valor de ± 1. Siempre y cuando la función se optimice de acuerdo al criterio del problema. Podíamos tomar el Rank1 o el Rank 3. De manera aleatoria se obtuvo el tercero. Para la nueva Harmony Memory se debe ordenar los vectores de la matriz de tal manera que los valores de F(X) sean ascendentes. X1 Rank1 Rank2 rank3 X2 2 2 4 X3 2 3 3 F(X) 1 4 2 4 12 8 I+k+J+L +H Iteración (Para este caso se cumplieron las 2 sentencias If) Se generaron 2 números aleatorios adicionales primero escogió la variable X3 y el 2do rank del mismo. de tal manera que el Como expone el algoritmo se cambio el componente del rank próximo por un valor de ± 1. Siempre y cuando la función se optimice de acuerdo al criterio del problema. Podíamos tomar el Rank1 o el Rank 3. De manera aleatoria se obtuvo el tercero. Para la nueva Harmony Memory se debe ordenar los vectores de la matriz de tal manera que los valores de F(X) sean ascendentes. X1 Rank1 Rank2 Rank3 X2 2 4 2 X3 2 3 3 F(X) 1 2 3 4 8 7 I+k+J+L +H+G Iteración (Para este caso se cumplieron las 2 sentencias If) Se generaron 2 números aleatorios adicionales de tal manera que el primero escogió la variable X3 y el 3er rank del mismo. Como expone el algoritmo se cambio el componente del rank próximo por un valor de ± 1. Siempre y cuando la función se optimice de acuerdo al criterio del problema. X1 Rank1 Rank2 Rank3 X2 2 2 4 X3 2 3 3 F(X) 1 2 2 4 4 8 I+k+J+L+H+G+D Iteración (Para este caso se cumplieron las 2 sentencias If) Se generaron 2 números aleatorios adicionales de tal manera que el primero escogió la variable X2 y el 3er rank del mismo. Como expone el algoritmo se debería cambiar el componente del Rank próximo por un valor de ± 1. Pero en este caso la función objetivo no optimiza por lo que no escogemos el vector Harmony en la Harmony Memory. X1 X2 X3 F(X) Rank1 2 2 1 4 Rank2 2 3 2 4 Rank3 4 3 2 8 I+k+J+L+H+G+D+X Iteración (Para este caso se cumplieron las 2 sentencias If) Se generaron 2 números aleatorios adicionales de tal manera que el primero escogió la variable X3 y el 3er rank del mismo. Como expone el algoritmo se cambio el componente del rank próximo por un valor de ± 1. Siempre y cuando la función se optimice de acuerdo al criterio del problema. Para la nueva Harmony Memory se debe ordenar los vectores de la matriz de tal manera que los valores de F(X) sean ascendentes. X1 X2 X3 F(X) Rank1 2 2 1 4 Rank2 2 3 1 3 Rank3 4 3 2 8 Solución Óptima Rank 1= (2,3,1) F(X)=3 X1 X2 X3 F(X) Rank1 2 3 1 3 Rank2 2 2 1 4 Rank3 4 3 2 8 T= I+k+J+L+H+G+D+X