def make_planting_decision(self, activities, farm): all_activities = dict(self.eutopia.latest_activity_count) total_activities = float(sum(all_activities.values())) if total_activities > 0: for k, v in all_activities.items(): all_activities[k] /= total_activities if self.preferences.get('follow_local', 0) != 0: local_activities = self.eutopia.get_activity_count(farm.neighbours) total_activities = float(sum(local_activities.values())) if total_activities > 0: for k, v in local_activities.items(): local_activities[k] /= total_activities best = None for activity in activities: total = 0 for pref, weight in self.preferences.items(): if pref == 'follow_society': total += all_activities.get(activity.name, 0) * weight elif pref == 'follow_local': if weight != 0: total += local_activities.get(activity.name, 0) * weight else: total += activity.get_product(pref, farm) * weight # TODO: improve choice algorithm # - maybe by allowing different sensitivities to risk # on different income dimensions if best is None or total > best_total: best = activity best_total = total return best
def step(self): for farm in self.farms: activity = self.make_planting_decision(eutopia.activities.activities, farm) money = activity.get_product('money', farm) self.bank_balance += money farm.last_activity = activity
def step(self): for farm in self.farms: # changed to self.eutopia to make it work with the sim version that is passed to Family21 activity = self.make_planting_decision(self.eutopia.activities.activities, farm) money = activity.get_product('money', farm) self.bank_balance += money farm.last_activity = activity
def make_planting_decision(self, activities, farm): best = None for activity in activities: total = 0 for pref, weight in self.preferences.items(): total += activity.get_product(pref, farm) * weight # TODO: improve choice algorithm # - maybe by allowing different sensitivities to risk # on different income dimensions if best is None or total > best_total: best = activity best_total = total return best
def make_planting_decision(self, activities, farm): all_activities = dict(self.eutopia.latest_activity_count) total_activities = float(sum(all_activities.values())) if total_activities > 0: for k,v in all_activities.items(): all_activities[k]/=total_activities if self.preferences.get('follow_local', 0) != 0: local_activities = self.eutopia.get_activity_count(farm.neighbours) total_activities = float(sum(local_activities.values())) if total_activities > 0: for k,v in local_activities.items(): local_activities[k]/=total_activities best = None for activity in activities: total = 0 for pref, weight in self.preferences.items(): if pref=='follow_society': total += all_activities.get(activity.name,0) * weight elif pref=='follow_local': if weight != 0: total += local_activities.get(activity.name,0) * weight else: total += activity.get_product(pref, farm) * weight # TODO: improve choice algorithm # - maybe by allowing different sensitivities to risk # on different income dimensions if best is None or total > best_total: best = activity best_total = total return best