Beispiel #1
0
 def create_community(self):
     community = []
     for i in range(self.community_size):
         loadout = Loadout("Kensa Undercover Brella", "Sprinkler",
                           "Ink Armor")
         loadout.randomize_abilities()
         loadout.get_fitness()
         community.append(loadout)
     return community
Beispiel #2
0
    def crossover(self, community):
        community = self.sort_by_fitness(community)
        alpha_primaries = community[0].primaries = self.order_primaries(
            community[0].primaries)
        alpha_secondaries = community[0].secondaries

        candidates = community[1:]
        new_community = [community[0]]

        for i in range(len(candidates)):
            candidate_primaries = self.order_primaries(candidates[i].primaries)
            candidate_secondaries = candidates[i].secondaries

            while True:
                alpha_primaries_clone = copy.deepcopy(alpha_primaries)
                for item in SplatoonData.REQUIRED_PRIMARIES:
                    alpha_primaries_clone.remove(item)

                candidate_primaries_clone = copy.deepcopy(candidate_primaries)
                for item in SplatoonData.REQUIRED_PRIMARIES:
                    candidate_primaries_clone.remove(item)

                new_primaries = []
                for i in range(len(alpha_primaries_clone)):
                    if SplatoonData.RANDOM.randint(0, 1):
                        new_primaries.append(alpha_primaries_clone[i])
                    else:
                        new_primaries.append(candidate_primaries_clone[i])

                new_primaries = new_primaries + SplatoonData.REQUIRED_PRIMARIES
                if (SplatoonData.list_in_list(SplatoonData.REQUIRED_PRIMARIES,
                                              new_primaries)):
                    break

            while True:
                alpha_secondaries_clone = copy.deepcopy(alpha_secondaries)
                for item in SplatoonData.REQUIRED_SECONDARIES:
                    alpha_secondaries_clone.remove(item)

                candidate_secondaries_clone = copy.deepcopy(
                    candidate_secondaries)
                for item in SplatoonData.REQUIRED_SECONDARIES:
                    candidate_secondaries_clone.remove(item)

                new_secondaries = []
                for i in range(len(alpha_secondaries_clone)):
                    if SplatoonData.RANDOM.randint(0, 1):
                        new_secondaries.append(alpha_secondaries_clone[i])
                    else:
                        new_secondaries.append(candidate_secondaries_clone[i])

                new_secondaries = new_secondaries + SplatoonData.REQUIRED_SECONDARIES
                if (SplatoonData.list_in_list(
                        SplatoonData.REQUIRED_SECONDARIES, new_secondaries)):
                    break

            while True:
                mutated_primaries = self.mutate_primaries(new_primaries)
                if (SplatoonData.list_in_list(SplatoonData.REQUIRED_PRIMARIES,
                                              mutated_primaries)):
                    break

            while True:
                mutated_secondaries = self.mutate_secondaries(new_secondaries)
                if (SplatoonData.list_in_list(
                        SplatoonData.REQUIRED_SECONDARIES,
                        mutated_secondaries)):
                    break

            new_primaries = mutated_primaries
            new_secondaries = mutated_secondaries

            loadout = Loadout(community[0].weapon["name"],
                              community[0].sub["name"],
                              community[0].special["name"])
            loadout.primaries = new_primaries
            loadout.secondaries = new_secondaries
            loadout.get_fitness()
            new_community.append(loadout)

        return new_community