Exemple #1
0
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