Ayuda con código implementado en C para generar números aleatorios

Hola! Que tal
Es la primera vez que visito este sitio y bueno tengo un pequeño problema con C.
Espero que me ayude para mi programa acerca de Algoritmos Genéticos (campo donde no soy experta)... Necesito generar un numero aleatorio con ciertas restricciones.
Primero se tiene una variable Num_tareas ingresado por el usuario que restringe el tamaño real de los arreglos: n[MAX] y población[MAX][MAX]
Quiero generar aleatorios para asignarlos a n[], pero que no se repitan y que sean en un rango de 1 a num_tareas.
Esos valores serán asignados a población[][], de tal forma que se imprima en pantalla, por ejemplo: si se ingresa:
num_tareas=5
//se imprimirá en pantalla lo siguiente:
Cromosoma 1
[1][2][3][4][5]
Cromosoma 2
[1][2][3][5][4]
Cromosoma 3
[1][2][4][3][5]
Cromosoma 4
[1][2][4][5][3]
Cromosoma 5
[2][1][3][4][5]
Cromosoma 6
[2][3][1][4][5]
Cromosoma 7
[3][1][2][4][5]
Cromosoma 8
[3][2][1][5][4]
Cromosoma 9
[4][2][3][1][5]
Cromosoma 10
[1][2][3][4][5]
// Como vé ningún numero se repite y se hace esto 10 veces nada más
Pondré parte del código que ya tengo.
#include<stdio.h>
#define MAX 100
#define ELEM 10
void main(){
int n[MAX],poblacion[MAX][MAX], num_tareas;
scanf("%d",&num_tareas);
srand(time(NULL));
printf("POBLACION\n");
for(i=0;i<ELEM;i++){
for(j=0;j<num_tareas;j++){
n=1+rand()%num_tareas;
printf("Cromosoma %d:t",i+1);
printf("[%d]",poblacion[j]=n[j]);
}
}
getch();
}
Este código me genera aleatorios diferentes pero por desgracia se me repiten los números y no me sirve.
Agradecería su pronta respuesta y su molestia por contestarme.
Gracias

1 respuesta

Respuesta
1
Si continuas usando la sentencia:
n=1+rand()%num_tareas;
Para crear el cromosoma, donde el numero de genes es num_tareas,
te seguirán saliendo alelos repetidos.
Tienes diversas opciones de solución:
1) Descartar la función rand(), crear una función en la cual se generen todas las combinaciones sin repetición.
2) No se cual sea el problema que desees resolver con Alg. Genéticos pero es válido tener ciertos cromosomas con valores iguales, recuerda que lo que estas haciendo es tan solo la población inicial, es dar solución de arranque, esta se evalúa, se elecciona, se cruzan los cromosomas seleccionados y se mutan claro con cierta probabilidad de cruzamiento y mutación, se repite este proceso.
Debes sabes cual función de selección es la más adecuada a tu problema, cual la de
mutación, ¿necesitas un algoritmo elitista?, ¿Cuál es tu condición de paro?,
¿Sabes qué tamaño de plobacion es la adecuada para tu problema?, ¿Cuál es tu
numero de generaciones?...
¿Es ese cromosoma la representación real de la solución tu problema?.
No se cual en cual de las 2 opciones desees te ayude, en desarrollar una función
que genere combinaciones sin repetición o en el análisis y diseño de tu algoritmo
genético.
Puedes escribirme a este email:
[email protected]
Nos vemos.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas