remosleandre commited on
Commit
9d524af
·
1 Parent(s): df46694

[ADD]first push of a model

Browse files
Files changed (5) hide show
  1. conversion.py +67 -0
  2. dataset_states.csv +448 -0
  3. model.py +222 -0
  4. model_weights.pth +3 -0
  5. training_model.ipynb +0 -0
conversion.py ADDED
@@ -0,0 +1,67 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import torch
2
+ import pandas as pd
3
+ import torch.nn as nn
4
+
5
+ class CSVToTensor:
6
+ def __init__(self, file_path):
7
+ self.data_frame = pd.read_csv(file_path)
8
+ len_dataset = len(self.data_frame)
9
+ self.game_tensor = torch.zeros((len_dataset, 9), dtype=torch.float32)
10
+ self.prediction_tensor = torch.zeros((len_dataset, 9), dtype=torch.float32)
11
+
12
+ def csv_to_tensor(self, pos):
13
+ if pos >= len(self.data_frame):
14
+ raise ValueError("Position is greater than the number of data in the dataset")
15
+
16
+ data_pos = self.data_frame.iloc[pos]
17
+ game_stat = data_pos.values[0:9]
18
+ prediction_stat = data_pos.values[9:18]
19
+
20
+ self.game_tensor[pos] = torch.tensor(game_stat, dtype=torch.float32)
21
+ self.prediction_tensor[pos] = torch.tensor(prediction_stat, dtype=torch.float32)
22
+
23
+ def tensor_to_view(self, pos):
24
+ if pos >= len(self.data_frame):
25
+ raise ValueError("Position is greater than the number of data in the dataset")
26
+
27
+ if torch.equal(self.game_tensor[pos], torch.zeros(9)) or torch.equal(self.prediction_tensor[pos], torch.zeros(9)):
28
+ raise ValueError("No tensor data found at this position")
29
+
30
+ symbols = {0: ' ', 1: 'x', 2: 'o', 3: 'O'}
31
+ board = []
32
+ for i in range(9):
33
+ if self.game_tensor[pos][i] == 1:
34
+ board.append(1)
35
+ elif self.game_tensor[pos][i] == 2:
36
+ board.append(2)
37
+ elif self.prediction_tensor[pos][i] == 2:
38
+ board.append(3)
39
+ else:
40
+ board.append(0)
41
+
42
+ print("\nCurrent Game State:")
43
+ for i in range(0, 9, 3):
44
+ print(f"{symbols[board[i]]} | {symbols[board[i+1]]} | {symbols[board[i+2]]}")
45
+ if i < 6:
46
+ print("---------")
47
+
48
+ def print_data(self):
49
+ print(self.data_frame)
50
+
51
+ def create_all_tensor(self):
52
+ for i in range(len(self.data_frame)):
53
+ self.csv_to_tensor(i)
54
+ return self.game_tensor, self.prediction_tensor
55
+
56
+ def create_a_dataset(self):
57
+ return torch.utils.data.TensorDataset(self.game_tensor, self.prediction_tensor)
58
+
59
+
60
+ if __name__ == '__main__':
61
+ position = 0
62
+ tensor = CSVToTensor('./Datasets/example.csv')
63
+ tensor.print_data()
64
+ tensor.csv_to_tensor(position)
65
+ print(f"Input : {tensor.game_tensor[position]}")
66
+ print(f"Output : {tensor.prediction_tensor[position]}")
67
+ tensor.tensor_to_view(position)
dataset_states.csv ADDED
@@ -0,0 +1,448 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ P1_Cell1,P1_Cell2,P1_Cell3,P1_Cell4,P1_Cell5,P1_Cell6,P1_Cell7,P1_Cell8,P1_Cell9,P2_Cell1,P2_Cell2,P2_Cell3,P2_Cell4,P2_Cell5,P2_Cell6,P2_Cell7,P2_Cell8,P2_Cell9
2
+ 0,0,0,0,0,1,0,0,0,0,0,2,0,0,0,0,0,0
3
+ 1,0,2,0,0,1,0,0,0,0,0,0,2,0,0,0,0,0
4
+ 1,1,2,2,0,1,0,0,0,0,0,0,0,2,0,0,0,0
5
+ 1,1,2,2,2,1,0,1,0,0,0,0,0,0,0,2,0,0
6
+ 0,0,0,1,0,0,0,0,0,2,0,0,0,0,0,0,0,0
7
+ 2,0,0,1,0,0,0,1,0,0,0,2,0,0,0,0,0,0
8
+ 2,0,2,1,0,0,1,1,0,0,2,0,0,0,0,0,0,0
9
+ 0,0,1,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0
10
+ 0,1,1,0,2,0,0,0,0,2,0,0,0,0,0,0,0,0
11
+ 2,1,1,0,2,0,0,0,1,0,0,0,0,0,2,0,0,0
12
+ 2,1,1,0,2,2,0,1,1,0,0,0,2,0,0,0,0,0
13
+ 1,0,2,2,1,1,0,0,0,0,0,0,0,0,0,0,0,2
14
+ 1,1,2,2,1,1,0,0,2,0,0,0,0,0,0,0,2,0
15
+ 0,1,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0
16
+ 2,1,0,0,0,0,1,0,0,0,0,0,0,2,0,0,0,0
17
+ 2,1,0,1,2,0,1,0,0,0,0,0,0,0,0,0,0,2
18
+ 0,0,0,0,0,0,0,1,0,0,2,0,0,0,0,0,0,0
19
+ 0,2,0,0,1,0,0,1,0,2,0,0,0,0,0,0,0,0
20
+ 2,2,0,0,1,0,0,1,1,0,0,2,0,0,0,0,0,0
21
+ 2,1,1,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0
22
+ 2,1,1,2,0,0,1,0,0,0,0,0,0,2,0,0,0,0
23
+ 2,1,1,2,2,1,1,0,0,0,0,0,0,0,0,0,0,2
24
+ 1,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0
25
+ 1,0,0,0,2,1,0,0,0,0,2,0,0,0,0,0,0,0
26
+ 1,2,1,0,2,1,0,0,0,0,0,0,0,0,0,0,2,0
27
+ 0,0,0,0,0,0,0,0,1,0,0,0,0,2,0,0,0,0
28
+ 0,1,0,0,2,0,0,0,1,2,0,0,0,0,0,0,0,0
29
+ 2,1,0,0,2,1,0,0,1,0,0,2,0,0,0,0,0,0
30
+ 2,1,2,0,2,1,0,1,1,0,0,0,0,0,0,2,0,0
31
+ 0,0,0,0,1,0,0,0,0,2,0,0,0,0,0,0,0,0
32
+ 2,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,2,0
33
+ 2,1,0,0,1,0,1,2,0,0,0,2,0,0,0,0,0,0
34
+ 2,1,2,0,1,1,1,2,0,0,0,0,2,0,0,0,0,0
35
+ 0,2,0,0,0,0,0,1,1,0,0,0,0,0,0,2,0,0
36
+ 1,2,0,0,0,0,2,1,1,0,0,0,0,2,0,0,0,0
37
+ 1,2,1,0,2,0,2,1,1,0,0,0,0,0,2,0,0,0
38
+ 0,2,1,0,0,0,0,1,0,0,0,0,0,0,0,2,0,0
39
+ 0,2,1,1,0,0,2,1,0,0,0,0,0,2,0,0,0,0
40
+ 0,2,1,1,2,0,2,1,1,0,0,0,0,0,2,0,0,0
41
+ 2,0,0,1,0,1,0,0,0,0,0,0,0,2,0,0,0,0
42
+ 2,0,1,1,2,1,0,0,0,0,0,0,0,0,0,0,0,2
43
+ 0,0,0,0,0,0,1,0,0,0,0,0,0,2,0,0,0,0
44
+ 0,0,0,0,2,1,1,0,0,0,2,0,0,0,0,0,0,0
45
+ 1,2,0,0,2,1,1,0,0,0,0,0,0,0,0,0,2,0
46
+ 2,1,0,0,0,0,0,0,1,0,0,0,0,2,0,0,0,0
47
+ 2,1,2,0,2,1,1,0,1,0,0,0,0,0,0,0,2,0
48
+ 0,0,1,0,2,0,0,1,0,0,0,0,2,0,0,0,0,0
49
+ 0,0,1,2,2,0,1,1,0,0,0,0,0,0,2,0,0,0
50
+ 2,0,0,1,0,0,0,0,1,0,0,2,0,0,0,0,0,0
51
+ 2,0,2,1,1,0,0,0,1,0,2,0,0,0,0,0,0,0
52
+ 1,0,1,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0
53
+ 1,2,1,1,2,0,0,0,0,0,0,0,0,0,0,0,2,0
54
+ 2,0,0,1,2,1,0,0,1,0,0,2,0,0,0,0,0,0
55
+ 2,0,2,1,2,1,1,0,1,0,2,0,0,0,0,0,0,0
56
+ 1,0,0,0,2,0,0,1,0,0,0,0,2,0,0,0,0,0
57
+ 1,0,1,2,2,0,0,1,0,0,0,0,0,0,2,0,0,0
58
+ 1,0,0,0,2,0,1,0,0,0,0,0,2,0,0,0,0,0
59
+ 1,0,1,2,2,0,1,0,0,0,2,0,0,0,0,0,0,0
60
+ 1,2,1,2,2,0,1,0,1,0,0,0,0,0,2,0,0,0
61
+ 0,0,0,0,2,0,1,1,0,0,0,0,0,0,0,0,0,2
62
+ 1,0,0,0,2,0,1,1,2,0,0,0,2,0,0,0,0,0
63
+ 1,0,1,2,2,0,1,1,2,0,0,0,0,0,2,0,0,0
64
+ 2,1,0,1,2,0,0,0,1,0,0,2,0,0,0,0,0,0
65
+ 2,1,2,1,2,0,1,0,1,0,0,0,0,0,0,0,2,0
66
+ 1,0,0,2,2,0,1,1,0,0,0,0,0,0,2,0,0,0
67
+ 1,0,0,0,2,0,0,0,1,0,2,0,0,0,0,0,0,0
68
+ 1,2,0,1,2,0,0,0,1,0,0,0,0,0,0,2,0,0
69
+ 1,2,0,1,2,1,2,0,1,0,0,2,0,0,0,0,0,0
70
+ 1,2,1,0,2,0,0,1,0,0,0,0,2,0,0,0,0,0
71
+ 1,2,1,2,2,0,1,1,0,0,0,0,0,0,2,0,0,0
72
+ 1,0,0,2,2,1,0,1,0,0,0,2,0,0,0,0,0,0
73
+ 1,0,2,2,2,1,1,1,0,0,0,0,0,0,0,0,0,2
74
+ 1,0,0,2,2,1,1,0,0,0,2,0,0,0,0,0,0,0
75
+ 1,2,1,2,2,1,1,0,0,0,0,0,0,0,0,0,2,0
76
+ 2,0,0,1,2,1,0,1,0,0,2,0,0,0,0,0,0,0
77
+ 2,2,0,1,2,1,0,1,1,0,0,2,0,0,0,0,0,0
78
+ 0,0,0,0,2,1,0,0,1,0,0,2,0,0,0,0,0,0
79
+ 1,0,2,0,2,1,0,0,1,0,2,0,0,0,0,0,0,0
80
+ 1,2,2,1,2,1,0,0,1,0,0,0,0,0,0,2,0,0
81
+ 2,1,0,1,0,0,0,0,0,0,0,0,0,2,0,0,0,0
82
+ 2,1,0,1,2,0,0,1,0,0,0,2,0,0,0,0,0,0
83
+ 2,1,2,1,2,0,0,1,1,0,0,0,0,0,0,2,0,0
84
+ 1,2,1,0,2,0,1,0,0,0,0,0,2,0,0,0,0,0
85
+ 2,0,0,0,1,1,0,0,0,0,0,0,2,0,0,0,0,0
86
+ 2,0,0,2,1,1,0,0,1,0,0,2,0,0,0,0,0,0
87
+ 2,0,2,2,1,1,0,1,1,0,2,0,0,0,0,0,0,0
88
+ 0,0,2,0,0,1,1,0,0,2,0,0,0,0,0,0,0,0
89
+ 2,0,2,0,1,1,1,0,0,0,2,0,0,0,0,0,0,0
90
+ 0,0,1,0,2,0,0,0,1,0,0,0,0,0,2,0,0,0
91
+ 0,0,1,1,2,2,0,0,1,2,0,0,0,0,0,0,0,0
92
+ 2,1,1,1,2,2,0,0,1,0,0,0,0,0,0,2,0,0
93
+ 1,1,0,0,2,0,0,0,0,0,0,2,0,0,0,0,0,0
94
+ 1,1,2,0,2,0,0,1,0,0,0,0,2,0,0,0,0,0
95
+ 1,1,2,2,2,0,1,1,0,0,0,0,0,0,2,0,0,0
96
+ 1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,2,0,0
97
+ 2,0,0,1,1,0,0,0,0,0,0,0,0,0,2,0,0,0
98
+ 2,0,0,1,1,2,0,0,1,0,2,0,0,0,0,0,0,0
99
+ 2,2,1,1,1,2,0,0,1,0,0,0,0,0,0,2,0,0
100
+ 0,0,1,0,2,0,1,0,0,0,2,0,0,0,0,0,0,0
101
+ 0,2,1,1,2,0,1,0,0,2,0,0,0,0,0,0,0,0
102
+ 2,2,1,1,2,1,1,0,0,0,0,0,0,0,0,0,2,0
103
+ 0,1,2,0,2,1,0,0,1,0,0,0,0,0,0,2,0,0
104
+ 1,1,2,0,2,1,0,0,0,0,0,0,0,0,0,2,0,0
105
+ 1,1,2,1,2,0,0,0,0,0,0,0,0,0,0,2,0,0
106
+ 1,0,2,2,1,1,0,1,2,0,2,0,0,0,0,0,0,0
107
+ 2,1,1,1,2,0,0,0,0,0,0,0,0,0,0,0,0,2
108
+ 0,0,1,0,2,1,0,0,0,0,0,0,0,0,0,0,0,2
109
+ 0,0,1,0,2,1,1,0,2,2,0,0,0,0,0,0,0,0
110
+ 2,1,0,0,1,1,0,2,0,0,0,0,2,0,0,0,0,0
111
+ 2,1,0,2,1,1,1,2,0,0,0,2,0,0,0,0,0,0
112
+ 1,0,0,2,2,0,1,0,1,0,0,0,0,0,2,0,0,0
113
+ 1,2,0,0,2,0,0,1,1,0,0,0,0,0,0,2,0,0
114
+ 1,2,0,2,2,1,1,0,1,0,0,0,0,0,0,0,2,0
115
+ 0,0,1,1,2,0,0,0,0,2,0,0,0,0,0,0,0,0
116
+ 2,0,1,1,2,0,1,0,0,0,2,0,0,0,0,0,0,0
117
+ 2,2,1,1,2,0,1,1,0,0,0,0,0,0,0,0,0,2
118
+ 1,2,0,1,2,0,2,1,1,0,0,2,0,0,0,0,0,0
119
+ 2,2,0,0,1,0,1,1,0,0,0,2,0,0,0,0,0,0
120
+ 2,1,0,0,1,0,0,2,1,0,0,2,0,0,0,0,0,0
121
+ 2,1,2,0,1,0,1,2,1,0,0,0,2,0,0,0,0,0
122
+ 0,2,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,2
123
+ 0,2,1,0,0,0,1,1,2,0,0,0,0,2,0,0,0,0
124
+ 0,2,1,1,2,0,1,1,2,2,0,0,0,0,0,0,0,0
125
+ 0,2,0,0,1,0,2,1,1,2,0,0,0,0,0,0,0,0
126
+ 2,2,0,0,1,1,2,1,1,0,0,2,0,0,0,0,0,0
127
+ 1,2,1,0,2,0,0,0,1,0,0,0,0,0,2,0,0,0
128
+ 1,2,1,0,2,2,1,0,1,0,0,0,2,0,0,0,0,0
129
+ 2,1,0,1,2,1,0,0,0,0,0,2,0,0,0,0,0,0
130
+ 2,1,2,1,2,1,0,1,0,0,0,0,0,0,0,2,0,0
131
+ 2,0,1,1,2,2,1,0,1,0,0,0,0,0,0,0,2,0
132
+ 0,2,0,1,0,0,1,1,2,2,0,0,0,0,0,0,0,0
133
+ 2,2,1,1,0,0,1,1,2,0,0,0,0,2,0,0,0,0
134
+ 1,2,1,0,2,2,0,1,1,0,0,0,2,0,0,0,0,0
135
+ 0,0,0,0,2,0,1,0,1,0,0,0,0,0,0,0,2,0
136
+ 0,0,0,1,2,0,1,2,1,0,2,0,0,0,0,0,0,0
137
+ 2,1,0,0,0,0,0,1,0,0,0,0,0,2,0,0,0,0
138
+ 2,1,0,0,2,1,0,1,0,0,0,2,0,0,0,0,0,0
139
+ 2,1,2,0,2,1,1,1,0,0,0,0,0,0,0,0,0,2
140
+ 2,2,1,1,2,1,0,1,0,0,0,0,0,0,0,0,0,2
141
+ 2,0,2,0,0,1,1,1,0,0,2,0,0,0,0,0,0,0
142
+ 2,0,0,0,1,0,1,0,0,0,0,2,0,0,0,0,0,0
143
+ 2,0,1,0,1,0,0,0,0,0,0,0,0,0,0,2,0,0
144
+ 2,0,1,0,1,1,2,0,0,0,0,0,2,0,0,0,0,0
145
+ 0,2,1,0,2,0,1,1,0,0,0,0,0,0,0,0,0,2
146
+ 0,2,1,0,2,1,1,1,2,2,0,0,0,0,0,0,0,0
147
+ 2,1,0,2,1,1,0,0,0,0,0,0,0,0,0,2,0,0
148
+ 2,1,1,0,2,0,0,1,0,0,0,0,2,0,0,0,0,0
149
+ 2,1,1,2,2,0,1,1,0,0,0,0,0,0,2,0,0,0
150
+ 2,0,0,1,0,0,1,0,0,0,2,0,0,0,0,0,0,0
151
+ 2,2,0,1,0,0,1,1,0,0,0,2,0,0,0,0,0,0
152
+ 0,1,1,0,2,2,0,0,1,0,0,0,2,0,0,0,0,0
153
+ 1,2,0,0,1,0,2,1,0,0,0,0,0,0,0,0,0,2
154
+ 1,2,1,0,1,0,2,1,2,0,0,0,2,0,0,0,0,0
155
+ 2,0,0,0,1,0,0,0,1,0,0,2,0,0,0,0,0,0
156
+ 2,1,2,0,1,0,0,0,1,0,0,0,0,0,0,0,2,0
157
+ 2,1,2,0,1,1,0,2,1,0,0,0,2,0,0,0,0,0
158
+ 2,2,0,1,0,1,1,0,0,0,0,2,0,0,0,0,0,0
159
+ 0,0,1,0,2,2,0,1,1,0,0,0,2,0,0,0,0,0
160
+ 0,0,0,0,2,0,0,1,1,0,0,0,0,0,0,2,0,0
161
+ 0,0,0,0,2,1,2,1,1,0,0,2,0,0,0,0,0,0
162
+ 0,2,1,0,2,0,1,0,1,0,0,0,0,0,0,0,2,0
163
+ 2,0,0,0,1,0,0,1,0,0,2,0,0,0,0,0,0,0
164
+ 2,0,2,0,0,1,1,0,1,0,2,0,0,0,0,0,0,0
165
+ 0,0,2,0,0,1,0,0,1,2,0,0,0,0,0,0,0,0
166
+ 2,0,1,1,0,0,0,0,0,0,0,0,0,2,0,0,0,0
167
+ 2,1,2,1,1,0,1,2,0,0,0,0,0,0,2,0,0,0
168
+ 0,0,1,2,2,0,0,1,1,0,0,0,0,0,2,0,0,0
169
+ 0,2,0,1,0,0,0,1,0,0,0,0,0,0,0,2,0,0
170
+ 0,2,0,1,1,0,2,1,0,0,0,0,0,0,2,0,0,0
171
+ 0,2,1,1,1,2,2,1,0,2,0,0,0,0,0,0,0,0
172
+ 0,0,2,0,0,1,0,1,0,2,0,0,0,0,0,0,0,0
173
+ 2,1,2,1,1,0,0,2,1,0,0,0,0,0,2,0,0,0
174
+ 2,0,0,1,1,2,0,1,0,0,2,0,0,0,0,0,0,0
175
+ 2,2,1,1,1,2,0,1,0,0,0,0,0,0,0,2,0,0
176
+ 2,1,1,2,0,0,0,1,0,0,0,0,0,2,0,0,0,0
177
+ 2,1,1,2,2,0,0,1,1,0,0,0,0,0,2,0,0,0
178
+ 2,1,2,0,1,0,1,0,0,0,0,0,0,0,0,0,2,0
179
+ 0,0,0,0,2,1,1,1,2,2,0,0,0,0,0,0,0,0
180
+ 2,1,0,1,1,2,0,0,0,0,0,0,0,0,0,0,2,0
181
+ 2,1,0,1,1,2,0,2,1,0,0,2,0,0,0,0,0,0
182
+ 2,0,2,1,1,0,1,0,0,0,2,0,0,0,0,0,0,0
183
+ 2,0,1,1,1,2,0,0,0,0,0,0,0,0,0,2,0,0
184
+ 2,1,1,1,1,2,2,0,0,0,0,0,0,0,0,0,2,0
185
+ 0,1,2,0,0,1,0,0,0,0,0,0,2,0,0,0,0,0
186
+ 0,1,2,2,1,1,0,0,0,0,0,0,0,0,0,0,2,0
187
+ 0,1,2,2,1,1,1,2,0,2,0,0,0,0,0,0,0,0
188
+ 0,1,0,0,2,0,1,1,2,2,0,0,0,0,0,0,0,0
189
+ 0,2,1,1,2,1,2,1,0,0,0,0,0,0,0,0,0,2
190
+ 2,1,2,1,2,1,0,0,1,0,0,0,0,0,0,2,0,0
191
+ 0,0,0,1,2,0,1,0,0,2,0,0,0,0,0,0,0,0
192
+ 2,0,0,1,2,0,1,0,1,0,0,0,0,0,0,0,2,0
193
+ 2,0,1,1,2,0,1,2,1,0,2,0,0,0,0,0,0,0
194
+ 2,1,0,1,1,0,0,2,0,0,0,0,0,0,2,0,0,0
195
+ 2,1,1,1,1,2,0,2,0,0,0,0,0,0,0,2,0,0
196
+ 0,1,2,2,0,1,1,0,0,0,0,0,0,2,0,0,0,0
197
+ 1,1,2,2,2,1,1,0,0,0,0,0,0,0,0,0,2,0
198
+ 0,0,0,0,2,1,1,2,1,0,2,0,0,0,0,0,0,0
199
+ 1,0,1,0,2,1,0,0,2,0,2,0,0,0,0,0,0,0
200
+ 1,2,1,1,2,1,0,0,2,0,0,0,0,0,0,0,2,0
201
+ 1,1,2,2,2,0,0,1,1,0,0,0,0,0,2,0,0,0
202
+ 2,1,2,1,2,0,1,1,0,0,0,0,0,0,0,0,0,2
203
+ 2,0,2,1,1,0,0,1,0,0,2,0,0,0,0,0,0,0
204
+ 0,1,0,0,2,0,2,1,1,2,0,0,0,0,0,0,0,0
205
+ 2,1,1,0,2,0,2,1,1,0,0,0,2,0,0,0,0,0
206
+ 2,0,0,1,2,1,1,0,0,0,2,0,0,0,0,0,0,0
207
+ 2,2,0,1,2,1,1,1,0,0,0,2,0,0,0,0,0,0
208
+ 1,0,0,0,2,0,1,2,1,0,2,0,0,0,0,0,0,0
209
+ 2,1,1,2,1,0,0,0,0,0,0,0,0,0,0,2,0,0
210
+ 2,1,0,0,2,0,0,1,1,0,0,0,0,0,0,2,0,0
211
+ 0,0,1,1,2,1,0,0,2,2,0,0,0,0,0,0,0,0
212
+ 0,2,0,1,0,1,2,1,0,0,0,0,0,2,0,0,0,0
213
+ 0,1,1,2,2,0,0,1,0,2,0,0,0,0,0,0,0,0
214
+ 0,0,2,0,2,1,0,1,1,0,0,0,0,0,0,2,0,0
215
+ 2,1,2,0,0,1,0,1,0,0,0,0,0,2,0,0,0,0
216
+ 2,0,1,0,1,0,2,0,1,0,0,0,2,0,0,0,0,0
217
+ 0,1,0,0,2,0,1,0,0,2,0,0,0,0,0,0,0,0
218
+ 0,0,0,1,2,0,0,0,1,2,0,0,0,0,0,0,0,0
219
+ 2,0,0,2,1,1,1,0,0,0,0,2,0,0,0,0,0,0
220
+ 2,1,2,2,1,1,1,0,0,0,0,0,0,0,0,0,2,0
221
+ 2,0,2,1,0,1,1,0,0,0,2,0,0,0,0,0,0,0
222
+ 0,1,2,2,0,1,0,0,1,0,0,0,0,0,0,2,0,0
223
+ 0,1,2,2,0,1,2,1,1,2,0,0,0,0,0,0,0,0
224
+ 2,0,0,1,1,2,1,0,0,0,0,2,0,0,0,0,0,0
225
+ 2,0,2,1,1,2,1,1,0,0,2,0,0,0,0,0,0,0
226
+ 2,0,1,1,2,0,0,0,1,0,0,0,0,0,2,0,0,0
227
+ 2,0,1,1,2,2,0,1,1,0,0,0,0,0,0,2,0,0
228
+ 0,2,1,0,2,1,1,0,0,0,0,0,0,0,0,0,2,0
229
+ 0,0,2,0,1,1,0,0,0,0,0,0,2,0,0,0,0,0
230
+ 1,1,2,2,1,1,0,2,0,0,0,0,0,0,0,0,0,2
231
+ 2,0,2,1,0,0,0,1,1,0,2,0,0,0,0,0,0,0
232
+ 2,0,2,1,0,1,0,1,0,0,2,0,0,0,0,0,0,0
233
+ 2,0,0,1,2,0,0,1,1,0,0,0,0,0,0,2,0,0
234
+ 2,1,0,1,2,0,2,1,1,0,0,2,0,0,0,0,0,0
235
+ 2,2,0,1,2,1,1,0,1,0,0,2,0,0,0,0,0,0
236
+ 0,2,0,0,0,1,0,1,0,0,0,0,0,0,0,2,0,0
237
+ 0,2,0,1,2,1,2,1,1,0,0,2,0,0,0,0,0,0
238
+ 0,1,2,2,1,1,0,2,1,2,0,0,0,0,0,0,0,0
239
+ 1,2,0,0,2,1,2,1,1,0,0,2,0,0,0,0,0,0
240
+ 2,1,0,0,2,1,1,0,0,0,0,0,0,0,0,0,0,2
241
+ 0,2,0,1,0,0,2,1,1,0,0,2,0,0,0,0,0,0
242
+ 0,2,2,1,1,0,2,1,1,2,0,0,0,0,0,0,0,0
243
+ 2,0,2,1,2,1,0,1,1,0,2,0,0,0,0,0,0,0
244
+ 1,2,2,0,2,1,1,0,1,0,0,0,0,0,0,0,2,0
245
+ 2,1,0,0,2,0,1,1,0,0,0,0,0,0,0,0,0,2
246
+ 0,0,1,0,2,2,1,0,1,0,0,0,2,0,0,0,0,0
247
+ 2,1,0,0,2,1,2,1,1,0,0,2,0,0,0,0,0,0
248
+ 1,1,0,2,2,0,1,0,0,0,0,0,0,0,2,0,0,0
249
+ 2,1,0,0,2,0,1,0,1,0,0,0,0,0,0,0,2,0
250
+ 2,1,0,1,2,0,1,2,1,0,0,2,0,0,0,0,0,0
251
+ 1,2,0,0,0,1,2,1,0,0,0,0,0,2,0,0,0,0
252
+ 1,2,1,0,2,1,2,1,0,0,0,0,0,0,0,0,0,2
253
+ 1,2,0,1,0,0,2,1,0,0,0,0,0,2,0,0,0,0
254
+ 1,2,0,1,2,1,2,1,0,0,0,2,0,0,0,0,0,0
255
+ 2,0,2,2,1,1,1,0,1,0,2,0,0,0,0,0,0,0
256
+ 2,1,2,0,0,1,0,0,1,0,0,0,0,0,0,2,0,0
257
+ 2,1,2,0,0,1,2,1,1,0,0,0,2,0,0,0,0,0
258
+ 0,0,2,2,1,1,0,0,1,2,0,0,0,0,0,0,0,0
259
+ 2,1,2,2,1,1,0,0,1,0,0,0,0,0,0,2,0,0
260
+ 1,2,1,1,2,0,2,1,0,0,0,0,0,0,2,0,0,0
261
+ 2,1,0,0,0,1,0,0,0,0,0,0,0,0,0,2,0,0
262
+ 2,1,1,0,0,1,2,0,0,0,0,0,2,0,0,0,0,0
263
+ 0,0,1,0,2,0,1,1,2,2,0,0,0,0,0,0,0,0
264
+ 0,0,2,2,1,1,1,0,0,2,0,0,0,0,0,0,0,0
265
+ 2,0,2,2,1,1,1,1,0,0,2,0,0,0,0,0,0,0
266
+ 1,2,0,0,2,0,1,0,1,0,0,0,0,0,0,0,2,0
267
+ 1,2,0,2,2,1,1,1,0,0,0,0,0,0,0,0,0,2
268
+ 0,0,0,1,2,0,2,1,1,0,0,2,0,0,0,0,0,0
269
+ 0,2,0,1,2,1,1,0,0,2,0,0,0,0,0,0,0,0
270
+ 2,1,2,1,2,1,1,0,0,0,0,0,0,0,0,0,0,2
271
+ 0,2,1,0,0,0,2,1,1,0,0,0,0,0,2,0,0,0
272
+ 1,2,1,0,0,2,2,1,1,0,0,0,0,2,0,0,0,0
273
+ 2,2,0,1,1,0,0,1,0,0,0,2,0,0,0,0,0,0
274
+ 0,0,0,1,2,0,1,1,2,2,0,0,0,0,0,0,0,0
275
+ 0,2,0,0,0,1,2,1,1,0,0,2,0,0,0,0,0,0
276
+ 0,2,2,1,0,1,2,1,1,2,0,0,0,0,0,0,0,0
277
+ 0,2,1,0,0,1,2,1,0,0,0,0,0,0,0,0,0,2
278
+ 1,2,1,0,0,1,2,1,2,0,0,0,2,0,0,0,0,0
279
+ 1,0,1,0,2,2,0,0,1,0,2,0,0,0,0,0,0,0
280
+ 1,2,1,1,2,2,0,0,1,0,0,0,0,0,0,0,2,0
281
+ 0,0,2,2,1,1,0,1,0,0,2,0,0,0,0,0,0,0
282
+ 0,2,2,2,1,1,1,1,0,2,0,0,0,0,0,0,0,0
283
+ 2,0,2,0,1,0,0,1,1,0,2,0,0,0,0,0,0,0
284
+ 2,1,0,0,2,1,1,2,1,0,0,2,0,0,0,0,0,0
285
+ 1,2,1,0,0,0,2,1,0,0,0,0,0,2,0,0,0,0
286
+ 2,0,2,0,1,0,1,0,1,0,2,0,0,0,0,0,0,0
287
+ 2,2,0,1,1,0,1,0,0,0,0,2,0,0,0,0,0,0
288
+ 2,0,0,1,2,1,1,2,1,0,2,0,0,0,0,0,0,0
289
+ 0,2,0,0,0,1,1,1,2,2,0,0,0,0,0,0,0,0
290
+ 2,2,0,0,1,1,1,1,2,0,0,2,0,0,0,0,0,0
291
+ 2,2,0,0,1,1,0,1,0,0,0,2,0,0,0,0,0,0
292
+ 1,2,2,0,0,1,2,1,1,0,0,0,0,2,0,0,0,0
293
+ 1,0,0,1,2,0,0,0,0,0,0,0,0,0,0,2,0,0
294
+ 1,0,0,1,2,1,2,0,0,0,2,0,0,0,0,0,0,0
295
+ 2,1,2,0,0,1,1,0,0,0,0,0,0,2,0,0,0,0
296
+ 2,1,1,0,2,0,1,0,0,0,0,0,2,0,0,0,0,0
297
+ 1,1,2,0,2,0,1,0,0,0,0,0,2,0,0,0,0,0
298
+ 2,1,0,0,1,1,2,0,0,0,0,0,2,0,0,0,0,0
299
+ 0,2,0,0,1,0,1,1,2,0,0,2,0,0,0,0,0,0
300
+ 1,2,2,0,1,0,1,1,2,0,0,0,0,0,2,0,0,0
301
+ 2,2,0,1,1,2,0,1,1,0,0,2,0,0,0,0,0,0
302
+ 1,0,0,1,2,0,2,1,0,0,0,2,0,0,0,0,0,0
303
+ 2,1,1,0,2,2,1,0,1,0,0,0,2,0,0,0,0,0
304
+ 0,1,2,2,2,1,1,1,0,0,0,0,0,0,0,0,0,2
305
+ 2,2,1,0,1,0,0,1,0,0,0,0,0,0,0,2,0,0
306
+ 2,2,1,1,1,0,2,1,0,0,0,0,0,0,2,0,0,0
307
+ 0,0,1,0,2,0,1,2,1,0,2,0,0,0,0,0,0,0
308
+ 2,0,1,0,1,0,2,1,0,0,0,0,2,0,0,0,0,0
309
+ 0,0,2,1,0,1,0,0,0,0,0,0,0,2,0,0,0,0
310
+ 0,1,2,1,2,1,0,0,0,2,0,0,0,0,0,0,0,0
311
+ 2,1,1,0,2,1,0,0,0,0,0,0,0,0,0,0,0,2
312
+ 2,1,2,1,1,2,1,0,0,0,0,0,0,0,0,0,0,2
313
+ 0,0,1,2,2,1,0,1,0,0,0,0,0,0,0,0,0,2
314
+ 0,0,1,2,2,1,1,1,2,2,0,0,0,0,0,0,0,0
315
+ 2,2,0,1,0,0,1,0,1,0,0,2,0,0,0,0,0,0
316
+ 0,2,0,0,1,1,2,1,0,0,0,0,2,0,0,0,0,0
317
+ 0,2,0,2,1,1,2,1,1,2,0,0,0,0,0,0,0,0
318
+ 2,0,2,0,1,1,0,1,0,0,2,0,0,0,0,0,0,0
319
+ 1,2,1,1,2,0,2,0,1,0,0,0,0,0,0,0,2,0
320
+ 1,2,1,0,2,1,1,0,2,0,0,0,0,0,0,0,2,0
321
+ 2,1,1,2,1,1,0,2,0,0,0,0,0,0,0,2,0,0
322
+ 1,1,2,0,2,0,0,0,1,0,0,0,2,0,0,0,0,0
323
+ 1,1,2,2,2,1,0,0,1,0,0,0,0,0,0,2,0,0
324
+ 1,2,1,2,2,0,0,1,1,0,0,0,0,0,2,0,0,0
325
+ 0,1,0,0,2,0,1,2,1,2,0,0,0,0,0,0,0,0
326
+ 2,2,0,1,0,1,1,1,2,0,0,2,0,0,0,0,0,0
327
+ 0,0,2,0,2,1,1,0,1,0,0,0,0,0,0,0,2,0
328
+ 0,1,2,0,2,1,1,2,1,2,0,0,0,0,0,0,0,0
329
+ 0,0,2,1,2,1,0,0,1,2,0,0,0,0,0,0,0,0
330
+ 1,1,0,1,2,0,2,0,0,0,0,2,0,0,0,0,0,0
331
+ 2,0,1,2,1,1,0,0,0,0,0,0,0,0,0,2,0,0
332
+ 2,0,2,0,0,1,0,1,1,0,2,0,0,0,0,0,0,0
333
+ 1,1,0,2,2,0,1,1,2,0,0,0,0,0,2,0,0,0
334
+ 2,2,1,0,1,1,2,1,0,0,0,0,2,0,0,0,0,0
335
+ 2,1,1,2,2,1,0,1,0,0,0,0,0,0,0,2,0,0
336
+ 2,1,1,0,2,0,1,2,1,0,0,0,0,0,2,0,0,0
337
+ 1,0,2,2,2,1,0,1,1,0,0,0,0,0,0,2,0,0
338
+ 2,1,0,2,1,1,0,2,1,0,0,0,0,0,0,2,0,0
339
+ 1,0,2,2,0,1,1,0,0,0,0,0,0,2,0,0,0,0
340
+ 1,0,2,2,2,1,1,0,1,0,0,0,0,0,0,0,2,0
341
+ 1,2,0,0,2,1,0,0,1,0,0,2,0,0,0,0,0,0
342
+ 1,0,2,1,2,1,0,0,0,0,0,0,0,0,0,2,0,0
343
+ 2,1,0,1,0,1,2,0,0,0,0,0,0,2,0,0,0,0
344
+ 2,1,1,1,2,1,2,0,0,0,0,0,0,0,0,0,0,2
345
+ 1,0,1,1,2,0,2,0,0,0,2,0,0,0,0,0,0,0
346
+ 1,2,1,1,2,1,2,0,0,0,0,0,0,0,0,0,2,0
347
+ 2,2,1,1,0,0,1,0,0,0,0,0,0,2,0,0,0,0
348
+ 2,2,1,1,2,0,1,0,1,0,0,0,0,0,0,0,2,0
349
+ 2,0,2,1,0,1,0,0,1,0,2,0,0,0,0,0,0,0
350
+ 2,0,2,0,1,1,0,0,1,0,2,0,0,0,0,0,0,0
351
+ 0,2,1,1,0,2,2,1,1,2,0,0,0,0,0,0,0,0
352
+ 1,2,2,0,2,1,0,1,1,0,0,0,0,0,0,2,0,0
353
+ 2,0,0,2,1,1,0,1,0,0,2,0,0,0,0,0,0,0
354
+ 2,2,1,2,1,1,0,1,0,0,0,0,0,0,0,2,0,0
355
+ 0,0,1,0,2,0,2,1,1,0,0,0,0,0,2,0,0,0
356
+ 0,0,1,1,2,2,2,1,1,2,0,0,0,0,0,0,0,0
357
+ 1,2,1,0,2,0,1,1,2,0,0,0,2,0,0,0,0,0
358
+ 0,0,2,1,2,1,1,0,0,2,0,0,0,0,0,0,0,0
359
+ 2,0,2,1,2,1,1,1,0,0,2,0,0,0,0,0,0,0
360
+ 2,1,0,0,0,1,2,0,1,0,0,2,0,0,0,0,0,0
361
+ 2,1,2,1,0,1,2,0,1,0,0,0,0,2,0,0,0,0
362
+ 1,0,2,2,0,1,0,1,0,0,0,0,0,2,0,0,0,0
363
+ 1,2,2,2,1,1,0,1,0,0,0,0,0,0,0,0,0,2
364
+ 2,0,2,0,1,0,1,1,0,0,2,0,0,0,0,0,0,0
365
+ 1,2,0,1,2,1,0,0,0,0,0,0,0,0,0,2,0,0
366
+ 1,0,0,1,2,0,2,0,1,0,2,0,0,0,0,0,0,0
367
+ 2,1,1,2,0,1,0,0,0,0,0,0,0,0,0,2,0,0
368
+ 0,0,2,1,2,1,0,1,0,2,0,0,0,0,0,0,0,0
369
+ 2,2,0,1,1,2,1,0,1,0,0,2,0,0,0,0,0,0
370
+ 2,0,0,1,2,0,1,1,0,0,0,0,0,0,0,0,0,2
371
+ 1,2,1,0,2,1,0,1,2,0,0,0,2,0,0,0,0,0
372
+ 1,0,0,0,2,0,2,1,1,0,0,2,0,0,0,0,0,0
373
+ 2,1,2,1,0,0,0,0,1,0,0,0,0,2,0,0,0,0
374
+ 0,0,1,0,2,1,0,1,2,2,0,0,0,0,0,0,0,0
375
+ 2,1,1,0,1,0,0,2,0,0,0,0,0,0,0,2,0,0
376
+ 2,1,1,0,1,1,2,2,0,0,0,0,2,0,0,0,0,0
377
+ 1,1,2,2,0,1,2,0,1,0,0,0,0,2,0,0,0,0
378
+ 2,1,1,2,0,0,0,0,1,0,0,0,0,0,2,0,0,0
379
+ 2,1,1,2,0,2,1,0,1,0,0,0,0,2,0,0,0,0
380
+ 2,1,1,2,2,0,1,0,1,0,0,0,0,0,2,0,0,0
381
+ 0,2,0,0,2,1,1,0,1,0,0,0,0,0,0,0,2,0
382
+ 2,0,1,1,1,2,2,0,1,0,2,0,0,0,0,0,0,0
383
+ 2,0,1,1,1,0,2,0,0,0,0,0,0,0,2,0,0,0
384
+ 2,2,0,1,1,0,2,1,1,0,0,2,0,0,0,0,0,0
385
+ 1,2,2,1,0,0,2,1,1,0,0,0,0,2,0,0,0,0
386
+ 0,2,1,0,1,0,2,1,0,2,0,0,0,0,0,0,0,0
387
+ 2,0,2,1,1,2,1,0,1,0,2,0,0,0,0,0,0,0
388
+ 1,0,2,0,2,1,1,2,1,0,2,0,0,0,0,0,0,0
389
+ 0,0,2,1,2,1,1,2,1,0,2,0,0,0,0,0,0,0
390
+ 2,1,2,1,0,0,0,1,0,0,0,0,0,2,0,0,0,0
391
+ 2,1,1,2,1,2,0,0,1,0,0,0,0,0,0,2,0,0
392
+ 2,1,2,0,1,1,2,0,1,0,0,0,2,0,0,0,0,0
393
+ 1,0,0,2,2,0,0,1,1,0,0,0,0,0,2,0,0,0
394
+ 1,2,0,0,2,1,0,1,0,0,0,0,0,0,0,2,0,0
395
+ 2,2,0,2,1,1,1,1,0,0,0,2,0,0,0,0,0,0
396
+ 2,1,0,0,0,1,2,1,0,0,0,0,2,0,0,0,0,0
397
+ 2,0,1,1,2,0,0,1,0,0,0,0,0,0,0,0,0,2
398
+ 1,0,1,0,2,2,2,1,1,0,0,0,2,0,0,0,0,0
399
+ 2,2,1,0,0,1,1,1,2,0,0,0,0,2,0,0,0,0
400
+ 1,1,0,2,2,0,0,1,0,0,0,2,0,0,0,0,0,0
401
+ 1,2,1,2,2,1,0,1,0,0,0,0,0,0,0,0,0,2
402
+ 1,2,0,1,1,0,2,1,2,0,0,0,0,0,2,0,0,0
403
+ 0,1,2,2,1,1,2,0,1,2,0,0,0,0,0,0,0,0
404
+ 0,1,1,2,2,1,0,1,2,2,0,0,0,0,0,0,0,0
405
+ 0,1,1,0,2,1,0,0,2,2,0,0,0,0,0,0,0,0
406
+ 2,1,0,1,1,2,1,2,0,0,0,2,0,0,0,0,0,0
407
+ 1,0,2,2,0,1,0,0,1,0,0,0,0,2,0,0,0,0
408
+ 2,1,1,1,1,0,2,2,0,0,0,0,0,0,0,0,0,2
409
+ 0,2,1,1,0,1,2,1,2,0,0,0,0,2,0,0,0,0
410
+ 2,1,0,1,2,1,2,1,0,0,0,2,0,0,0,0,0,0
411
+ 1,0,2,2,1,1,1,0,2,0,2,0,0,0,0,0,0,0
412
+ 0,1,2,2,2,1,1,0,1,0,0,0,0,0,0,0,2,0
413
+ 0,2,2,2,1,1,0,1,1,2,0,0,0,0,0,0,0,0
414
+ 1,2,0,0,0,0,1,1,2,0,0,0,2,0,0,0,0,0
415
+ 1,2,0,2,1,0,1,1,2,0,0,2,0,0,0,0,0,0
416
+ 0,2,2,0,1,1,2,1,1,2,0,0,0,0,0,0,0,0
417
+ 1,2,1,2,0,0,1,1,2,0,0,0,0,2,0,0,0,0
418
+ 0,1,1,0,2,2,2,1,1,0,0,0,2,0,0,0,0,0
419
+ 2,1,1,0,1,0,2,0,0,0,0,0,2,0,0,0,0,0
420
+ 1,2,0,2,1,1,2,1,0,0,0,0,0,0,0,0,0,2
421
+ 1,1,2,2,2,0,1,0,1,0,0,0,0,0,2,0,0,0
422
+ 2,2,0,1,1,2,1,1,0,0,0,2,0,0,0,0,0,0
423
+ 0,2,1,2,1,1,2,1,0,2,0,0,0,0,0,0,0,0
424
+ 0,1,2,2,0,1,0,1,0,0,0,0,0,2,0,0,0,0
425
+ 2,0,1,1,1,2,2,1,0,0,2,0,0,0,0,0,0,0
426
+ 1,2,0,2,0,1,1,1,2,0,0,2,0,0,0,0,0,0
427
+ 2,2,0,2,1,1,0,1,1,0,0,2,0,0,0,0,0,0
428
+ 0,2,0,1,1,2,2,1,1,2,0,0,0,0,0,0,0,0
429
+ 1,0,0,2,2,1,1,1,2,0,2,0,0,0,0,0,0,0
430
+ 0,1,2,2,2,1,0,1,1,0,0,0,0,0,0,2,0,0
431
+ 2,2,0,1,1,0,1,1,2,0,0,2,0,0,0,0,0,0
432
+ 2,1,1,0,1,0,2,2,1,0,0,0,2,0,0,0,0,0
433
+ 1,2,0,1,1,2,2,1,0,0,0,0,0,0,0,0,0,2
434
+ 2,0,2,1,0,0,1,0,1,0,2,0,0,0,0,0,0,0
435
+ 2,1,1,2,0,2,0,1,1,0,0,0,0,2,0,0,0,0
436
+ 1,2,0,0,1,1,2,1,2,0,0,0,2,0,0,0,0,0
437
+ 0,2,0,0,2,1,1,1,0,0,0,0,0,0,0,0,0,2
438
+ 0,2,1,0,1,2,2,1,1,2,0,0,0,0,0,0,0,0
439
+ 2,2,1,0,1,0,2,1,1,0,0,0,2,0,0,0,0,0
440
+ 0,2,0,1,2,1,1,1,2,2,0,0,0,0,0,0,0,0
441
+ 0,2,1,0,1,1,2,1,2,0,0,0,2,0,0,0,0,0
442
+ 2,0,1,1,2,0,2,1,1,0,0,0,0,0,2,0,0,0
443
+ 2,0,0,1,2,1,2,1,1,0,0,2,0,0,0,0,0,0
444
+ 0,2,2,1,1,0,1,1,2,2,0,0,0,0,0,0,0,0
445
+ 1,2,0,0,2,1,1,1,2,0,0,0,2,0,0,0,0,0
446
+ 0,2,2,0,1,1,1,1,2,2,0,0,0,0,0,0,0,0
447
+ 1,0,1,2,2,1,0,1,2,0,2,0,0,0,0,0,0,0
448
+ 2,1,0,1,2,1,2,0,1,0,0,2,0,0,0,0,0,0
model.py ADDED
@@ -0,0 +1,222 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import torch
2
+ import torch.nn as nn
3
+ import torch.nn.functional as F
4
+ import math
5
+ import csv
6
+
7
+
8
+ class Architecture(nn.Module):
9
+ def __init__(self) -> None:
10
+ super(Architecture, self).__init__()
11
+ self.input_size = 9
12
+ self.hidden_size_1 = 9
13
+ self.hidden_size_2 = 9
14
+ self.hidden_size_3 = 9
15
+ self.hidden_size_4 = 9
16
+ self.hidden_size_5 = 9
17
+ self.hidden_size_6 = 9
18
+ self.hidden_size_7 = 9
19
+ self.output_size = 9
20
+
21
+ self.fc1 = nn.Linear(self.input_size, self.hidden_size_1)
22
+ self.fc2 = nn.Linear(self.hidden_size_1, self.hidden_size_2)
23
+ self.fc3 = nn.Linear(self.hidden_size_2, self.hidden_size_3)
24
+ self.fc4 = nn.Linear(self.hidden_size_3, self.hidden_size_4)
25
+ self.fc5 = nn.Linear(self.hidden_size_4, self.hidden_size_5)
26
+ self.fc6 = nn.Linear(self.hidden_size_5, self.hidden_size_6)
27
+ self.fc7 = nn.Linear(self.hidden_size_6, self.hidden_size_7)
28
+ self.fc8 = nn.Linear(self.hidden_size_7, self.output_size)
29
+
30
+ self.loss = nn.CrossEntropyLoss()
31
+ self.relu = nn.ReLU()
32
+
33
+ def inference(self, x):
34
+ with torch.no_grad():
35
+ x1 = self.relu(self.fc1(x))
36
+ x2 = self.relu(self.fc2(x1))
37
+ x3 = self.relu(self.fc3(x2))
38
+ x4 = self.relu(self.fc4(x3))
39
+ x5 = self.relu(self.fc5(x4))
40
+ x6 = self.relu(self.fc6(x5))
41
+ x7 = self.relu(self.fc7(x6))
42
+ x8 = self.fc8(x7)
43
+ return x8
44
+
45
+ def load_model():
46
+ model = Architecture()
47
+ model.load_state_dict(torch.load('fine_tune_model_weights.pth'))
48
+ return model
49
+
50
+ def inference_model(model, input):
51
+ return model.inference(input)
52
+
53
+ def minimax(board, depth, is_maximizing):
54
+ if check_winner(board) == 2: # AI wins
55
+ return 1
56
+ if check_winner(board) == 1: # Human wins
57
+ return -1
58
+ if check_winner(board) == 3: # Draw
59
+ return 0
60
+
61
+ if is_maximizing:
62
+ best_score = -math.inf
63
+ for i in range(9):
64
+ if board[i] == 0:
65
+ board[i] = 2 # AI's move
66
+ score = minimax(board, depth + 1, False)
67
+ board[i] = 0
68
+ best_score = max(score, best_score)
69
+ return best_score
70
+ else:
71
+ best_score = math.inf
72
+ for i in range(9):
73
+ if board[i] == 0:
74
+ board[i] = 1 # Human's move
75
+ score = minimax(board, depth + 1, True)
76
+ board[i] = 0
77
+ best_score = min(score, best_score)
78
+ return best_score
79
+
80
+ def best_move_minimax(board):
81
+ best_score = -math.inf
82
+ move = None
83
+ for i in range(9):
84
+ if board[i] == 0:
85
+ board[i] = 2 # AI's move
86
+ score = minimax(board, 0, False)
87
+ board[i] = 0
88
+ if score > best_score:
89
+ best_score = score
90
+ move = i
91
+ return move
92
+
93
+ def oracle(board, position):
94
+ output_board = [0] * 9
95
+ output_board[position] = 2
96
+
97
+ # Get minimax prediction
98
+ minimax_move = best_move_minimax(board)
99
+
100
+ # Compare oracle's move with minimax prediction
101
+ if minimax_move == position:
102
+ return 1 # Predictions match
103
+ else:
104
+ return -1 # Predictions differ
105
+
106
+
107
+ def print_in_csv(board, position, comparison_result):
108
+ output_board = [0] * 9
109
+ output_board[position] = 2
110
+ with open('game_state.csv', 'a', newline='') as f:
111
+ writer = csv.writer(f)
112
+ writer.writerow([
113
+ ','.join(map(str, board)),
114
+ ','.join(map(str, output_board)),
115
+ comparison_result
116
+ ])
117
+
118
+ def decode_prediction(prediction, board):
119
+ result = torch.argmax(prediction)
120
+ position = result.item()
121
+ comparison_result = oracle(board, position)
122
+ print(f'Oracle comparison result: {comparison_result}')
123
+ print_in_csv(board, position, comparison_result)
124
+ board[position] = 2
125
+ return board
126
+
127
+ def encode_input(input):
128
+ return torch.tensor(input, dtype=torch.float32)
129
+
130
+
131
+ def play():
132
+ model = load_model()
133
+ model.eval()
134
+ print(model.inference(torch.randn(9)))
135
+
136
+
137
+ def print_board(board):
138
+
139
+ visual_board = [' ' if x == 0 else 'X' if x == 1 else 'O' for x in board]
140
+
141
+ print(f'{visual_board[0]} | {visual_board[1]} | {visual_board[2]}')
142
+ print('---------')
143
+ print(f'{visual_board[3]} | {visual_board[4]} | {visual_board[5]}')
144
+ print('---------')
145
+ print(f'{visual_board[6]} | {visual_board[7]} | {visual_board[8]}')
146
+ print('---------')
147
+
148
+
149
+ def check_winner(board):
150
+ # Check rows
151
+ for i in range(0, 9, 3):
152
+ if board[i] == board[i + 1] == board[i + 2] == 1:
153
+ return 1
154
+ if board[i] == board[i + 1] == board[i + 2] == 2:
155
+ return 2
156
+
157
+ # Check columns
158
+ for i in range(3):
159
+ if board[i] == board[i + 3] == board[i + 6] == 1:
160
+ return 1
161
+ if board[i] == board[i + 3] == board[i + 6] == 2:
162
+ return 2
163
+
164
+ # Check diagonals
165
+ if board[0] == board[4] == board[8] == 1:
166
+ return 1
167
+ if board[0] == board[4] == board[8] == 2:
168
+ return 2
169
+
170
+ if board[2] == board[4] == board[6] == 1:
171
+ return 1
172
+ if board[2] == board[4] == board[6] == 2:
173
+ return 2
174
+
175
+ # Check for a draw
176
+ if all(cell != 0 for cell in board):
177
+ return 3
178
+
179
+ return 0
180
+
181
+
182
+ def simulate_game():
183
+
184
+ board = [0, 0, 0, 0, 0, 0, 0, 0, 0]
185
+ end = False
186
+
187
+ while end != True:
188
+ print_board(board)
189
+ move = int(input('Enter move: '))
190
+ if move <= 9 and move >= 1 and board[move - 1] == 0:
191
+ board[move - 1] = 1
192
+ print_board(board)
193
+ if check_winner(board) == 1:
194
+ print('You win')
195
+ end = True
196
+ break
197
+ if check_winner(board) == 3:
198
+ print('Draw')
199
+ end = True
200
+ break
201
+ print('Computer is thinking...')
202
+ intput = encode_input(board)
203
+ model = load_model()
204
+ prediction = inference_model(model, intput)
205
+ output = decode_prediction(prediction, board)
206
+ board = output
207
+ if check_winner(board) == 2:
208
+ print_board(board)
209
+ print('Computer wins')
210
+ end = True
211
+ break
212
+ if check_winner(board) == 3:
213
+ print('Draw')
214
+ end = True
215
+ break
216
+
217
+ else:
218
+ print('Invalid move')
219
+
220
+
221
+ if __name__ == '__main__':
222
+ simulate_game()
model_weights.pth ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:9c13e13f96c58cb16d7e227a05eaa3e3d50031683cd259f557205c7992f83d1b
3
+ size 7966
training_model.ipynb ADDED
The diff for this file is too large to render. See raw diff