Beispiel #1
0
 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)
Beispiel #2
0
 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