-
Notifications
You must be signed in to change notification settings - Fork 0
/
my_thread.py
36 lines (31 loc) · 1.11 KB
/
my_thread.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
import multiprocessing
import minimaxAIParallel as ai
import minimaxCommon as mmUtil
from functools import partial
from operator import itemgetter
def find_min(board, activePlayer, alpha, beta, depth, mov_cpu):
print "[" + str(depth) + "] Data for move " + str(mov_cpu[0]) + ": " + str(mov_cpu)
a = mov_cpu[0]
numCPU = mov_cpu[1]
if numCPU == 1:
return (a, ai.min_value(mmUtil.make_move(board,a,activePlayer), alpha, beta, depth+1))
else:
moves = mmUtil.get_moves(board)
data = []
for move in moves:
data.append((move, 1))
pool = multiprocessing.Pool(processes = numCPU)
func = partial(find_max, board, activePlayer, alpha, beta, depth+1)
v_maxs = pool.map_async(func, data)
pool.close()
pool.join()
mov_val = min(v_maxs.get(), key=itemgetter(1)) # (move, value)
return mov_val
def find_max(board, activePlayer, alpha, beta, depth, mov_cpu):
print "[" + str(depth) + "]Data for move " + str(mov_cpu[0]) + ": " + str(mov_cpu)
a = mov_cpu[0]
if activePlayer == 1:
opponentPlayer = 0
else:
opponentPlayer = 1
return (a, ai.max_value(mmUtil.make_move(board,a,opponentPlayer), alpha, beta, depth+1))