def CruzaIndividuos(poblacion, numNodos, padres, probabilidades): individuos = [] #Lista que contendrá a los dos individuos a elegir nuevos_indiv = {} #Lista que contendrá al nuevo individuo indices = () indices += (random.randint(0, tam_poblacion - 1), ) #Elige el índice a elegir del padre 1 while True: r = random.randint(0, tam_poblacion - 1) if r != indices[0]: indices += (r, ) #Elige el índice a elegir del padre 2 break padres.append(indices) individuos.append(copy.deepcopy(poblacion[ padres[-1][0]])) # toma el individuo al azar de la población (padre 1) individuos.append(copy.deepcopy(poblacion[ padres[-1][1]])) # toma el individuo al azar de la población (padre 2) nuevos_indiv = Cruza.GPX( individuos, numColores) # Cruza a los padres y forma un nuevo individuo probabilidades.append( bolsas.cuenta_nodos( nuevos_indiv, numColores, numNodos)) # cuenta los nodos de cada bolsa del individuo return nuevos_indiv
def InicializacionPoblacion(poblacion, probabilidades, G,numNodos):# Crea instancias de colorado del grafo con estrategia greedy de tamaño de la población for ind in range(tam_poblacion): #Lo realiza hasta el tamaño de la población if ind == 0: poblacion.append(TomaGreedy(G,numNodos)) else: poblacion.append(bolsas.crea_individuo(G, numColores,numNodos)) #crea un individuo probabilidades.append(bolsas.cuenta_nodos(poblacion[ind], numColores, numNodos)) # cuenta los nodos de cada bolsa del individuo
def CruzaPadres(individuos,probabilidades,AMonoNuevo,numNodos,G): nuevo_indiv = {} # Lista que contendrá al nuevo individuo nuevo_indiv = Cruza.GPX(individuos, numColores) # Cruza a los padres y forma un nuevo individuo probabilidades.append(bolsas.cuenta_nodos(nuevo_indiv, numColores, numNodos)) # cuenta los nodos de cada bolsa del individuo # Calcula el número de aristas monocromáticas del individuo nuevo AMonoNuevo.append(Busquedas_locales.numeroAristasMono(G, nuevo_indiv,numColores)) return nuevo_indiv