Advertisement
Guest User

Untitled

a guest
Nov 22nd, 2019
154
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 9.07 KB | None | 0 0
  1. import numpy as np
  2.  
  3. class Agent:
  4.   def __init__(self, W, w):
  5.     self.w = w
  6.     self.W = W
  7.  
  8.   def mutate(self):
  9.     n, m = self.W.shape
  10.     rand = np.random.randint(n, size=50)
  11.     for i in range(0, 50):
  12.       vec = np.zeros(m)
  13.       ind = np.random.randint(m)
  14.       vec[ind] = 1
  15.  
  16.       self.w[rand[i]] = ind
  17.       self.W[rand[i]] = vec
  18.  
  19.   def calculate(self, T):
  20.     return np.max(T.dot(self.W).diagonal())
  21.  
  22. class Environment:
  23.   def __init__(self, n, T, m):
  24.     self.n = n
  25.     self.m = m
  26.     self.T = np.array(T)
  27.  
  28.   def get_random_agent(self):
  29.     w = []
  30.     W = []
  31.     for i in range(self.n):
  32.       W.append(np.zeros(self.m))
  33.       ind = np.random.randint(self.m)
  34.       W[-1][ind] = 1
  35.       w.append(ind)
  36.  
  37.     W = np.array(W)
  38.     w = np.array(w)
  39.  
  40.     agent = Agent(W, w)
  41.     agent.mutate()
  42.     return agent
  43.  
  44.   def get_Q(self, agent):
  45.     return agent.calculate(self.T)
  46.  
  47.   def crossover(self, agent1, agent2):
  48.     bin_a = np.random.choice([True, False], size=(self.n,), p=[1./2, 1./2])
  49.  
  50.     W = np.concatenate((agent1.W[bin_a], agent2.W[~bin_a]))
  51.     w = np.concatenate((agent1.w[bin_a], agent2.w[~bin_a]))
  52.     return Agent(W, w)
  53.  
  54.  
  55. input = '''1000
  56. 2 3 1 2 4 4 2 2 2 4 3 3 4 4 1 3 2 4 4 1 3 1 2 2 3 2 3 2 4 4 4 3 2 3 4 4 3 1 3 4 1 1 2 2 3 2 1 3 4 3 2 2 4 2 2 1 2 3 2 3 2 4 3 2 3 1 3 2 1 4 2 4 4 4 3 2 2 1 4 1 2 4 2 1 4 1 2 2 4 3 2 3 3 1 1 3 2 1 4 4 4 4 1 2 2 1 4 1 3 2 3 1 4 4 3 3 1 1 4 1 4 1 1 2 2 4 1 3 3 3 3 4 1 4 2 4 2 1 1 2 1 3 2 4 3 4 2 4 3 1 3 4 2 4 3 2 3 2 3 4 1 4 3 4 2 2 3 3 4 4 2 4 2 4 2 3 1 4 1 1 2 4 2 2 4 4 3 3 4 2 2 2 1 4 3 1 3 3 4 3 2 1 4 3 3 1 4 3 3 4 1 3 4 2 1 3 1 2 3 2 2 2 3 4 1 2 1 1 4 1 2 2 4 2 4 4 4 1 4 3 1 3 1 4 1 3 1 4 2 1 2 2 1 2 2 1 1 3 2 1 2 3 1 2 4 1 3 4 4 1 3 2 1 2 4 4 1 1 3 4 3 4 2 4 4 2 1 2 1 2 3 2 3 3 1 2 2 3 2 2 3 1 1 1 4 3 1 1 3 1 1 1 2 4 2 4 4 1 1 1 1 2 3 1 4 4 3 2 2 3 1 3 2 4 1 1 2 1 1 1 1 1 1 4 2 4 3 4 4 3 4 1 1 2 4 4 2 3 4 4 2 4 1 4 2 4 3 4 2 4 3 3 1 2 3 1 2 2 1 4 2 4 1 3 1 1 2 3 2 4 4 3 4 3 4 2 2 2 2 3 4 2 2 4 4 2 2 4 3 1 2 1 1 2 4 2 3 4 1 4 3 2 4 4 1 4 3 4 2 1 2 2 1 2 3 4 1 4 1 2 4 1 4 1 1 2 1 4 1 2 4 3 3 3 1 1 3 4 2 4 2 2 4 2 4 3 1 3 3 4 2 2 2 2 2 4 3 4 1 1 2 4 1 3 4 2 1 3 2 4 2 2 4 3 2 4 1 4 3 1 1 3 3 4 3 3 3 3 2 2 1 2 3 1 3 3 1 4 2 2 3 4 4 2 1 2 1 3 2 1 4 3 1 4 1 1 3 4 4 3 3 1 3 1 3 1 3 2 4 3 1 4 1 1 3 2 2 1 2 1 3 4 4 1 4 3 1 3 2 1 4 1 1 3 3 3 4 3 1 1 3 4 2 3 4 2 2 2 4 2 2 2 1 3 4 2 3 1 2 2 3 2 1 1 1 1 1 4 4 3 1 2 4 4 1 1 4 4 4 2 4 3 3 4 4 4 3 1 2 2 2 2 1 2 4 4 1 2 2 3 3 3 4 4 4 1 3 2 3 2 4 1 4 3 2 2 2 4 3 2 3 2 1 4 2 2 2 3 3 3 3 2 4 1 1 3 4 3 2 2 1 3 3 2 2 1 2 2 1 1 4 2 1 1 3 3 4 3 2 1 1 2 3 1 1 3 1 1 4 1 4 2 2 3 4 1 3 2 3 4 3 4 2 1 3 3 4 3 4 4 3 2 1 2 2 2 2 2 2 4 3 1 4 2 4 4 1 2 2 2 2 3 2 1 4 2 2 2 1 2 1 4 3 4 3 3 2 2 1 4 3 2 1 1 2 4 1 4 3 3 1 4 4 3 4 3 2 4 3 3 3 4 2 4 1 4 2 4 4 3 1 4 1 4 1 3 1 4 3 1 3 2 2 4 2 3 3 3 2 4 4 2 3 2 3 2 3 1 2 1 4 2 3 3 1 4 4 2 3 1 4 1 1 4 3 2 2 4 4 1 1 2 4 2 1 2 4 1 3 2 1 2 3 4 4 3 2 3 1 3 4 1 2 2 1 1 3 2 1 1 3 2 1 3 4 2 4 2 2 1 1 3 2 1 2 2 2 1 3 3 4 4 1 1 2 2 4 1 1 1 1 4 2 3 2 3 3 2 1 2 1 2 4 1 2 4 3 3 1 1 2 4 3 4 3 2 3 3 2 1 1 2 2 1 2 4 1 4 1 2 3 4 2 1 1 3 1 3 2 3 2 3 1 4 3 1 2 4 2 1 3 3 3 1 4 2 4 4 3 1 4 1 2 4 2 4 2 1 3 3 1 1 4 1 1 1 1 3 2 1
  57. 4.5 9 8.5 9 1 1.5 6 6 7.5 7 6.5 3.5 4 8.5 7.5 0.5 8.5 3 0.5 6 6 2.5 1.5 2.5 6 9.5 4 7 4 7.5 6.5 1 8 5.5 10 4.5 2.5 9.5 3.5 8 6.5 6 7 1 1 4.5 4 9.5 0.5 6.5 8 7.5 8.5 5 4 6 2.5 3.5 1.5 8.5 5.5 7 4 2.5 2 5.5 3 3.5 4.5 6.5 9 2 8 8 3 8 9.5 9.5 7.5 4.5 1 1.5 6.5 1.5 3.5 1 9.5 5.5 8.5 8.5 6.5 3.5 3 7 3.5 5 4 3 6.5 3 8.5 4.5 4 5.5 7 10 3 8.5 6 1 4 6.5 6.5 10 2 1.5 5 6 1.5 4 5.5 3.5 6 0.5 4 4 7.5 4.5 2 5.5 4.5 2.5 1 5.5 5 4.5 1 0.5 8 2 7.5 3.5 2.5 3 6.5 6.5 6.5 5 10 1 9.5 9 4 1.5 7 10 4.5 9 5 9 7 6.5 4 8 7.5 2 4.5 2.5 8.5 1 7.5 1 8.5 1 9 3 4 10 1.5 1 2 8.5 1.5 3 1 9.5 8 4.5 7.5 8.5 9 4.5 0.5 2 6.5 8 9 1.5 10 2 7 2.5 8 4.5 5 4.5 4 6 4.5 4 3 3 1.5 7.5 5.5 10 1.5 7 3 2.5 6 1 7 2.5 0.5 5 3.5 1 9.5 8.5 10 2.5 1 7.5 10 4.5 6 5.5 7 3.5 1.5 1.5 1 7.5 4 7.5 6.5 4 2.5 5 3 2.5 10 6.5 5.5 3 9.5 3 2 9 6.5 6.5 2 4 6.5 6.5 2.5 9.5 3.5 1.5 2 6 4.5 1.5 5.5 2 3 7.5 7 9.5 1.5 7.5 6 0.5 7.5 1.5 0.5 1.5 1 8.5 3.5 3 1 3 2.5 2.5 1.5 4.5 7.5 5.5 5 2 8.5 1 1 6 2 3 6.5 2.5 5.5 7.5 2.5 0.5 9 5 9.5 2.5 3 8.5 4.5 9.5 7.5 2 3 7.5 1.5 1.5 4.5 9 10 1 1 2.5 10 4.5 2.5 6.5 1.5 7.5 6.5 2 0.5 6.5 0.5 8 3 1 2.5 6.5 8.5 10 3.5 4.5 8.5 3 0.5 4.5 5 3 2 10 3.5 1.5 0.5 10 4 4 2 8 4 6.5 6 5 3.5 4 3.5 7.5 2 9 2 9.5 10 0.5 3.5 7 2 9 1.5 6 4.5 1.5 5 2.5 1 3 1 6 8 1 3.5 3 6 2 5.5 9.5 3 10 8.5 6 5.5 2 7.5 4.5 9.5 7.5 8.5 7 3 2.5 5 5 4 1 4 6 0.5 3 1 6 4.5 8.5 5.5 4.5 2.5 3.5 9.5 8.5 6 6.5 3 4 9.5 5.5 5 1.5 2.5 2 6.5 3 6 10 6.5 7.5 9.5 7 6.5 10 10 1 9 0.5 7 8.5 8.5 5 1.5 2 2.5 3.5 3.5 2 7.5 5 10 1.5 4 1.5 5.5 9.5 7.5 2.5 7.5 6.5 6.5 1 5.5 1.5 2 1.5 8.5 10 6.5 7.5 5.5 2.5 8.5 7.5 3 5.5 7.5 8 8.5 2 7 0.5 1 5.5 8.5 6 8.5 4.5 1 4 10 1 2.5 6 6.5 1 5.5 6.5 10 9.5 4.5 7 4.5 3.5 1 6.5 6 8 6.5 5.5 1 7 2 5 7 7 1 2 9.5 7.5 6.5 2.5 6.5 1.5 2.5 2 9.5 2 7.5 8.5 0.5 7.5 4.5 7.5 4.5 2 1.5 5 10 10 8 6.5 4.5 7 10 8.5 2.5 7.5 4 1.5 5.5 5.5 4.5 10 4 2 2 8 8.5 1 4 5 4.5 3.5 0.5 5.5 0.5 4 1 7 6.5 9.5 8.5 6.5 4 3.5 7 2.5 2 6 3 1.5 7.5 5.5 5.5 4 0.5 2.5 6 6.5 7.5 6 10 6.5 1.5 9.5 1 6 4 0.5 7.5 8 9 7.5 1 5 5 3.5 4.5 1 3.5 7 8 1 7 5.5 7.5 4.5 3 9 1 7.5 8.5 5 3 2 8 5.5 1.5 9 1 7 9 7 10 10 5 8.5 1 4 10 1.5 4.5 10 2.5 8.5 0.5 7.5 5.5 8.5 8 7 4 5.5 3 9 2 5 2 1 8 5.5 6 5 6 6 1.5 5.5 7.5 10 0.5 3.5 6.5 6 10 6 2 3 2.5 3.5 2.5 9 8.5 0.5 1 9 3.5 4 7.5 8.5 7.5 0.5 5.5 7 0.5 0.5 9 5.5 6.5 10 7 3.5 2 8.5 1.5 10 4.5 4 5 7.5 4 8 2.5 1.5 8.5 7 7.5 2.5 7.5 3.5 6 5.5 8.5 1.5 5 0.5 4 2.5 9.5 5.5 5 1 3.5 8 3 4.5 1 9 9 5 2.5 10 9 3.5 10 1 7.5 5 7.5 7.5 7.5 1.5 9.5 2.5 7.5 4.5 6 6 4.5 4.5 0.5 2.5 3.5 5 3.5 8.5 1 0.5 6 5.5 2.5 4.5 5 1 9.5 7.5 8 5 7.5 7.5 3 2 8.5 1.5 8 2.5 1.5 7.5 2.5 9 7 6.5 10 8.5 5 6.5 1.5 8.5 6 5 8 2.5 5.5 0.5 1 8.5 9.5 5 0.5 1 10 1 6.5 4.5 5.5 7 4.5 7 3.5 1.5 7 2.5 1.5 9 9.5 5.5 4 7 4.5 1 8.5 10 5.5 4 7 4 4.5 4.5 6.5 6.5 6 8.5 7 4.5 5.5 8 9 9.5 4.5 7.5 4.5 2 7.5 6.5 9.5 3.5 8 5 4.5 2 7 1.5 5 2.5 4 2 1 4 4 7 1 1 4 1.5 6.5 10 2 4.5 1 2 2.5 7 9.5 5 9 8.5 9 8 3 6.5 3.5 7.5 0.5 1 2 4 0.5 1 7 5 7.5 8 9 0.5 1 8.5 6.5 10 6 9 0.5 0.5 7.5 2 9 6.5 2 5.5 8.5 8.5 3 1.5 5.5 6 4.5 2.5 3 2.5 9 8.5 6 3.5 5 2 4 8 2 4 1.5 0.5 1.5 0.5 8.5 8.5 1.5 5.5 4 7.5 5.5 6.5 8.5 8 6.5 5.5 4.5 3.5 2 1 5.5 2.5 9 2 1 0.5 9 6.5 3.5 9.5 3 8.5 5 9.5 7.5 5 6 2.5
  58. 10
  59. 0.54 1.17 1.52 2.18
  60. 0.31 0.66 1.13 1.76
  61. 0.48 1.09 1.78 2.39
  62. 0.61 1.09 1.5 2.04
  63. 0.66 1.02 1.42 1.79
  64. 0.44 0.77 1.16 1.47
  65. 0.59 1.23 1.59 2.13
  66. 0.49 1.08 1.67 2.35
  67. 0.55 1 1.3 1.67
  68. 0.37 0.8 1.44 2.01'''
  69.  
  70. # input = '''3
  71. # 1 1 4
  72. # 5.2 3.4 4
  73. # 2
  74. # 1 1 2 5
  75. # 0.7 1 1.2 1.5'''
  76.  
  77. input = input.split('\n')
  78. n = int(input[0])
  79. difficulties = list(map(int, input[1].split()))
  80. times = list(map(float, input[2].split()))
  81. m = int(input[3])
  82. k_times = [list(map(float, i.split())) for i in input[4:]]
  83.  
  84.  
  85. T = [[], [], [], []]
  86. for i in range(n):
  87.   T[0].append(0)
  88.   T[1].append(0)
  89.   T[2].append(0)
  90.   T[3].append(0)
  91.   T[difficulties[i]-1][-1] = times[i]
  92.  
  93. K = np.array(k_times)
  94. T = np.array(T)
  95.  
  96. T = K.dot(T)
  97.  
  98.  
  99. w = '''0 4 6 9 1 7 7 1 2 9 8 7 5 9 8 5 8 1 9 9 1 0 6 7 2 3 5 4 1 9 4 2 3 5 0 9 0 5 7 9 0 0 1 1 3 6 2 9 1 8 7 3 8 9 3 1 1 5 9 5 6 0 4 5 2 1 2 7 0 9 6 9 9 0 8 0 5 3 7 4 0 0 1 2 0 2 1 4 9 8 3 4 7 2 1 8 4 6 0 7 9 9 5 1 2 9 4 9 6 8 9 5 9 9 0 3 1 2 0 3 9 8 5 8 0 9 9 7 0 4 4 9 9 9 2 6 7 7 1 0 1 0 5 2 6 9 4 9 5 1 3 0 6 0 8 9 6 1 3 9 9 9 7 9 1 9 7 4 9 9 2 1 8 4 5 0 0 9 4 1 5 9 2 1 9 9 4 9 9 3 0 1 5 6 7 9 8 6 9 0 6 7 9 8 5 3 9 6 2 9 9 9 2 1 1 5 1 7 8 9 3 1 4 9 2 6 9 0 9 2 0 2 2 1 9 8 9 1 9 5 7 9 3 8 1 4 8 0 7 9 3 5 2 3 6 1 7 4 3 1 0 5 2 6 0 1 2 9 9 3 7 4 1 8 9 9 2 9 5 9 6 9 8 7 9 5 2 1 2 0 9 0 2 8 1 2 7 4 7 3 5 2 9 7 0 4 3 9 6 2 9 6 8 7 1 9 0 7 5 1 2 8 3 3 8 0 8 3 2 5 7 8 3 4 9 2 7 1 9 1 0 4 2 9 9 0 8 9 9 4 9 9 2 1 9 9 6 0 9 6 6 9 1 0 7 9 3 7 0 9 4 8 7 5 6 2 6 9 8 9 2 9 1 1 0 1 3 5 7 9 9 4 9 0 9 9 6 7 3 4 9 6 4 0 9 2 4 9 5 7 3 0 1 9 9 8 6 9 9 1 8 0 4 9 1 9 7 8 1 2 3 1 9 0 2 4 9 9 7 4 9 5 0 7 3 0 1 6 7 5 9 5 3 8 9 9 6 9 1 3 2 8 9 0 9 4 2 5 3 2 6 6 1 7 4 8 5 0 7 9 5 9 2 8 9 2 9 3 7 0 1 6 9 3 9 9 5 9 4 2 3 8 0 9 4 9 4 7 0 7 9 8 7 2 5 6 1 9 6 2 5 9 9 9 8 1 1 2 9 1 0 8 9 9 5 1 6 9 9 4 3 8 3 1 0 5 6 4 9 5 2 3 1 9 0 7 6 9 7 4 9 7 9 2 8 5 2 1 8 4 7 0 6 4 0 3 7 5 5 1 9 9 4 8 9 8 6 2 8 9 7 0 1 6 2 1 3 9 2 7 8 9 1 4 7 2 7 0 9 4 4 9 9 9 7 1 9 9 9 1 2 5 9 2 0 9 5 2 8 6 3 5 1 8 8 9 1 4 4 6 8 0 9 9 0 7 0 9 2 5 9 7 2 3 7 5 2 9 4 8 9 7 1 7 1 6 6 5 5 8 6 1 0 9 9 4 0 0 3 6 6 3 5 7 1 0 7 8 9 9 9 0 2 9 7 5 0 4 8 1 1 3 5 7 7 6 1 9 9 1 9 3 3 2 7 6 4 9 2 9 5 6 1 7 5 8 9 4 1 9 5 6 7 3 7 9 6 7 0 9 8 2 9 1 0 6 1 0 4 2 8 6 2 9 9 4 0 1 4 0 7 9 3 9 4 8 5 4 2 7 9 3 1 1 7 9 1 9 0 5 5 9 9 6 0 9 6 9 2 8 1 2 4 9 7 9 9 0 9 6 9 9 2 7 1 2 3 4 1 7 4 4 9 8 0 5 5 3 4 9 9 6 0 2 7 8 8 8 4 1 9 6 7 3 9 8 9 0 4 9 9 8 0 9 5 8 4 9 9 3 8 2 9 1 1 1 9 6 9 7 9 3 0 9 4 7 5 3 9 5 9 1 2 8 1 3 6 4 2 1 4 1 1 5 9 0 9 2 5 3 5 3 1 9 6 3 0 2 6 8 9 9 9 8 1 7 9 3 9 5 1 9 5 2 7 0 3 7 4 8 1 3 9 1 9 8 4 9 6 9 0 9 3 9 1 3 8 3 5 4 9 7 6 2 8 9 1 9 9 2 6 9 1 5 1 4 7 9 3 5 7 2 8 6 4 2 0 9 4 9 6 8 7 2 9 1 9 9 3 9 3 5 5 8 0 9 1 8 4 6 7 9 8 9 7 1 2 8 3 5'''
  100.  
  101. w = list(map(int, w.split()))
  102. W = []
  103. for i in w:
  104.   W.append(np.zeros(10))
  105.   ind = np.random.randint(10)
  106.   W[-1][i] = 1
  107.  
  108. W = np.array(W)
  109. print(W)
  110. w = np.array(w)
  111.  
  112.  
  113. agent = Agent(W, w)
  114. env = Environment(n, T, m)
  115.  
  116. print(env.get_Q(agent))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement