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
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