def crossover(self, creature1: Creature, creature2: Creature) -> Creature: # 형질들은 다 똑같이 갖고있어야함 halfChromosome1 = creature1.getHalfChromosomeAsList( ) # random half chromosome halfChromosome2 = creature2.getHalfChromosomeAsList() resultChromosome = Chromosome() for i in range(len(halfChromosome1)): gene1 = halfChromosome1[i] gene2 = halfChromosome2[i] resultChromosome.appendGene( Gene(gene1.geneName, gene1.stat, gene1.isSuperior), Gene(gene2.geneName, gene2.stat, gene2.isSuperior)) x, y = 0, 0 while True: x = random.randrange(0, c.MAP_WIDTH) y = random.randrange(0, c.MAP_HEIGHT) if self.map_[x][y] != c.OCCUPIED: break return Creature(x, y, resultChromosome)
def __init__(self, genList, numLives, MAP_WIDTH, MAP_HEIGHT): self.map_ = [[random.randrange(0, 2) for _ in range(MAP_WIDTH)] for _ in range(MAP_HEIGHT)] self.numLives = 0 self.time = 0 self.lives = list() self.created = list() for _ in range(numLives): x, y = 0, 0 while True: x = random.randrange(0, c.MAP_WIDTH) y = random.randrange(0, c.MAP_HEIGHT) if self.map_[x][y] != c.OCCUPIED: break chromosome = Chromosome() for geneName in genList: stat = random.randrange(0, 2) gene1 = Gene(geneName=geneName, stat=stat, isSuperior=True) gene2 = Gene(geneName=geneName, stat=stat, isSuperior=True) chromosome.appendGene(gene1, gene2) cr = Creature(x, y, chromosome) self.numLives += 1 self.lives.append(cr) self.map_[x][y] = c.OCCUPIED