def random_vs_ttc(n_courses, n_students, min_cap, max_cap, iters): """ Compare RandomLottery outcome with RL+TTC outcome. """ f = Factory(n_courses, n_students, min_cap, max_cap) student_diffs = [] total_diffs = [] mean_student_diffs = [] for i in xrange(iters): courses, students = f.generate() # Run the RandomLottery rl = RandomLottery(courses, students) rl_students = rl.run() rl_utils = [s.get_studycard_value() for s in rl.students] rl_welfare = sum(rl_utils) # Run TTC on the output of RandomLottery ttc = TTC(deepcopy(rl_students)) ttc.run() ttc_utils = [s.get_studycard_value() for s in ttc.students] ttc_welfare = sum(ttc_utils) # Compute summary statistics total_diff = (ttc_welfare - rl_welfare) / float(ttc_welfare + rl_welfare) * 100 total_diffs.append(total_diff) student_diff = [(t - r) / float(t + r) * 100 if t + r else 0 for t, r in zip(ttc_utils, rl_utils)] student_diffs.append(student_diff) mean_student_diff = np.mean(student_diff) mean_student_diffs.append(mean_student_diff) print print "==========================================" print "Overall Welfare Improvement (%): " print "mean: ", np.mean(total_diffs), "std: ", np.std(total_diffs) print "==========================================" print "Mean Individual Welfare Improvement (%):" print "mean: ", np.mean(mean_student_diffs), "std: ", np.std(mean_student_diffs) print "==========================================" print return student_diffs, total_diffs, mean_student_diffs