def select_spouse(self, potential_spouses): if not potential_spouses: return None attractions = [ self.sexual_attraction(spouse) for spouse in potential_spouses ] return potential_spouses[utils.dist_selection( utils.normalize_dist(attractions))]
def decide(self, state): eps = max( ConfigBrain.BASE_EPSILON, 1 - (self._age / (self.learning_frequency() * ConfigBiology.MATURITY_AGE))) brain_actions_prob = self.brain().think(state) action_prob = utils.normalize_dist(self.fitrah() + brain_actions_prob) decision = utils.epsilon_greedy(eps, action_prob) return decision
def mutate_dna(dna): memory_size = max(10, int(dna.memory_size()) + randint(-1, 1)) learning_rate = max( np.random.normal(loc=dna.learning_rate(), scale=0.001), 1e-6) brain_structure_param = max( 2, dna.brain_structure_param() + randint(-1, +1)) learning_frequency = max(dna.learning_frequency() + randint(-1, 1), 1) life_expectancy = max(0, dna.life_expectancy() + randint(-10, 10)) reward_discount = max( 0.1, min(1, np.random.normal(loc=dna.reward_discount(), scale=0.1))) fitrah = utils.normalize_dist( dna.fitrah() + np.random.normal(loc=0, scale=ConfigBiology.EVOLUTION_MUTATION_STD, size=dna.fitrah().size)) return DNA(memory_size, learning_rate, brain_structure_param, learning_frequency, life_expectancy, reward_discount, fitrah)
def race_fitrah(): return utils.normalize_dist(Human.Fitrah)
def race_fitrah(): return utils.normalize_dist(Zombie.Fitrah)
def decide(self, state): brain_actions_prob = self._brain.think(state) action_prob = utils.normalize_dist( brain_actions_prob) # + self.fitrah() decision = utils.epsilon_greedy(0, dist=action_prob) return decision
def race_fitrah(): return utils.normalize_dist(Bacterium.Fitrah)