Ver Mensaje Individual
  #1 (permalink)  
Antiguo 20/03/2015, 17:52
dmorill
 
Fecha de Ingreso: junio-2014
Mensajes: 144
Antigüedad: 10 años, 4 meses
Puntos: 1
El gran misterio de unos threads

Hola me ha pasado algo muy extraño y he agotado varios días haciendo pruebas, preguntándole a amigos y a profesores, pero no he tenido éxito en resolver este problema.

Tengo un programa en c++ que ejecuta un algoritmo genético y resuelve un total de 480 problemas con dicho algoritmo, y saca un promedio del resultado de cada uno de ellos. Para esbozar un poco que es un algoritmo genético es un algoritmo que busca una solución para un problema para eso crea una población con muchas soluciones, luego mediante algunos mecanismos mezclan dichas soluciones para crear nuevas.

1. Crear población inicial de tamaño (= size), y se establece que estamos en la primera generación: (genera = 1).
2. mientras (genera < generaMax) se crean nuevas poblaciones a partir de de la anterior y se siguen creando hasta que se cumpla el criterio de parada.
3. Reportar la mejor solución.

Donde esta el problema? fácil para crear la población inicial y las poblaciones futuras se usan números aleatorios (con la librería #random) y para hacerlo más rápido uso Threads, con los respectivos #mutex para evitar problemas, pero cuando lo ejecuto con 7 threads me de un resultado y si lo ejecuto con 8 threads me da otro valor!!!!!!!!!

Me debería dar valores parecidos (no exactos pues uso valores aleatorios) pero me dí cuenta que cambia el valor cuando le cambio en número de threads y no tengo idea de porqué. Si lo ejecuto varias veces con el mismo número me da resultados muy similares, como se espera.

Como dato adicional el único momento donde el número de threads cambia algo en la programación de c++ es en los límites de para crear las poblaciones por ejemplo, si la población es de 100 individuos, y tengo dos threads pues los límites serán 50 cada uno, si fueran 8 threads el limite será casí 18 cada uno.

Espero que no les sea tan amargo de leer todo esto y que me puedan ayudar jeje.

saludos