Problema al crear pares y agregar a lista
Publicado por Enrique (13 intervenciones) el 03/02/2021 23:07:21
Hola gente, tengo un super mega problema a ver si me pueden ayudar
Este es mi codigo para que lo ejecuten:
Y este es el resultado:
Poblacion original:
Individuo 0: [0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1]
Individuo 1: [1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1]
Individuo 2: [0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0]
Individuo 3: [0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1]
Individuo seleccionado 1: [0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1]; Individuo seleccionado 2: [0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0]
Cruzar individuos a partir de la posicion 5:
Nuevo individuo 1: [0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0]; Nuevo individuo 2: [0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1]
Nueva poblacion:
Individuo 0: [0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0]
Individuo 1: [1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1]
Individuo 2: [0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1]
Individuo 3: [0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1]
Individuo 4: [0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0]
Individuo 5: [0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1]
El problemón que tengo es este. Si se fijan, el individuo seleccionado 1 es el individuo 0 y el individuo seleccionado 2 es el individuo 2.
Lo que estoy haciendo es que, a partir de un punto hasta que termina el individuo, debo cambiar los digitos de ambos individuos. Es decir, desde la posicion 5 hasta la 13 del individuo 1, cambiar esos digitos de esas posiciones con los digitos que estan en el mismo rango de posiciones del individuo 2 y viceversa. Y luego, ya una vez que los haya cruzado, agregarlos a lista original hasta el final.
El problemón está en que, no se por que, pero cuando agrego a los nuevos individuos a la lista, los números que fueron tomados originalmente para ser cruzados son iguales a los nuevos individuos, y eso no debe pasar. Los numeros originales deben quedarse como estaban.
Me pueden decir que estoy haciendo mal?
Este es mi codigo para que lo ejecuten:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
pob = [[0,1,1,0,0,1,0,0,1,0,1,0,1,1], [1,1,1,1,0,0,1,0,0,1,0,0,1,1], [0,1,0,0,1,1,0,1,0,0,0,1,0,0], [0,1,1,0,0,1,0,0,1,0,1,0,1,1]]
#its = 2
punto = 5
print("Poblacion original:")
for x in range(0,len(pob)):
print(f"Individuo {x}: {pob[x]}")
ind1 = pob[0]
ind2 = pob[2]
print()
print(f"Individuo seleccionado 1: {ind1}; Individuo seleccionado 2: {ind2}")
print()
print(f"Cruzar individuos a partir de la posicion {punto}:")
print()
for x in range(punto,len(ind1)):
aux1 = ind1[x]
aux2 = ind2[x]
ind1[x] = aux2
ind2[x] = aux1
print(f"Nuevo individuo 1: {ind1}; Nuevo individuo 2: {ind2}")
pob.append(ind1)
pob.append(ind2)
print()
print("Nueva poblacion:")
for x in range(0,len(pob)):
print(f"Individuo {x}: {pob[x]}")
Y este es el resultado:
Poblacion original:
Individuo 0: [0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1]
Individuo 1: [1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1]
Individuo 2: [0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0]
Individuo 3: [0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1]
Individuo seleccionado 1: [0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1]; Individuo seleccionado 2: [0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0]
Cruzar individuos a partir de la posicion 5:
Nuevo individuo 1: [0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0]; Nuevo individuo 2: [0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1]
Nueva poblacion:
Individuo 0: [0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0]
Individuo 1: [1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1]
Individuo 2: [0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1]
Individuo 3: [0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1]
Individuo 4: [0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0]
Individuo 5: [0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1]
El problemón que tengo es este. Si se fijan, el individuo seleccionado 1 es el individuo 0 y el individuo seleccionado 2 es el individuo 2.
Lo que estoy haciendo es que, a partir de un punto hasta que termina el individuo, debo cambiar los digitos de ambos individuos. Es decir, desde la posicion 5 hasta la 13 del individuo 1, cambiar esos digitos de esas posiciones con los digitos que estan en el mismo rango de posiciones del individuo 2 y viceversa. Y luego, ya una vez que los haya cruzado, agregarlos a lista original hasta el final.
El problemón está en que, no se por que, pero cuando agrego a los nuevos individuos a la lista, los números que fueron tomados originalmente para ser cruzados son iguales a los nuevos individuos, y eso no debe pasar. Los numeros originales deben quedarse como estaban.
Me pueden decir que estoy haciendo mal?
Valora esta pregunta


0