def test__compute_probabilities(self): lists = [[1, 2], [2, 3]] b = il.Optimized(lists, sample_num=3) rankings = [] r = CreditRanking(num_rankers=len(lists), contents=[1, 2]) r.credits = {0: {1: 1.0, 2: 0.5}, 1: {1: 1.0 / 3, 2: 1.0}} rankings.append(r) r = CreditRanking(num_rankers=len(lists), contents=[2, 1]) r.credits = {0: {1: 1.0, 2: 0.5}, 1: {1: 1.0 / 3, 2: 1.0}} rankings.append(r) r = CreditRanking(num_rankers=len(lists), contents=[2, 3]) r.credits = {0: {2: 0.5, 3: 1.0 / 3}, 1: {2: 1.0, 3: 0.5}} rankings.append(r) is_success, p, minimum = b._compute_probabilities(lists, rankings) assert is_success assert (p >= 0).all() assert (p <= 1).all() assert minimum >= 0 self.assert_almost_equal(np.sum(p), 1) self.assert_almost_equal(np.inner([1 - 1.0 / 3, -0.5, -0.5], p), 0) self.assert_almost_equal( np.inner([0.5 - 1.0 / 3, 0.5 - 1.0 / 3, -1 + 1.0 / 3], p), 0) self.assert_almost_equal(p[0], 0.4285714273469387) self.assert_almost_equal(p[1], 0.37142857025306114) self.assert_almost_equal(p[2], 0.20000000240000002)
def test__unbiasedness_constraints(self): lists = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] b = il.Optimized(lists, sample_num=27) res = b._unbiasedness_constraints(lists, b._rankings) assert res.shape[0] == (3-1)*3 assert res.shape[1] == len(b._rankings) lists = [[1, 2], [2, 3]] b = il.Optimized(lists, sample_num=3) res = b._unbiasedness_constraints(lists, b._rankings) ideal = { (1, 2): [1-1.0/3, 1.5-1.0-1.0/3], (2, 3): [0.5-1.0, 0.5+1.0/3-1.5], (2, 1): [0.5-1.0, 1.5-1.0-1.0/3]} assert res.shape == (2, 3) for i in range(2): for j, r in enumerate(b._rankings): res[i, j] = ideal[tuple(r)][i] lists = [[1, 2], [1, 3], [1, 4]] b = il.Optimized(lists, sample_num=3) rankings = [] r = CreditRanking(num_rankers=len(lists), contents=[1, 2]) r.credits = { 0: {1: 1.0, 2: 0.5}, 1: {1: 1.0, 2: 1.0/3}, 2: {1: 1.0, 2: 1.0/3}} rankings.append(r) r = CreditRanking(num_rankers=len(lists), contents=[1, 3]) r.credits = { 0: {1: 1.0, 3: 1.0/3}, 1: {1: 1.0, 3: 0.5}, 2: {1: 1.0, 3: 1.0/3}} rankings.append(r) r = CreditRanking(num_rankers=len(lists), contents=[1, 4]) r.credits = { 0: {1: 1.0, 4: 1.0/3}, 1: {1: 1.0, 4: 1.0/3}, 2: {1: 1.0, 4: 0.5}} rankings.append(r) res = b._unbiasedness_constraints(lists, rankings) assert res.shape == (4, 3) assert res[0, 0] == 0 # Rank 1, Ranking 1, System 1 - System 2 assert res[0, 1] == 0 # Rank 1, Ranking 2, System 1 - System 2 assert res[0, 2] == 0 # Rank 1, Ranking 3, System 1 - System 2 # Rank 2, Ranking 1, System 1 - System 2 self.assert_almost_equal(res[1, 0], 0.5-1.0/3) # Rank 2, Ranking 2, System 1 - System 2 self.assert_almost_equal(res[1, 1], 1.0/3-0.5) assert res[1, 2] == 0 # Rank 2, Ranking 3, System 1 - System 2 assert res[2, 0] == 0 # Rank 1, Ranking 1, System 2 - System 3 assert res[2, 1] == 0 # Rank 1, Ranking 2, System 2 - System 3 assert res[2, 2] == 0 # Rank 1, Ranking 3, System 2 - System 3 assert res[3, 0] == 0 # Rank 2, Ranking 1, System 2 - System 3 # Rank 2, Ranking 2, System 2 - System 3 self.assert_almost_equal(res[3, 1], 0.5-1.0/3) # Rank 2, Ranking 3, System 2 - System 3 self.assert_almost_equal(res[3, 2], 1.0/3-0.5)
def setup(self): self.lists = [[1, 2], [2, 3]] self.rankings = [] r = CreditRanking(num_rankers=len(self.lists), contents=[1, 2]) r.credits = {0: {1: 1.0, 2: 0.5}, 1: {1: 1.0 / 3, 2: 0.0}} self.rankings.append(r) r = CreditRanking(num_rankers=len(self.lists), contents=[2, 1]) r.credits = {0: {1: 1.0, 2: 0.5}, 1: {1: 0.5, 2: 1.0 / 3}} self.rankings.append(r) r = CreditRanking(num_rankers=len(self.lists), contents=[2, 3]) r.credits = {0: {2: 0.5, 3: 1.0 / 3}, 1: {2: 1.0 / 3, 3: 0.0}} self.rankings.append(r) il.Optimized = il.RoughlyOptimized # Trick
def test__sensitivity(self): lists = [[1, 2], [2, 3]] b = il.Optimized(lists, sample_num=3) rankings = [] r = CreditRanking(num_rankers=len(lists), contents=[1, 2]) r.credits = {0: {1: 1.0, 2: 0.5}, 1: {1: 1.0/3, 2: 1.0}} rankings.append(r) r = CreditRanking(num_rankers=len(lists), contents=[2, 1]) r.credits = {0: {1: 1.0, 2: 0.5}, 1: {1: 1.0/3, 2: 1.0}} rankings.append(r) r = CreditRanking(num_rankers=len(lists), contents=[2, 3]) r.credits = {0: {2: 0.5, 3: 1.0/3}, 1: {2: 1.0, 3: 0.5}} rankings.append(r) res = b._sensitivity(lists, rankings) assert len(res) == 3 assert res[0] == ((1 + 0.5 * 0.5 - (1.75+1.0/3)/2) ** 2 + (1.0/3+0.5 - (1.75+1.0/3)/2) ** 2) assert res[1] == ((0.5 + 0.5 - (2.0+0.5/3)/2) ** 2 + (1.0+1.0/3*0.5 - (2.0+0.5/3)/2) ** 2) assert res[2] == ((0.5 + 0.5 * 1.0/3 - (1.75+0.5/3)/2) ** 2\ + (1.0 + 0.5 * 0.5 - (1.75+0.5/3)/2) ** 2)