bonjour
je travail actuellement sur un programme qui modélise l'évolution d'une population de fusées essayant d'atteindre un point, et ayant un adn soumis aux mutations à chaque nouvelle génération.
J'ai une erreur à la ligne 29 et je ne la comprend pas : TypeError: list indices must be integers or slices, not numpy.float64
alors qu'à cette ligne j'ai bien un entier en indice de liste, j'ai revérifié
Avez vous une idée?
Code:import matplotlib.pyplot as plt import numpy as np from random import uniform from random import randint from matplotlib import animation lifetime=500 n=50 #individus par génération class rocket: def __init__(self): self.n = 6 self.seq = np.zeros((self.n,lifetime)) #sequence d amorcage self.seq[0,:] = [1 for i in range(lifetime)] self.dir = [-pi/2,0,0,0,0,0] #orientation des rockets self.v = [0,0] self.pos = [100,0] self.step = 0 #nombre d etapes self.state = 'alive' #[nombre de rockets compris entre 1 et 8; #sequence de propulsion compris entre 1 et 10; #direction de propulsion des rockets] def force(self): F_result = [0,0] for i in range (self.n): if self.state == 'alive' and self.seq[i,self.step]>0: F_result[0]+=-sin(self.dir[self.seq[i,self.step]-1]) F_result[1]+=-cos(self.dir[self.seq[i,self.step]-1]) return F_result def mutation(self): if randint(0,100)<10: self.seq[randint(0,self.n),randint(0,lifetime)] = randint(0,self.n + 1) if randint(0,100)<10: self.dir[randint(0,5)] = uniform(0,pi) def maj_vit(self,Force): self.v=[Force[0]+self.v[0],Force[1]+self.v[1]] def maj_pos(self): self.pos=[self.v[0]+self.pos[0],self.v[1]+self.pos[1]] def score(self): objectif = [450,450] distance = sqrt((self.pos[0]-objectif[0])**2+(self.pos[1]-objectif[1])**2) score = 1/(distance+0.01) - self.step return score def collide(self): self.v = [0,0] self.state = 'dead'
-----