Some more bugfixes
Added a few more bugfixes
This commit is contained in:
1 file changed
+176
-49
+176
-49
@@ -369,7 +369,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 9,
|
"execution_count": 66,
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [
|
"outputs": [
|
||||||
{
|
{
|
||||||
@@ -385,7 +385,7 @@
|
|||||||
],
|
],
|
||||||
"source": [
|
"source": [
|
||||||
"def plot_othello_board(\n",
|
"def plot_othello_board(\n",
|
||||||
" board: np.ndarray,\n",
|
" board: np.ndarray | torch.Tensor,\n",
|
||||||
" action: np.ndarray | None = None,\n",
|
" action: np.ndarray | None = None,\n",
|
||||||
" ax=None,\n",
|
" ax=None,\n",
|
||||||
") -> None:\n",
|
") -> None:\n",
|
||||||
@@ -398,6 +398,8 @@
|
|||||||
" board: The bord that should be plotted. Only a single games is allowed. A numpy array of the form 8x8 is expected.\n",
|
" board: The bord that should be plotted. Only a single games is allowed. A numpy array of the form 8x8 is expected.\n",
|
||||||
" ax: If needed a matplotlib axis object can be defined that is used to place the board as a sublot into a bigger context.\n",
|
" ax: If needed a matplotlib axis object can be defined that is used to place the board as a sublot into a bigger context.\n",
|
||||||
" \"\"\"\n",
|
" \"\"\"\n",
|
||||||
|
" if isinstance(board, torch.Tensor):\n",
|
||||||
|
" board = board.cpu().detach().numpy()\n",
|
||||||
" assert board.shape == (8, 8)\n",
|
" assert board.shape == (8, 8)\n",
|
||||||
" plot_all = False\n",
|
" plot_all = False\n",
|
||||||
" if ax is None:\n",
|
" if ax is None:\n",
|
||||||
@@ -1274,12 +1276,12 @@
|
|||||||
" policy = policies[policy_index]\n",
|
" policy = policies[policy_index]\n",
|
||||||
" board_history_stack[turn_index, :, :, :] = current_boards\n",
|
" board_history_stack[turn_index, :, :, :] = current_boards\n",
|
||||||
" if policy_index == 0:\n",
|
" if policy_index == 0:\n",
|
||||||
" current_boards = current_boards * -1\n",
|
" current_boards *= -1\n",
|
||||||
" current_boards, action_taken = single_turn(current_boards, policy)\n",
|
" current_boards, action_taken = single_turn(current_boards, policy)\n",
|
||||||
" action_history_stack[turn_index, :] = action_taken\n",
|
" action_history_stack[turn_index, :] = action_taken\n",
|
||||||
"\n",
|
"\n",
|
||||||
" if policy_index == 0:\n",
|
" if policy_index == 0:\n",
|
||||||
" current_boards = current_boards * -1\n",
|
" current_boards *= -1\n",
|
||||||
"\n",
|
"\n",
|
||||||
" return board_history_stack, action_history_stack\n",
|
" return board_history_stack, action_history_stack\n",
|
||||||
"\n",
|
"\n",
|
||||||
@@ -2261,7 +2263,7 @@
|
|||||||
" )\n",
|
" )\n",
|
||||||
" q_learning_format[:, :, 0, :, :] = board_history\n",
|
" q_learning_format[:, :, 0, :, :] = board_history\n",
|
||||||
" q_learning_format[:, :, 1, :, :] = -1\n",
|
" q_learning_format[:, :, 1, :, :] = -1\n",
|
||||||
" \n",
|
"\n",
|
||||||
" game_index = list(range(board_history.shape[1]))\n",
|
" game_index = list(range(board_history.shape[1]))\n",
|
||||||
" for turn_index in range(SIMULATE_TURNS):\n",
|
" for turn_index in range(SIMULATE_TURNS):\n",
|
||||||
" q_learning_format[\n",
|
" q_learning_format[\n",
|
||||||
@@ -2366,7 +2368,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 50,
|
"execution_count": 128,
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [],
|
"outputs": [],
|
||||||
"source": [
|
"source": [
|
||||||
@@ -2427,15 +2429,19 @@
|
|||||||
" _q_learning_board = q_learning_boards[\n",
|
" _q_learning_board = q_learning_boards[\n",
|
||||||
" poss_turns[range(boards.shape[0]), action_x, action_y]\n",
|
" poss_turns[range(boards.shape[0]), action_x, action_y]\n",
|
||||||
" ].copy()\n",
|
" ].copy()\n",
|
||||||
" _q_learning_board[range(_q_learning_board.shape[0]), 1, action_x, action_y] = 1\n",
|
" _q_learning_board[\n",
|
||||||
" \n",
|
" range(_q_learning_board.shape[0]), 1, action_x, action_y\n",
|
||||||
|
" ] = 1\n",
|
||||||
|
"\n",
|
||||||
" ql_result = self.neural_network.forward(_q_learning_board)\n",
|
" ql_result = self.neural_network.forward(_q_learning_board)\n",
|
||||||
" results[poss_turns[:, action_x, action_y], action_x, action_y] = (\n",
|
" results[poss_turns[:, action_x, action_y], action_x, action_y] = (\n",
|
||||||
" ql_result.reshape(-1) + 0.1\n",
|
" ql_result.reshape(-1) + 0.1\n",
|
||||||
" )\n",
|
" )\n",
|
||||||
" return results.cpu().detach().numpy()\n",
|
" return results.cpu().detach().numpy()\n",
|
||||||
"\n",
|
"\n",
|
||||||
" def generate_trainings_data(self, generate_data_size: int) -> tuple[torch.Tensor, torch.Tensor]:\n",
|
" def generate_trainings_data(\n",
|
||||||
|
" self, generate_data_size: int\n",
|
||||||
|
" ) -> tuple[torch.Tensor, torch.Tensor]:\n",
|
||||||
" train_boards, train_actions = simulate_game(generate_data_size, (self, self))\n",
|
" train_boards, train_actions = simulate_game(generate_data_size, (self, self))\n",
|
||||||
" action_possible = ~np.all(train_actions[:, :] == -1, axis=2)\n",
|
" action_possible = ~np.all(train_actions[:, :] == -1, axis=2)\n",
|
||||||
" q_leaning_formatted_action = build_symetry_action(train_boards, train_actions)\n",
|
" q_leaning_formatted_action = build_symetry_action(train_boards, train_actions)\n",
|
||||||
@@ -2444,8 +2450,15 @@
|
|||||||
" who_won_fraction=self.who_won_fraction,\n",
|
" who_won_fraction=self.who_won_fraction,\n",
|
||||||
" final_score_fraction=self.final_score_fraction,\n",
|
" final_score_fraction=self.final_score_fraction,\n",
|
||||||
" )\n",
|
" )\n",
|
||||||
|
" q_rewords[::2, :] *= -1\n",
|
||||||
|
" # print(\"Some line to delete\")\n",
|
||||||
|
" # print(q_rewords.shape)\n",
|
||||||
" if self.symmetry_mode == SymmetryMode.MULTIPLY:\n",
|
" if self.symmetry_mode == SymmetryMode.MULTIPLY:\n",
|
||||||
" q_rewords = np.array([q_rewords] * 8)\n",
|
" print(q_rewords.shape)\n",
|
||||||
|
" new_q_rewords = np.zeros((2, 2, 2) + q_rewords.shape)\n",
|
||||||
|
" print(new_q_rewords.shape)\n",
|
||||||
|
" for i, k, l in ittertools.product((0, 1), (0, 1), (0, 1)):\n",
|
||||||
|
" new_q_rewords = q_rewords[i, k, j] = q_rewords\n",
|
||||||
" action_possible = np.array([action_possible] * 8).reshape(-1)\n",
|
" action_possible = np.array([action_possible] * 8).reshape(-1)\n",
|
||||||
"\n",
|
"\n",
|
||||||
" elif self.symmetry_mode == SymmetryMode.BREAK_SEQUENCE:\n",
|
" elif self.symmetry_mode == SymmetryMode.BREAK_SEQUENCE:\n",
|
||||||
@@ -2568,6 +2581,7 @@
|
|||||||
" pandas_result.columns = pd.MultiIndex.from_tuples(pandas_result.columns)\n",
|
" pandas_result.columns = pd.MultiIndex.from_tuples(pandas_result.columns)\n",
|
||||||
" return pandas_result\n",
|
" return pandas_result\n",
|
||||||
"\n",
|
"\n",
|
||||||
|
"\n",
|
||||||
"ql_policy1 = QLPolicy(\n",
|
"ql_policy1 = QLPolicy(\n",
|
||||||
" 0.95,\n",
|
" 0.95,\n",
|
||||||
" neural_network=DQLNet(),\n",
|
" neural_network=DQLNet(),\n",
|
||||||
@@ -2588,7 +2602,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 51,
|
"execution_count": 129,
|
||||||
"metadata": {
|
"metadata": {
|
||||||
"collapsed": false,
|
"collapsed": false,
|
||||||
"jupyter": {
|
"jupyter": {
|
||||||
@@ -2602,7 +2616,7 @@
|
|||||||
"(70, 10, 8, 8)"
|
"(70, 10, 8, 8)"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"execution_count": 51,
|
"execution_count": 129,
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"output_type": "execute_result"
|
"output_type": "execute_result"
|
||||||
}
|
}
|
||||||
@@ -2616,14 +2630,14 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 52,
|
"execution_count": 130,
|
||||||
"metadata": {
|
"metadata": {
|
||||||
"tags": []
|
"tags": []
|
||||||
},
|
},
|
||||||
"outputs": [
|
"outputs": [
|
||||||
{
|
{
|
||||||
"data": {
|
"data": {
|
||||||
"image/png": "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 truncated
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAABKUAAAJOCAYAAABm7rQwAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy88F64QAAAACXBIWXMAAA9hAAAPYQGoP6dpAACOSUlEQVR4nO3de3hU5b328Xsyk0wgRw4BCYSTQcBDbKVqlVbE0yYqoKXWKlRQqq1ite7XVtm1u62t0m7bXbuLpR4Q7EY8i1IVbZGDtSoCisGKGhQkGEBQSEgwk2TyvH9kJxJymklm1vMM8/1c11xXk8ya3521MnfHhzVrfMYYIwAAAAAAAMBDKbYDAAAAAAAAIPmwKAUAAAAAAADPsSgFAAAAAAAAz7EoBQAAAAAAAM+xKAUAAAAAAADPsSgFAAAAAAAAz7EoBQAAAAAAAM+xKAUAAAAAAADPBbwe2NDQoPLycmVlZcnn83k9HoCDjDHav3+/8vPzlZJib62cfgLQFhc6in4C0Bb6CYCrIu0nzxelysvLVVBQ4PVYAAmgrKxMgwYNsjaffgLQEZsdRT8B6Aj9BMBVnfWT54tSWVlZX3zR0+/1eOlA2O58MpDBtQy25x+UoUU/WGC9nySnjoe1DLbnk4EM7WSw2VH0ExmcmU8GJzPQT+4cCzKQwfp8xzJ01k+eL0o1n9LZ06+cy0d4PV6VCzfLVNfLlxFQ9oxCz+eTgQyuZbA9X5IqFpRKB8LWT/m23U+SG8fDdgbb88lAhkO50FH0ExlcmU8GtzLQT41cOBZkIIMr813JEGk/caFzAAAAAAAAeI5FKQAAAAAAAHiORSkAAAAAAAB4jkUpAAAAAAAAeI5FKQAAAAAAAHiORSkAAAAAAAB4jkUpAAAAAAAAeC7qRamXXnpJEydOVH5+vnw+n5566qk4xAKA6NFPAFxFPwFwFf0EwKaoF6Wqq6t1/PHH66677opHHgDoMvoJgKvoJwCuop8A2BSIdoPi4mIVFxfHIwsAdAv9BMBV9BMAV9FPAGzimlIAAAAAAADwXNRnSkUrFAopFAo1f11ZWRnvkQAQEfoJgKvoJwCuop8AxFLcz5SaM2eOcnJymm8FBQXxHgkAEaGfALiKfgLgKvoJQCzFfVFq9uzZqqioaL6VlZXFeyQARIR+AuAq+gmAq+gnALEU97fvBYNBBYPBeI8BgKjRTwBcRT8BcBX9BCCWol6Uqqqq0ubNm5u/3rJlizZs2KDevXtr8ODBMQ0HANGgnwC4in4C4Cr6CYBNUS9KrVu3TuPHj2/++t///d8lSdOnT9fChQtjFgwAokU/AXAV/QTAVfQTAJuiXpQ6/fTTZYyJRxYA6Bb6CYCr6CcArqKfANgU9wudAwAAAAAAAIdiUQoAAAAAAACeY1EKAAAAAAAAnmNRCgAAAAAAAJ5jUQoAAAAAAACeY1EKAAAAAAAAnmNRCgAAAAAAAJ7zGWOMlwMrKyuVk5PTODwj4OVoSZI5UC8ZST7J19P7+WQgg2sZbM+XJFNdL0mqqKhQdna2lQyS/X6SHDke/E2SgQwtMzjQUfQTGVyZTwbHMtBPkhw5FmQggyPznckQYT/ZSfd/mkLaGW55PhnI4FoG2/MdY31fuHA8bGewPZ8MZHCU9f3gwrEgg/35ZHArgyOs7wcXjgUZyODKfFcydMLqohRnSpGBDPYz2J4vuVmU/EufvQy255OBDK0yONZR9FNyZ7A9nwyOZaCfJDlyLMhABkfmO5Mhwn6ytyjV06/sGYWej61cuFmmul6+ngEr88lABtcy2J4vSRULSqUDYSuz22SpnyQ3joftDLbnk4EMh3Kqo+inpM9gez4Z3MpAPzVy4ViQgQyuzHclQ6T9xIXOAQAAAAAA4DkWpQAAAAAAAOA5FqUAAAAAAADgORalAAAAAAAA4DkWpQAAAAAAAOA5FqUAAAAAAADgORalAAAAAAAA4LmoFqXmzJmjE088UVlZWerXr58uuOACvffee/HKBgARo58AuIyOAuAq+gmATVEtSq1evVqzZs3Sa6+9pr///e+qq6vTOeeco+rq6njlA4CI0E8AXEZHAXAV/QTApkA0d37++edbfL1w4UL169dP69ev12mnnRbTYAAQDfoJgMvoKACuop8A2NSta0pVVFRIknr37h2TMAAQK/QTAJfRUQBcRT8B8FJUZ0odrKGhQT/84Q81duxYHXvsse3eLxQKKRQKNX9dWVnZ1ZEAEBH6CYDLIuko+gmADfQTAK91+UypWbNm6e2339bDDz/c4f3mzJmjnJyc5ltBQUFXRwJAROgnAC6LpKPoJwA20E8AvNalRalrr71WzzzzjFauXKlBgwZ1eN/Zs2eroqKi+VZWVtaloAAQCfoJgMsi7Sj6CYDX6CcANkT19j1jjH7wgx9oyZIlWrVqlYYNG9bpNsFgUMFgsMsBASAS9BMAl0XbUfQTAK/QTwBsimpRatasWVq8eLGefvppZWVlaefOnZKknJwc9ejRIy4BASAS9BMAl9FRAFxFPwGwKaq3782bN08VFRU6/fTTNWDAgObbI488Eq98ABAR+gmAy+goAK6inwDYFPXb9wDARfQTAJfRUQBcRT8BsKnLn74HAAAAAAAAdBWLUgAAAAAAAPAci1IAAAAAAADwHItSAAAAAAAA8ByLUgAAAAAAAPAci1IAAAAAAADwHItSAAAAAAAA8ByLUgAAAAAAAPCczxhjvBxYWVmpnJycxuEZAS9HS5LMgXrJSPJJvp7ezycDGVzLYHu+JJnqeklSRUWFsrOzrWSQ7PeT5Mjx4G+SDGRomcGBjqKfyODKfDI4loF+kuTIsSADGRyZ70yGCPvJTrr/0xTSznDL88lABtcy2J7vGOv7woXjYTuD7flkIIOjrO8HF44FGezPJ4NbGRxhfT+4cCzIQAZX5ruSoRNWF6U4U4oMZLCfwfZ8yc2i5F/67GWwPZ8MZGiVwbGOop+SO4Pt+WRwLAP9JMmRY0EGMjgy35kMEfaTvUWpnn5lzyj0fGzlws0y1fXy9QxYmU8GMriWwfZ8SapYUCodCFuZ3SZL/SS5cTxsZ7A9nwxkOJRTHUU/JX0G2/PJ4FYG+qmRC8eCDGRwZb4rGSLtJy50DgAAAAAAAM+xKAUAAAAAAADPWb2mFAAAAAAAgAvCu2sU3lsr1TVIqSny90qTPy/ddqzDGotSAAAAAAAgKZn6BtWVVipUslcNe0Ktfp7SN6hgUS+ljsiWL8CbzWKNRSkAAAAAAJB0wvtqVb10m8z+9j8prmFPSJ+v2KmatXuUMWmw/LlpHiY8/LHMBwAAAAAAkkp4X62qHt8qU9X+gtTBTFW9qh7fqvC+2jgnSy4sSgEAAAAAgKRh6htUvXSbVNsgmUg3klTbuJ2pb4hnvKQS1aLUvHnzVFRUpOzsbGVnZ+uUU07RsmXL4pUNACJGPwFwGR0FwFX0E5JRXWll41v2Il2QamIks79edaWVccmVjKJalBo0aJB+/etfa/369Vq3bp3OOOMMTZ48Wf/617/ilQ8AIkI/AXAZHQXAVfQTklGoZK/V7fGFqC50PnHixBZf33bbbZo3b55ee+01HXPMMTENBgDRoJ8AuIyOAuAq+gnJJry7ps1P2YtGw56Qwrtr5M9Lj1Gq5NXlT98Lh8N67LHHVF1drVNOOaXd+4VCIYVCXxzwykpOcwMQX/QTAJdF0lH0EwAb6Cckg/De2FyoPLyvlkWpGIj6QucbN25UZmamgsGgvv/972vJkiU6+uij273/nDlzlJOT03wrKCjoVmAAaA/9BMBl0XQU/QTAS/QTkkpdjC5SXsvFzmMh6kWpkSNHasOGDVqzZo2uvvpqTZ8+Xe+880679589e7YqKiqab2VlZd0KDADtoZ8AuCyajqKfAHiJfkJSSY16GaRtaTF6nCQX9dv30tLSVFhYKEkaM2aM1q5dqz/84Q+6++6727x/MBhUMBjsXkoAiAD9BMBl0XQU/QTAS/QTkom/V1psHic3No+T7Lq9tNfQ0NDiPcUA4Ar6CYDL6CgArqKfcDjz56UrpW/3FlZT+ga5nlSMRHWm1OzZs1VcXKzBgwdr//79Wrx4sVatWqUXXnghXvkAICL0EwCX0VEAXEU/IRkFi3rp8xU7u7U9YiOqRalPPvlEl112mXbs2KGcnBwVFRXphRde0Nlnnx2vfAAQEfoJgMvoKACuop+QjFJHZKtm7R6ZqnrJRLGhT/JlBpQ6Ijtu2ZJNVItS8+fPj1cOAOgW+gmAy+goAK6in5CMfIEUZUwarKrHtzZ+il4kC1M+SWmN2/kCXOQ8VtiTAAAAAAAgqfhz05T5zaHyZUZ2ro4vM6DMbw7lAucxFvWn7wEAAAAAACQ6f26asi4drrrSSoVK9qphT+sL/Kf0DSpY1EupI7I5QyoOWJQCAAAAAABJyRdIUdroXKWNzlV4d43C+2ob39KXliJ/bhqfshdnLEoBAAAAAICk589LZxHKY5x7BgAAAAAAAM+xKAUAAAAAAADPsSgFAAAAAAAAz/mMMcbLgZWVlcrJyWkcnuH9Ja3MgXrJSPJJvp52LqlFBjK4lMH2fEky1fWSpIqKCmVnZ1vJINnvJ8mR48HfJBnI0DKDAx1FP5HBlflkcCwD/STJkWNBBjI4Mt+ZDBH2k9ULnTeFtDPc8nwykMG1DLbnO8b6vnDheNjOYHs+GcjgKOv7wYVjQQb788ngVgZHWN8PLhwLMpDBlfmuZOiE1UUpzpQiAxnsZ7A9X3KzKPmXPnsZbM8nAxlaZXCso+in5M5gez4ZHMtAP0ly5FiQgQyOzHcmQ4T9ZG9Rqqdf2TMKPR9buXCzTHW9fD0DVuaTgQyuZbA9X5IqFpRKB8JWZrfJUj9JbhwP2xlszycDGQ7lVEfRT0mfwfZ8MriVgX5q5MKxIAMZXJnvSoZI+4kLnQMAAAAAAMBzLEoBAAAAAADAc1avKYXEFd5do/DeWqmuQUpNkb9XmvxLine truncated
|
||||||
"text/plain": [
|
"text/plain": [
|
||||||
"<Figure size 1200x600 with 8 Axes>"
|
"<Figure size 1200x600 with 8 Axes>"
|
||||||
]
|
]
|
||||||
@@ -2638,7 +2652,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 53,
|
"execution_count": 131,
|
||||||
"metadata": {
|
"metadata": {
|
||||||
"collapsed": false,
|
"collapsed": false,
|
||||||
"jupyter": {
|
"jupyter": {
|
||||||
@@ -2652,7 +2666,7 @@
|
|||||||
"(70, 10, 2, 8, 8)"
|
"(70, 10, 2, 8, 8)"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"execution_count": 53,
|
"execution_count": 131,
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"output_type": "execute_result"
|
"output_type": "execute_result"
|
||||||
}
|
}
|
||||||
@@ -2664,7 +2678,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 54,
|
"execution_count": 132,
|
||||||
"metadata": {
|
"metadata": {
|
||||||
"collapsed": false,
|
"collapsed": false,
|
||||||
"jupyter": {
|
"jupyter": {
|
||||||
@@ -2674,7 +2688,7 @@
|
|||||||
"outputs": [
|
"outputs": [
|
||||||
{
|
{
|
||||||
"data": {
|
"data": {
|
||||||
"image/png": "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 truncated
|
"image/png": "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 truncated
|
||||||
"text/plain": [
|
"text/plain": [
|
||||||
"<Figure size 1200x600 with 8 Axes>"
|
"<Figure size 1200x600 with 8 Axes>"
|
||||||
]
|
]
|
||||||
@@ -2687,27 +2701,6 @@
|
|||||||
"plot_othello_boards(q_leaning_formatted_action[:8, 0, 1])"
|
"plot_othello_boards(q_leaning_formatted_action[:8, 0, 1])"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"cell_type": "code",
|
|
||||||
"execution_count": 55,
|
|
||||||
"metadata": {},
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"ename": "NotImplementedError",
|
|
||||||
"evalue": "",
|
|
||||||
"output_type": "error",
|
|
||||||
"traceback": [
|
|
||||||
"\u001B[1;31m---------------------------------------------------------------------------\u001B[0m",
|
|
||||||
"\u001B[1;31mNotImplementedError\u001B[0m Traceback (most recent call last)",
|
|
||||||
"Cell \u001B[1;32mIn[55], line 1\u001B[0m\n\u001B[1;32m----> 1\u001B[0m \u001B[38;5;28;01mraise\u001B[39;00m \u001B[38;5;167;01mNotImplementedError\u001B[39;00m\n",
|
|
||||||
"\u001B[1;31mNotImplementedError\u001B[0m: "
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"source": [
|
|
||||||
"raise NotImplementedError"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": null,
|
"execution_count": null,
|
||||||
@@ -2731,7 +2724,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 56,
|
"execution_count": 133,
|
||||||
"metadata": {
|
"metadata": {
|
||||||
"tags": []
|
"tags": []
|
||||||
},
|
},
|
||||||
@@ -2742,7 +2735,7 @@
|
|||||||
"'QL-M-G08-WW10-FSF00-DQLNet-MSELoss'"
|
"'QL-M-G08-WW10-FSF00-DQLNet-MSELoss'"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"execution_count": 56,
|
"execution_count": 133,
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"output_type": "execute_result"
|
"output_type": "execute_result"
|
||||||
}
|
}
|
||||||
@@ -2761,7 +2754,28 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 57,
|
"execution_count": 55,
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"ename": "NotImplementedError",
|
||||||
|
"evalue": "",
|
||||||
|
"output_type": "error",
|
||||||
|
"traceback": [
|
||||||
|
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
|
||||||
|
"\u001b[1;31mNotImplementedError\u001b[0m Traceback (most recent call last)",
|
||||||
|
"Cell \u001b[1;32mIn[55], line 1\u001b[0m\n\u001b[1;32m----> 1\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mNotImplementedError\u001b[39;00m\n",
|
||||||
|
"\u001b[1;31mNotImplementedError\u001b[0m: "
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"raise NotImplementedError"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 134,
|
||||||
"metadata": {
|
"metadata": {
|
||||||
"tags": []
|
"tags": []
|
||||||
},
|
},
|
||||||
@@ -2772,7 +2786,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": null,
|
"execution_count": 126,
|
||||||
"metadata": {
|
"metadata": {
|
||||||
"tags": []
|
"tags": []
|
||||||
},
|
},
|
||||||
@@ -2780,7 +2794,7 @@
|
|||||||
{
|
{
|
||||||
"data": {
|
"data": {
|
||||||
"application/vnd.jupyter.widget-view+json": {
|
"application/vnd.jupyter.widget-view+json": {
|
||||||
"model_id": "1b17c38ecb3a411486de1eb4161333db",
|
"model_id": "9decb71e42fc4e81ad4071be089486da",
|
||||||
"version_major": 2,
|
"version_major": 2,
|
||||||
"version_minor": 0
|
"version_minor": 0
|
||||||
},
|
},
|
||||||
@@ -2794,7 +2808,7 @@
|
|||||||
{
|
{
|
||||||
"data": {
|
"data": {
|
||||||
"application/vnd.jupyter.widget-view+json": {
|
"application/vnd.jupyter.widget-view+json": {
|
||||||
"model_id": "f63762051e604180a1a26ba73da6646c",
|
"model_id": "bc9b419aef164aeca72c4458faad4e5f",
|
||||||
"version_major": 2,
|
"version_major": 2,
|
||||||
"version_minor": 0
|
"version_minor": 0
|
||||||
},
|
},
|
||||||
@@ -2804,6 +2818,25 @@
|
|||||||
},
|
},
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"output_type": "display_data"
|
"output_type": "display_data"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ename": "KeyboardInterrupt",
|
||||||
|
"evalue": "",
|
||||||
|
"output_type": "error",
|
||||||
|
"traceback": [
|
||||||
|
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
|
||||||
|
"\u001b[1;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)",
|
||||||
|
"Cell \u001b[1;32mIn[126], line 1\u001b[0m\n\u001b[1;32m----> 1\u001b[0m \u001b[43mql_policy\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtrain\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m200\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m10\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m1000\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m100\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m[\u001b[49m\u001b[43mRandomPolicy\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mGreedyPolicy\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m]\u001b[49m\u001b[43m)\u001b[49m\n",
|
||||||
|
"Cell \u001b[1;32mIn[120], line 189\u001b[0m, in \u001b[0;36mQLPolicy.train\u001b[1;34m(self, epochs, batches, batch_size, eval_batch_size, compare_with, save_every_epoch, live_plot)\u001b[0m\n\u001b[0;32m 187\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m _ \u001b[38;5;129;01min\u001b[39;00m tqdm(\u001b[38;5;28mrange\u001b[39m(epochs)):\n\u001b[0;32m 188\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m _ \u001b[38;5;129;01min\u001b[39;00m tqdm(\u001b[38;5;28mrange\u001b[39m(batches)):\n\u001b[1;32m--> 189\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtrain_batch\u001b[49m\u001b[43m(\u001b[49m\u001b[43mbatch_size\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 190\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mtraining_results\u001b[38;5;241m.\u001b[39mappend(\n\u001b[0;32m 191\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mevaluate_model(compare_with, eval_batch_size)\n\u001b[0;32m 192\u001b[0m )\n\u001b[0;32m 193\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m save_every_epoch:\n",
|
||||||
|
"Cell \u001b[1;32mIn[120], line 104\u001b[0m, in \u001b[0;36mQLPolicy.train_batch\u001b[1;34m(self, nr_of_games)\u001b[0m\n\u001b[0;32m 103\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mtrain_batch\u001b[39m(\u001b[38;5;28mself\u001b[39m, nr_of_games: \u001b[38;5;28mint\u001b[39m):\n\u001b[1;32m--> 104\u001b[0m x_train, y_train \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgenerate_trainings_data\u001b[49m\u001b[43m(\u001b[49m\u001b[43mnr_of_games\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 105\u001b[0m y_pred \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mneural_network\u001b[38;5;241m.\u001b[39mforward(x_train)\n\u001b[0;32m 106\u001b[0m loss_score \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mloss(y_pred, y_train)\n",
|
||||||
|
"Cell \u001b[1;32mIn[120], line 67\u001b[0m, in \u001b[0;36mQLPolicy.generate_trainings_data\u001b[1;34m(self, generate_data_size)\u001b[0m\n\u001b[0;32m 66\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mgenerate_trainings_data\u001b[39m(\u001b[38;5;28mself\u001b[39m, generate_data_size: \u001b[38;5;28mint\u001b[39m) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m \u001b[38;5;28mtuple\u001b[39m[torch\u001b[38;5;241m.\u001b[39mTensor, torch\u001b[38;5;241m.\u001b[39mTensor]:\n\u001b[1;32m---> 67\u001b[0m train_boards, train_actions \u001b[38;5;241m=\u001b[39m \u001b[43msimulate_game\u001b[49m\u001b[43m(\u001b[49m\u001b[43mgenerate_data_size\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 68\u001b[0m action_possible \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m~\u001b[39mnp\u001b[38;5;241m.\u001b[39mall(train_actions[:, :] \u001b[38;5;241m==\u001b[39m \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m, axis\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m2\u001b[39m)\n\u001b[0;32m 69\u001b[0m q_leaning_formatted_action \u001b[38;5;241m=\u001b[39m build_symetry_action(train_boards, train_actions)\n",
|
||||||
|
"Cell \u001b[1;32mIn[23], line 25\u001b[0m, in \u001b[0;36msimulate_game\u001b[1;34m(nr_of_games, policies, tqdm_on)\u001b[0m\n\u001b[0;32m 23\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m policy_index \u001b[38;5;241m==\u001b[39m \u001b[38;5;241m0\u001b[39m:\n\u001b[0;32m 24\u001b[0m current_boards \u001b[38;5;241m=\u001b[39m current_boards \u001b[38;5;241m*\u001b[39m \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m\n\u001b[1;32m---> 25\u001b[0m current_boards, action_taken \u001b[38;5;241m=\u001b[39m \u001b[43msingle_turn\u001b[49m\u001b[43m(\u001b[49m\u001b[43mcurrent_boards\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mpolicy\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 26\u001b[0m action_history_stack[turn_index, :] \u001b[38;5;241m=\u001b[39m action_taken\n\u001b[0;32m 28\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m policy_index \u001b[38;5;241m==\u001b[39m \u001b[38;5;241m0\u001b[39m:\n",
|
||||||
|
"Cell \u001b[1;32mIn[22], line 15\u001b[0m, in \u001b[0;36msingle_turn\u001b[1;34m(current_boards, policy)\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21msingle_turn\u001b[39m(\n\u001b[0;32m 2\u001b[0m current_boards: np, policy: GamePolicy\n\u001b[0;32m 3\u001b[0m ) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m \u001b[38;5;28mtuple\u001b[39m[np\u001b[38;5;241m.\u001b[39mndarray, np\u001b[38;5;241m.\u001b[39mndarray]:\n\u001b[0;32m 4\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Execute a single turn on a board.\u001b[39;00m\n\u001b[0;32m 5\u001b[0m \n\u001b[0;32m 6\u001b[0m \u001b[38;5;124;03m Places a new stone on the board. Turns captured enemy stones.\u001b[39;00m\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 13\u001b[0m \u001b[38;5;124;03m The new game board and the policy vector containing the index of the action used.\u001b[39;00m\n\u001b[0;32m 14\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[1;32m---> 15\u001b[0m policy_results \u001b[38;5;241m=\u001b[39m \u001b[43mpolicy\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget_policy\u001b[49m\u001b[43m(\u001b[49m\u001b[43mcurrent_boards\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 17\u001b[0m \u001b[38;5;66;03m# if the constant VERIFY_POLICY is set to true the policy is verified. Should be good though.\u001b[39;00m\n\u001b[0;32m 18\u001b[0m \u001b[38;5;66;03m# todo deactivate the policy verification after some testing.\u001b[39;00m\n\u001b[0;32m 19\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m VERIFY_POLICY:\n",
|
||||||
|
"Cell \u001b[1;32mIn[19], line 65\u001b[0m, in \u001b[0;36mGamePolicy.get_policy\u001b[1;34m(self, boards)\u001b[0m\n\u001b[0;32m 58\u001b[0m policies \u001b[38;5;241m=\u001b[39m policies \u001b[38;5;241m*\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mepsilon \u001b[38;5;241m+\u001b[39m np\u001b[38;5;241m.\u001b[39mrandom\u001b[38;5;241m.\u001b[39mrand(\u001b[38;5;241m*\u001b[39mboards\u001b[38;5;241m.\u001b[39mshape) \u001b[38;5;241m*\u001b[39m (\n\u001b[0;32m 59\u001b[0m \u001b[38;5;241m1\u001b[39m \u001b[38;5;241m-\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mepsilon\n\u001b[0;32m 60\u001b[0m )\n\u001b[0;32m 62\u001b[0m \u001b[38;5;66;03m# todo talk to team about backpropagation of score and epsilon for greedy factor\u001b[39;00m\n\u001b[0;32m 63\u001b[0m \n\u001b[0;32m 64\u001b[0m \u001b[38;5;66;03m# todo possibly change this function to only validate the purpose turn and not all turns\u001b[39;00m\n\u001b[1;32m---> 65\u001b[0m possible_turns \u001b[38;5;241m=\u001b[39m \u001b[43mget_possible_turns\u001b[49m\u001b[43m(\u001b[49m\u001b[43mboards\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 66\u001b[0m policies[possible_turns \u001b[38;5;241m==\u001b[39m \u001b[38;5;28;01mFalse\u001b[39;00m] \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1.0\u001b[39m\n\u001b[0;32m 67\u001b[0m max_indices \u001b[38;5;241m=\u001b[39m [\n\u001b[0;32m 68\u001b[0m np\u001b[38;5;241m.\u001b[39munravel_index(policy\u001b[38;5;241m.\u001b[39margmax(), policy\u001b[38;5;241m.\u001b[39mshape) \u001b[38;5;28;01mfor\u001b[39;00m policy \u001b[38;5;129;01min\u001b[39;00m policies\n\u001b[0;32m 69\u001b[0m ]\n",
|
||||||
|
"Cell \u001b[1;32mIn[13], line 60\u001b[0m, in \u001b[0;36mget_possible_turns\u001b[1;34m(boards, tqdm_on)\u001b[0m\n\u001b[0;32m 58\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m poss_turns[game, idx, idy]:\n\u001b[0;32m 59\u001b[0m position \u001b[38;5;241m=\u001b[39m idx, idy\n\u001b[1;32m---> 60\u001b[0m poss_turns[game, idx, idy] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43many\u001b[39;49m\u001b[43m(\u001b[49m\n\u001b[0;32m 61\u001b[0m \u001b[43m \u001b[49m\u001b[43m_recursive_steps\u001b[49m\u001b[43m(\u001b[49m\u001b[43mboards\u001b[49m\u001b[43m[\u001b[49m\u001b[43mgame\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m:\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m:\u001b[49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdirection\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mposition\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m>\u001b[39;49m\u001b[43m \u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\n\u001b[0;32m 62\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mdirection\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mDIRECTIONS\u001b[49m\n\u001b[0;32m 63\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 64\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m poss_turns\n",
|
||||||
|
"Cell \u001b[1;32mIn[13], line 60\u001b[0m, in \u001b[0;36m<genexpr>\u001b[1;34m(.0)\u001b[0m\n\u001b[0;32m 58\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m poss_turns[game, idx, idy]:\n\u001b[0;32m 59\u001b[0m position \u001b[38;5;241m=\u001b[39m idx, idy\n\u001b[1;32m---> 60\u001b[0m poss_turns[game, idx, idy] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28many\u001b[39m(\n\u001b[0;32m 61\u001b[0m _recursive_steps(boards[game, :, :], direction, position) \u001b[38;5;241m>\u001b[39m \u001b[38;5;241m0\u001b[39m\n\u001b[0;32m 62\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m direction \u001b[38;5;129;01min\u001b[39;00m DIRECTIONS\n\u001b[0;32m 63\u001b[0m )\n\u001b[0;32m 64\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m poss_turns\n",
|
||||||
|
"\u001b[1;31mKeyboardInterrupt\u001b[0m: "
|
||||||
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"source": [
|
"source": [
|
||||||
@@ -2812,10 +2845,104 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": null,
|
"execution_count": 127,
|
||||||
"metadata": {},
|
"metadata": {
|
||||||
"outputs": [],
|
"tags": []
|
||||||
"source": []
|
},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"name": "stdout",
|
||||||
|
"output_type": "stream",
|
||||||
|
"text": [
|
||||||
|
"(70, 1)\n",
|
||||||
|
"(2, 2, 2, 70, 1)\n"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ename": "IndexError",
|
||||||
|
"evalue": "too many indices for array: array is 2-dimensional, but 3 were indexed",
|
||||||
|
"output_type": "error",
|
||||||
|
"traceback": [
|
||||||
|
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
|
||||||
|
"\u001b[1;31mIndexError\u001b[0m Traceback (most recent call last)",
|
||||||
|
"Cell \u001b[1;32mIn[127], line 1\u001b[0m\n\u001b[1;32m----> 1\u001b[0m boards_and_actions, score \u001b[38;5;241m=\u001b[39m \u001b[43mql_policy\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgenerate_trainings_data\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m1\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[0;32m 2\u001b[0m \u001b[38;5;28mprint\u001b[39m(boards_and_actions\u001b[38;5;241m.\u001b[39mshape)\n\u001b[0;32m 3\u001b[0m \u001b[38;5;28mprint\u001b[39m(score\u001b[38;5;241m.\u001b[39mshape)\n",
|
||||||
|
"Cell \u001b[1;32mIn[120], line 82\u001b[0m, in \u001b[0;36mQLPolicy.generate_trainings_data\u001b[1;34m(self, generate_data_size)\u001b[0m\n\u001b[0;32m 80\u001b[0m new_q_rewords \u001b[38;5;241m=\u001b[39m np\u001b[38;5;241m.\u001b[39mzeros((\u001b[38;5;241m2\u001b[39m,\u001b[38;5;241m2\u001b[39m,\u001b[38;5;241m2\u001b[39m) \u001b[38;5;241m+\u001b[39m q_rewords\u001b[38;5;241m.\u001b[39mshape)\n\u001b[0;32m 81\u001b[0m \u001b[38;5;28mprint\u001b[39m(new_q_rewords\u001b[38;5;241m.\u001b[39mshape)\n\u001b[1;32m---> 82\u001b[0m new_q_rewords \u001b[38;5;241m=\u001b[39m \u001b[43mq_rewords\u001b[49m\u001b[43m[\u001b[49m\u001b[43m:\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m:\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m:\u001b[49m\u001b[43m]\u001b[49m \u001b[38;5;241m=\u001b[39m q_rewords\n\u001b[0;32m 83\u001b[0m action_possible \u001b[38;5;241m=\u001b[39m np\u001b[38;5;241m.\u001b[39marray([action_possible] \u001b[38;5;241m*\u001b[39m \u001b[38;5;241m8\u001b[39m)\u001b[38;5;241m.\u001b[39mreshape(\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m)\n\u001b[0;32m 85\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39msymmetry_mode \u001b[38;5;241m==\u001b[39m SymmetryMode\u001b[38;5;241m.\u001b[39mBREAK_SEQUENCE:\n",
|
||||||
|
"\u001b[1;31mIndexError\u001b[0m: too many indices for array: array is 2-dimensional, but 3 were indexed"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"boards_and_actions, score = ql_policy.generate_trainings_data(1)\n",
|
||||||
|
"print(boards_and_actions.shape)\n",
|
||||||
|
"print(score.shape)"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 140,
|
||||||
|
"metadata": {
|
||||||
|
"tags": []
|
||||||
|
},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"text/plain": [
|
||||||
|
"torch.Size([480, 2, 8, 8])"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"execution_count": 140,
|
||||||
|
"metadata": {},
|
||||||
|
"output_type": "execute_result"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"boards_and_actions.shape"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 138,
|
||||||
|
"metadata": {
|
||||||
|
"tags": []
|
||||||
|
},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"image/png": "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 truncated
|
||||||
|
"text/plain": [
|
||||||
|
"<Figure size 1200x600 with 8 Axes>"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"metadata": {},
|
||||||
|
"output_type": "display_data"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"plot_othello_boards(boards_and_actions[:8, 0])"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 139,
|
||||||
|
"metadata": {
|
||||||
|
"tags": []
|
||||||
|
},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"text/plain": [
|
||||||
|
"tensor([-1.5325e-06, 1.9156e-06, -2.3945e-06, 2.9932e-06, -3.7414e-06,\n",
|
||||||
|
" 4.6768e-06, -5.8460e-06, 7.3075e-06])"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"execution_count": 139,
|
||||||
|
"metadata": {},
|
||||||
|
"output_type": "execute_result"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"score[:8, 0]"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "markdown",
|
"cell_type": "markdown",
|
||||||
|
|||||||
Reference in new issue
Block a user