es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo seleccionar filas al azar de una matriz en python desde cero sin utilizar ninguna librería de numpy

Hola, estoy tratando de implementar el mecanismo de selección de ruleta del algoritmo genético. Ya he realizado la función de aptitud y también la correspondiente probabilidad de aptitud. Necesito un código para seleccionar filas de manera aleatoria de una matriz generada inicialmente, pero solo utilizando Python desde cero, ya que no estoy usando ninguna biblioteca como numpy o jupyter.

Sería algo similar a esto, pero sin numpy:

https://stackoverflow.com/questions/22835914/select-two-random-rows-from-numpy-array

Gracias.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Aquí tienes un código de ejemplo que implementa el mecanismo de selección de la ruleta en Python sin utilizar ninguna biblioteca como numpy o jupyter.

    Primero, podemos empezar generando una matriz inicial de tamaño n x m, donde n es el número de filas y m es el número de columnas. Por ejemplo, podemos generar aleatoriamente una matriz con valores enteros entre 0 y 10:

    import random
    
    n = 10
    m = 5
    
    matrix = [[random.randint(0, 10) for j in range(m)] for i in range(n)]
    

    A continuación, podemos calcular las probabilidades de fitness para cada fila en la matriz basadas en sus valores de fitness. Supongamos que ya hemos calculado los valores de fitness para cada fila y los hemos almacenado en una lista llamada fitness_values.

    fitness_probabilities = []
    total_fitness = sum(fitness_values)
    
    for i in range(n):
        fitness_probabilities.append(fitness_values[i] / total_fitness)
    

    Ahora, podemos utilizar el mecanismo de selección de la ruleta para seleccionar aleatoriamente dos filas de la matriz basadas en sus probabilidades de fitness. Para hacer esto, primero generamos un número aleatorio entre 0 y 1, y luego recorremos las filas de la matriz mientras llevamos un seguimiento de la probabilidad acumulada. Cuando la probabilidad acumulada sea mayor que el número aleatorio, seleccionamos esa fila.

    selected_rows = []
    
    for i in range(2):
        random_num = random.uniform(0, 1)
        probabilidad_acumulada = 0
    
        for j in range(n):
            probabilidad_acumulada += fitness_probabilities[j]
    
            if probabilidad_acumulada > random_num:
                selected_rows.append(matrix[j])
                break
    

    Finalmente, tenemos selected_rows, que contiene dos filas seleccionadas aleatoriamente de la matriz generada inicialmente basadas en sus probabilidades de fitness. Podemos utilizar estas filas para operaciones adicionales en nuestro algoritmo genético.

    Espero que esto te ayude. Hazme saber si tienes alguna pregunta.

Comments are closed.