forked from datamllab/rlcard
-
Notifications
You must be signed in to change notification settings - Fork 0
/
doudizhu_random_process_pool.py
52 lines (40 loc) · 1.28 KB
/
doudizhu_random_process_pool.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
''' A toy example of playing Doudizhu with random agents in multi processes pool
'''
import time
import multiprocessing
import numpy as np
import rlcard
from rlcard.agents.random_agent import RandomAgent
from rlcard.utils.utils import set_global_seed
if __name__ == '__main__':
# Timer start
start = time.time()
# Avoid RuntimeError
multiprocessing.freeze_support()
# Set the number of process
process_num = 8
# Initialize process pool
pool = multiprocessing.Pool(process_num)
# Set game and make environment
env = rlcard.make('doudizhu')
# Set episode_num
episode_num = 10000
# Set global seed
set_global_seed(1)
# Set up agents
agent_num = env.game.num_players
env.set_agents([RandomAgent(action_num=env.action_num)
for _ in range(agent_num)])
# Run game
trajectories_set = []
for episode in range(episode_num):
# Generate data from the environment
result = pool.apply_async(env.run, args=(False, np.random.randint(10000000)))
trajectories_set.append(result)
for result in trajectories_set:
trajectories, player_wins = result.get()
# print(trajectories, player_wins)
end = time.time()
pool.close()
pool.join()
print('run time:', end-start)