Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import numpy as np
- class Agent:
- def __init__(self, W, w):
- self.w = w
- self.W = W
- def mutate(self):
- n, m = self.W.shape
- rand = np.random.randint(n, size=50)
- for i in range(0, 50):
- vec = np.zeros(m)
- ind = np.random.randint(m)
- vec[ind] = 1
- self.w[rand[i]] = ind
- self.W[rand[i]] = vec
- def calculate(self, T):
- return np.max(T.dot(self.W).diagonal())
- class Environment:
- def __init__(self, n, T, m):
- self.n = n
- self.m = m
- self.T = np.array(T)
- def get_random_agent(self):
- w = []
- W = []
- for i in range(self.n):
- W.append(np.zeros(self.m))
- ind = np.random.randint(self.m)
- W[-1][ind] = 1
- w.append(ind)
- W = np.array(W)
- w = np.array(w)
- agent = Agent(W, w)
- agent.mutate()
- return agent
- def get_Q(self, agent):
- return agent.calculate(self.T)
- def crossover(self, agent1, agent2):
- bin_a = np.random.choice([True, False], size=(self.n,), p=[1./2, 1./2])
- W = np.concatenate((agent1.W[bin_a], agent2.W[~bin_a]))
- w = np.concatenate((agent1.w[bin_a], agent2.w[~bin_a]))
- return Agent(W, w)
- input = '''1000
- 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
- 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
- 10
- 0.54 1.17 1.52 2.18
- 0.31 0.66 1.13 1.76
- 0.48 1.09 1.78 2.39
- 0.61 1.09 1.5 2.04
- 0.66 1.02 1.42 1.79
- 0.44 0.77 1.16 1.47
- 0.59 1.23 1.59 2.13
- 0.49 1.08 1.67 2.35
- 0.55 1 1.3 1.67
- 0.37 0.8 1.44 2.01'''
- # input = '''3
- # 1 1 4
- # 5.2 3.4 4
- # 2
- # 1 1 2 5
- # 0.7 1 1.2 1.5'''
- input = input.split('\n')
- n = int(input[0])
- difficulties = list(map(int, input[1].split()))
- times = list(map(float, input[2].split()))
- m = int(input[3])
- k_times = [list(map(float, i.split())) for i in input[4:]]
- T = [[], [], [], []]
- for i in range(n):
- T[0].append(0)
- T[1].append(0)
- T[2].append(0)
- T[3].append(0)
- T[difficulties[i]-1][-1] = times[i]
- K = np.array(k_times)
- T = np.array(T)
- T = K.dot(T)
- 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'''
- w = list(map(int, w.split()))
- W = []
- for i in w:
- W.append(np.zeros(10))
- ind = np.random.randint(10)
- W[-1][i] = 1
- W = np.array(W)
- print(W)
- w = np.array(w)
- agent = Agent(W, w)
- env = Environment(n, T, m)
- print(env.get_Q(agent))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement