Archive for the ‘G.A.’ Category

2010-04-08 Probando diferentes cruces en GA

Posted By dmmedina

Date: abril 8th, 2010

Category: G.A., Optimo-Robusto

Para comprobar cual de los cruces que tenemos es el mejor para resolver el problema que estamos atacando en este momento "Encontrar la Política Robusta".

Hemos estado utilizando únicamente BLX_Alfa porque era el que mejores resultados nos ha entregado, pero en este momento necesitamos que el rango de las variables se mantenga dentro del rango permitido.

Vamos a ejecutar los Algoritmos Genéticos con los siguientes parámetros:

  • 5.000 Generaciones. El tiempo de ejecución es de 10 a 15 minutos
  • 100 Individuos
  • Mutación Uniforme
  • Porcentaje de variación 10%
  • Cruce variable entre: Un Punto, Uniforme, BLX_Alfa, Uniforme_Aleatorio

Los resultados hasta el momento son estos:

Un Punto, el mejor poblador: 1ra generación 100.163889% y última generación 100.117333%. Con los porcentajes de variación dentro del rango.

Uniforme, el mejor poblador: 1ra generación 100.160056% y última generación 100.117722%. Con los porcentajes de variación dentro del rango.

BLX_Alfa, el mejor poblador: 1ra generación 100.162389% y última generación 100.130528%. Con los porcentajes de variación hasta del 50%

Uniforme Aleatorio, el mejor poblador: 1ra generación 100.161111% y última generación 100.157639%. Con los porcentajes de variación dentro del rango.

Al parecer todos los casos podrían seguir mejorando si los dejamos ejecutar con más generaciones

Como BLX_Alfa hace que se salgan del rango que necesitamos, vamos a probar las otras  3 formas de cruce aumentando a 150 el # de individuos y 10.000 las generaciones.

Un Punto, última generación 100.101806% lo alcanzó en la generación 9.930

Uniforme, última generación 100.101667% lo alcanzó ne la 9.970

Uniforme Aleatorio, última generación 100.156222% en la generación 7.300 obtuvo este resultado

Los primeros dos tienen más posibilidades de seguir disminuyendo.

2010-04-07 Usando las Partículas Analíticas

Posted By dmmedina

Date: abril 7th, 2010

Category: G.A., Optimo-Robusto

Hasta el medio día de hoy estuve buscando la razón del error (fitness negativos), y lo que estaba sucediendo era un índice en uno de los atributos de los Individuos que accedía a un espacio de memoria que no re correspondía, que afectaba al fitness del individuo anterior por eso el error era recursivo para todos y en cada generación.

Una vez solucionado procedimos a probarlo. Y no tamos que todos los individuos que se generaban violaban el 100% de Partículas Analíticas. Lo cual no ayuda en nada en la discriminación entre los individuos para decidir cual es el mejor de ellos.

Por lo que hemos pensado, que el fitness, hay que contabilizar también las veces que viola cada una de las Partículas.

Lo más probable es que la agreguemos como fracción dividiéndola para el máximo posible.

El cambio resultó muy bueno, y se ve una evolución en el fitness, pero sigue siendo del 100% de violaciones.

Tenemos otro inconveniente, hay porcentajes de variación que se alejaron del definido inicialmente (10%) , hay valores hasta del 50%.

Bueno, esto se debe a que estamos usando BLX_Alfa para el Cruce al generar nuevos individuos. Ademas lo estamos ejecutando con 5.000 generaciones.

Como podemos notar un poco antes de la generación 2.500 ya había convergido en la solución actual, pero en ningún momento bajó del 100%, únicamente mejoró el número total de violaciones a las restricciones.

El siguiente paso será hacer el proceso iterativo hasta encontrar una solución factible.

2010-04-06 Partículas Analíticas usando los GA

Posted By dmmedina

Date: abril 7th, 2010

Category: G.A., Optimo-Robusto

Como ya lo habíamos indicado, vamos a usar los G.A. para generar diferentes políticas de despacho, hasta encontrar una que solo viole restricciones en el 10% de las Partículas Analíticas.

La base para esto va a ser la Política Óptima (P) obtenida de la media de las N muestras de caudales.

Para generar las nuevas políticas vamos a variar P en un D% cada uno de los valores de P.

Con esto los individuos van a estar formados por 360 (12 meses x 30 años) valores  entre [-D, D], que representaran el cambio porcentual de los valores de P.

Para la función de fitness vamos a contar el número de veces que no satisface para las N series de caudales (violando las restricciones de las Partículas Analíticas)

Al finalizar el día teníamos terminado el G.A. pero tuve dificultades en la ejecución por Desbordamientos de la Memoria Fija. Para solucionarlo decidí usar memoria dinámica para la P y para los N muestras de caudales, ya que había que utilizarlos en las evaluaciones para obtener el fitness.

Luego de esto, se solucionó parcialmente el problema. Pero obtenía valores negativos en el fitness, lo cual no es coherente, y estuve en la ESPOL hasta las 19h00, sin lograr solucionarlo.

2010-03-30 Optimización Robusta

Posted By dmmedina

Date: marzo 30th, 2010

Category: G.A., Simulación

Para obtener la política de turbinamiento óptima y robusta a la vez, vamos a hacer lo siguiente:

  1. Tomar aleatoriamente N series de tiempo de los caudales, sacados de las 10.000 muestras que están generadas
  2. Obtener las N políticas de turbinamiento óptimas para cada una de las series de caudales.
  3. Realizar M simulaciones con cada N política encontrada
  4. Determinar la Probabilidad de la  robustez de cada política de  turbinamiento N ,  (veces que no viola restricciones / M)

En nuestros primeros experimentos determinamos que cada política N, solo satisface a la serie de caudal que representa y para todas las demás series viola alrededor de 50 veces la restricción.

Es decir, si N=10 y M=10. La probabilidad de robustez es de 10%.

Y si N=10 y M=10000. La probabilidad de robustez es de 0.01%.

Al realizar las optimizaciones iterativas fue notorio un ERROR que teníamos en la implementación (una lectura repetitiva del archivo de los caudales en cada generación) al corregirlo, los tiempos de ejecución quedaron 20 a 30 minutos

2010-03-26 Mejorando el optimizador

Posted By dmmedina

Date: marzo 26th, 2010

Category: E.E., G.A.

Como ya lo habíamos indicado, estamos optimizando las políticas de Turbinamiento para ambos periodos, usando las medias anuales de las 10.000 muestras de caudales generadas con el ANFIS.
Pero esto ya lleva 4 días ejecutándose (el objetivo era alcanzar el 1'000.000 de generaciones) pero a duras penas vamos por la generación 300.000 en ambos casos.
Para el periodo de Control tiene como costo actual 127'729.381,110
Y en el periodo Futuro esta en el costo de 97'506.263,775
Ambos disminuyendo de apoco.

La metodología actual de nuestro optimizador es: eliminar los infactibles (violan alguna restricción del sistema) y cuando se generan nuevos individuos (aleatóriamente) algún turbinamiento hacer bajar el nivel del Embalse por debajo del Límite permitido a dicha política se le asigna el valor de ( 0 ).

Los cambios que estamos haciendo son:

  1. Mantener los infactibles y agregar una función de penalización.
  2. Probamos que al  generar nuevos individuos no cambiarles nada si bajan del nivel mínimo del embalse (obtuvimos pésimos resultados porque todos los individuos violaban restricciones)
  3. Decidí no asignarle ( 0 ) sino ir reduciendo progresivamente a la mitad (Qt/2) la política que viola el mínimo del embalse 10 veces a lo mucho (de esta manera obtuvimos muy buenos resultados desde el principio, ya que los valores en costo fueron muy buenos, pero la variación del costo de operación fue muy lento -casi nada- además alcanzamos 1.000 generaciones en 15 minutos)
  4. Agregamos a lo anterior, generar nuevamente al peor individuo de cada generación (dio un buen resultado, hubo mejoras del fitness más seguidas)

Dejamos ejecutando el optimizador para el periodo de control durante 10.000 generaciones para observar los resultados. Hasta el momento parase que alcanza 1.000 generaciones cada 1o ó 12 minutos. Lo sabremos con más certeza al terminar la ejecución (estamos tomando el tiempo de ejecución).

Al aplicar estos cambios pudimos observar que la solución (política de turbinamiento) convergió mucho más rápido, por lo que ya no es necesario ejecutar nuestro optimizador con tantas generaciones. Con esto en mente hemos decidido detener las ejecuciones del 1'000.000 de generaciones, para ejecutar como máximo 10.000, aprovechando así los cambios.

Al detenerlos los valores quedaron así: CONTROL $127'729.381,110 y FUTURO 97'341.773,350 en 320.000 generaciones aproximadamente, en algo más de 4 días.

Para probar con las variantes realizadas, ejecutamos la optimización del periodo de CONTROL teniendo como resultado $109'887.267,178 solo en 10.000 generaciones, pero por la generación 2.000 ya había convergido. Y se demoró 2 horas 57 minutos y 48 segundos, aproximadamente 1.06 segundos por generación

La principal razón de esto eran los Qt que estaban siendo asignados ( 0 ). Pero pensamos mejorarlo aún más cambiando el método de ordenamiento de SelectionSort por QuickSort.

2010-01-28 Optimización de 41 años(2)

Posted By dmmedina

Date: enero 28th, 2010

Category: G.A.

En este momento lo hacemos con 200 individuos y 1000 generaciones.
Turbinamiento en 41 años
Volumen 41 años

2010-01-27 Pruebas de optimización en 40 años

Posted By dmmedina

Date: enero 27th, 2010

Category: G.A.

Vamos a ejecutar la optimización de la Central Paute para un periodo de 41 años, sin imponer la restricción de que cada año el nivel embalse regrese al valor inicial; la idea es ver si ocurre alguna vez que el nivel del embalse llega al valor mínimo; por supuesto, en este caso se dejaría de turbinar.

Inicialmente lo vamos a hacer con los Algoritmos Genéticos.

Caudales de 41 años en Paute
Lo hacemos primero con 100 individuos y 500 generaciones.
Turbinamiento de los 41 años
Volumen 100 Individuos y 500 Generaciones

2010-01-27 Sensibilidad de la salida(2)

Posted By dmmedina

Date: enero 27th, 2010

Category: G.A.

Ahora vamos a revisar los resultados que obtendremos con los Algoritmos Genéticos usando los mismos 10 años.

turbina-paute-ga-10_anios

volumen-paute-ga-10_anios

2010-01-20 Verificando el buen funcionamiento de los métodos

Posted By dmmedina

Date: enero 20th, 2010

Category: G.A.

La forma en que vamos evaluar el funcionamiento de nuestros métodos  es realizar varias ejecuciones consecutivas y comparar las respuestas, y si son bastante similares, significa que están funcionando bien. Como parámetros vamos utilizar 500 individuos y 1.000 generaciones; y vamos realizar 10 ejecuciones.

Comenzaremos con los Algoritmos Genéticos.
Turbinamientos de 10 ejecuciones
volumen011

Y por lo que se puede apreciar al comparar, las soluciones son muy similares, y la respuesta de la optimización varia en un 2% aproximadamente en cada ejecución

2009-12-23 Resonancia en G.A.

Posted By dmmedina

Date: diciembre 23rd, 2009

Category: G.A.

Después de eliminar las sentencias que hacían omitir a los individuos infactibles, iniciamos las pruebas. Al hacer esto hay que diferenciar a los individuos no factibles utilizando el fitnees. Por tal razón a todos los individuos infactibles le asignamos un fitness máximo + la cantidad de restricciones que viola.
Realizamos varios experimentos variando el # de individuos y la cantidad de generaciones, hicimos 10 ejecuciones en cada experimento.
Hasta el momento el mejor resultado en cuanto a costos ha sido de $ 1'247.758,55.

  • # Ind =       100; Max. Gen. = 100 -> Malos resultados. Entre $ 1'350.000,00 y $ 1'400.000,00. 8 segundos
  • # Ind =    1000; Max. Gen. = 100 -> Resultados regulares y muy variables de ejecución a ejecución, siempre se queda con el mejor de la primera generación. Entre $ 1'305.000,00 y $ 1'335.000,00. 75 segundos
  • # Ind =    1000; Max. Gen. = 500 -> Solo mejoró un poco ya que, en cada ejecución habían de 2 a 4 saltos en el mejor individuo. Entre $ 1'305.000,00 y $ 1'335.000,00. 221 segundos
  • # Ind =    5000; Max. Gen. = 50 -> Buenos resultados, parecidos entre cada ejecución, pero se queda con el mejor de la primera generación. Entre $ 1'296.000,00 y $ 1'315.000,00. 539 segundos
  • # Ind =    5000; Max. Gen. = 100 -> Igual al anterior, solo con 1 ó 2 saltos en las ejecuciones. Entre $ 1'290.000,00 y $ 1'307.000,00. 780 segundos
  • # Ind = 10000; Max. Gen. = 100 -> tuve problemas con la memoria estática de C++ por lo que me quede revisando el código

Por los resultados anteriores, nos vimos en la necesidad de hacer nuevamente modificaciones al programa, solo generando la población inicial solo de individuos factibles

Ir a la barra de herramientas