Bien sûr, je vais vous proposer un exemple de code Python pour simuler un processus dans le domaine des systèmes autonomes, en utilisant un ton professionnel et en faisant référence à la théorie de Charles Darwin. Pour cet exemple, nous allons simuler une population d’agents autonomes qui évoluent selon des principes de sélection naturelle.
« `python
import random
import matplotlib.pyplot as plt
class AgenteAutonomo:
def __init__(self, fitness):
self.fitness = fitness
def crear_poblacion(tamano, promedio_fitness, desviacion_fitness):
poblacion = []
for _ in range(tamano):
poblacion.append(AgenteAutonomo(random.gauss(promedio_fitness, desviacion_fitness)))
return poblacion
def seleccion_natural(poblacion):
nueva_poblacion = []
max_fitness = max(poblacion, key=lambda x: x.fitness).fitness
for agente in poblacion:
if agente.fitness >= max_fitness * 0.5: # Solo los agentes con fitness superior al 50% del máximo sobreviven
nueva_poblacion.append(agente)
return nueva_poblacion
def reproduccion(poblacion):
nueva_poblacion = []
while len(nueva_poblacion) < len(poblacion):
padre = random.choice(poblacion)
hijo = AgenteAutonomo(random.gauss(padre.fitness, 0.1)) # Pequeña variación en el fitness
nueva_poblacion.append(hijo)
return nueva_poblacion
def main():
tamano_poblacion = 100
promedio_fitness_inicial = 5
desviacion_fitness_inicial = 1
generaciones = 50
# Crear la población inicial
poblacion = crear_poblacion(tamano_poblacion, promedio_fitness_inicial, desviacion_fitness_inicial)
# Lista para guardar el fitness promedio de cada generación
fitness_promedio_por_generacion = []
for generacion in range(generaciones):
# Selección natural
poblacion = seleccion_natural(poblacion)
# Reproducción
poblacion = reproduccion(poblacion)
# Calcular el fitness promedio de la población actual
fitness_promedio = sum(agente.fitness for agente in poblacion) / len(poblacion)
fitness_promedio_por_generacion.append(fitness_promedio)
print(f"Generación {generacion+1}: Fitness promedio = {fitness_promedio:.2f}")
# Gráfico del fitness promedio por generación
plt.plot(fitness_promedio_por_generacion, label='Fitness promedio')
plt.xlabel('Generación')
plt.ylabel('Fitness promedio')
plt.title('Evolución del Fitness Promedio a lo Largo de las Generaciones')
plt.legend()
plt.show()
if __name__ == "__main__":
main()
```
### Explicación del Código
1. **Clase `AgenteAutonomo`**: Representa un agente autónomo con un atributo `fitness`.
2. **Función `crear_poblacion`**: Crea una población inicial de agentes con fitness generados aleatoriamente siguiendo una distribución normal.
3. **Función `seleccion_natural`**: Aplica la selección natural, permitiendo que solo los agentes con un fitness superior al 50% del máximo sobrevivan.
4. **Función `reproduccion`**: Realiza la reproducción de la población, creando nuevos agentes con un pequeño margen de variación en el fitness.
5. **Función `main`**: Gestiona el flujo del programa, crea la población inicial, ejecuta las generaciones y gráfica el fitness promedio por generación.
Este código simula la evolución de una población de agentes autónomos según principios de selección natural, inspirados en las ideas de Charles Darwin.