-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
TransPosTable.java
142 lines (132 loc) · 4.24 KB
/
TransPosTable.java
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
import java.io.Serializable;
import java.util.Hashtable;
public class TransPosTable implements Serializable
{
private static final long serialVersionUID = 1L;
private Hashtable<String,TransPosTableEntry> transTable;
//private Board prevBoard = null;
public TransPosTable()
{
transTable = new Hashtable<String,TransPosTableEntry>();
}
public int size()
{
return transTable.size();
}
private void adjustEval(TransPosTableEntry temp)
{
temp.updateEval(((temp.getWinCount()*7) - (temp.getLossCount()*7)) + temp.getEval());
}
//Assuming a true value means whiteWins, false value means black wins: assuming true value passed in for whiteMove means
//the Entry being evaluated came from
public void endGameUpdates(TransPosTableEntry newEntry, boolean whiteWon, boolean whiteMove)
{
//System.out.println("END GAME UPDATES"+transTable.size());
if(whiteWon)
{
if(!transTable.contains(newEntry.getBoard().getCurrZobrist()))
{
if(whiteMove)
{
newEntry.incrementWinCount();
adjustEval(newEntry);
transTable.put(newEntry.getBoard().getCurrZobrist(),newEntry);
}
else
{
newEntry.incrementLossCount();
adjustEval(newEntry);
transTable.put(newEntry.getBoard().getCurrZobrist(),newEntry);
}
}
else//Check whether depth of new entry is greater then entry already present
{
if(whiteMove)
{
if(transTable.get(newEntry.getBoard().getCurrZobrist()).getDepth() < newEntry.getDepth())
{
newEntry.incrementWinCount();
adjustEval(newEntry);
transTable.put(newEntry.getBoard().getCurrZobrist(),newEntry);
}
else if(transTable.get(newEntry.getBoard().getCurrZobrist()).getDepth() >= newEntry.getDepth())
{
transTable.get(newEntry.getBoard().getCurrZobrist()).incrementWinCount();
adjustEval(transTable.get(newEntry.getBoard().getCurrZobrist()));
}
}
else
{
if(transTable.get(newEntry.getBoard().getCurrZobrist()).getDepth() < newEntry.getDepth())
{
newEntry.incrementLossCount();
adjustEval(newEntry);
transTable.put(newEntry.getBoard().getCurrZobrist(),newEntry);
}
else if(transTable.get(newEntry.getBoard().getCurrZobrist()).getDepth() >= newEntry.getDepth())
{
transTable.get(newEntry.getBoard().getCurrZobrist()).incrementLossCount();
adjustEval(transTable.get(newEntry.getBoard().getCurrZobrist()));
}
}
}
}
else
{
if(!transTable.contains(newEntry.getBoard().getCurrZobrist()))
{
if(whiteMove)
{
newEntry.incrementLossCount();
adjustEval(newEntry);
transTable.put(newEntry.getBoard().getCurrZobrist(),newEntry);
}
else
{
newEntry.incrementWinCount();
adjustEval(newEntry);
transTable.put(newEntry.getBoard().getCurrZobrist(),newEntry);
}
}
else//Check whether depth of new entry is greater then entry already present
{
if(whiteMove)
{
if(transTable.get(newEntry.getBoard().getCurrZobrist()).getDepth() < newEntry.getDepth())
{
newEntry.incrementLossCount();
adjustEval(newEntry);
transTable.put(newEntry.getBoard().getCurrZobrist(),newEntry);
}
else if(transTable.get(newEntry.getBoard().getCurrZobrist()).getDepth() >= newEntry.getDepth())
{
transTable.get(newEntry.getBoard().getCurrZobrist()).incrementLossCount();
adjustEval(transTable.get(newEntry.getBoard().getCurrZobrist()));
}
}
else
{
if(transTable.get(newEntry.getBoard().getCurrZobrist()).getDepth() < newEntry.getDepth())
{
newEntry.incrementWinCount();
adjustEval(newEntry);
transTable.put(newEntry.getBoard().getCurrZobrist(),newEntry);
}
else if(transTable.get(newEntry.getBoard().getCurrZobrist()).getDepth() >= newEntry.getDepth())
{
transTable.get(newEntry.getBoard().getCurrZobrist()).incrementWinCount();
adjustEval(transTable.get(newEntry.getBoard().getCurrZobrist()));
}
}
}
}
}
public boolean contains(String key)
{
return transTable.containsKey(key);
}
public TransPosTableEntry retrieveEntry(String key)
{
return transTable.get(key);
}
}