Advertisement
Guest User

Untitled

a guest
Jun 25th, 2018
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.39 KB | None | 0 0
  1. from itertools import *
  2.  
  3. n = 3
  4.  
  5. probs_matrix = [[0 for _ in range(n)] for _ in range(n)]
  6. gi = [0]
  7.  
  8. def set_to_str(set):
  9.     set = [str(x) for x in set]
  10.     return ''.join(sorted(set))
  11.  
  12. def sets_to_str(s1, s2, s3):
  13.     return "{},{},{}".format(set_to_str(s1), set_to_str(s2), set_to_str(s3))
  14.  
  15. def subsets(set, count):
  16.     return list(combinations(set, count))
  17.  
  18. def val_from_matrix(matrix):
  19.     x_len = len(matrix)
  20.     y_len = x_len
  21.     if len(matrix) == 0 or len(matrix[0]) == 0:
  22.         return 0
  23.     p = MixedIntegerLinearProgram()
  24.     v = p.new_variable()
  25.     x = p.new_variable()
  26.     p.set_objective(v[0])
  27.     p.add_constraint(sum(x[i] for i in range(x_len)) == 1)
  28.     for i in range(x_len):
  29.         p.add_constraint(x[i] >= 0)
  30.    
  31.     for i in range(x_len):
  32.         p.add_constraint(sum(matrix[j][i] * x[j] for j in range(y_len)) - v[0] >= 0)
  33.     p.solve()
  34.     ret = p.get_values(v[0])
  35.     if x_len == n:
  36.         for i in range(n):
  37.             probs_matrix[i][gi[0]] = p.get_values(x[i])
  38.         gi[0] = gi[0] + 1
  39.     return ret
  40.  
  41.  
  42. def get_val_from_dict(V, Y, P):
  43.     str_sets = sets_to_str(V, Y, P)
  44.     if sorted(V) == sorted(Y):
  45.         ret = 0
  46.     elif dict.get(str_sets) is None:
  47.         ret = -1 * dict[sets_to_str(Y, V, P)]
  48.     else:
  49.         ret = dict[str_sets]
  50.     return ret
  51.  
  52. def sublist(list, index):
  53.     return list[:index] + list[index + 1:]
  54.  
  55. def create_row(V, Y, P, k, index):
  56.     row = []
  57.     for i in range(len(Y)):
  58.         row.append(P[k] * 1.0 * sign(V[index] - Y[i]) + get_val_from_dict(sublist(V, index), sublist(Y, i), sublist(P, k)))
  59.     return row
  60.  
  61. def create_matrix(V, Y, P, k):
  62.     mat = []
  63.     for i in range(len(V)):
  64.         mat.append(create_row(V, Y, P, k, i))
  65.     if len(mat) == n:
  66.         show('V=', V, ', Y=', Y, ', P=', P, ', Card ' , P[k],'played, matrix: ', matrix(RR, mat))
  67.     return mat
  68.  
  69. dict = {",,": 0}
  70.  
  71. def compute(n, step):
  72.     subs = subsets(range(1, n + 1), step)
  73.     for i in range(len(subs)):
  74.         for j in range(i + 1):
  75.             for k in range(len(subs)):
  76.                 V = subs[i]
  77.                 Y = subs[j]
  78.                 P = subs[k]
  79.                 dict[sets_to_str(V, Y, P)] = (1.0/len(P)) * sum(val_from_matrix(create_matrix(V, Y, P, kj)) for kj in range(len(P)))
  80.  
  81. def finish(n):
  82.     for i in range(1, n + 1):
  83.         compute(n, i)
  84.  
  85. finish(n)
  86. show('Probability Matrix: ', matrix(RR, probs_matrix))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement