-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathevaluation.py
38 lines (34 loc) · 1.67 KB
/
evaluation.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
from utils.xiangqi import Xiangqi
class Evaluation:
def evaluate(self, xiangqi: Xiangqi):
# count the number of pieces, for material value of cannons and horses
piece_count = xiangqi.get_piece_count()
# calculate material value and piece activities
red_value = 0 # will be a positive value
black_value = 0 # will be a negative value
for row, arr in enumerate(xiangqi.board):
for col, piece in enumerate(arr):
if piece is None:
continue
piece_value = piece.value((row, col), piece_count) * piece.activity(xiangqi, (row, col))
# print(row, col, piece, piece_value)
if piece_value > 0:
red_value += piece_value
else:
black_value += piece_value
# calculate bonus for specific piece positions
values = (red_value, black_value)
bonus = 0
for row, arr in enumerate(xiangqi.board):
for col, piece in enumerate(arr):
if piece is None:
continue
if piece.turn == xiangqi.turn:
# print(piece, (row, col), piece.bonus(xiangqi, (row, col), values))
bonus += piece.bonus(xiangqi, (row, col), values)
else:
# print(piece, (row, col), piece.bonus(xiangqi.reverse_board(), (row, col), values))
bonus += piece.bonus(xiangqi.reverse_board(), (row, col), values)
# add value to the side taking the turn
turn_value = 50 if xiangqi.turn else -50
return red_value + black_value + bonus + turn_value