diff --git a/main.ipynb b/main.ipynb index 31c7575..c760046 100644 --- a/main.ipynb +++ b/main.ipynb @@ -95,6 +95,7 @@ "metadata": {}, "outputs": [], "source": [ + "\n", "%load_ext blackcellmagic" ] }, @@ -131,6 +132,7 @@ "metadata": {}, "outputs": [], "source": [ + "import itertools\n", "import numpy as np\n", "import abc\n", "from typing import Final\n", @@ -315,7 +317,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 8, "metadata": {}, "outputs": [ { @@ -437,14 +439,22 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 16, "metadata": {}, "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "8.78 ms ± 868 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n", + "82.7 ms ± 585 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)\n" + ] + }, { "data": { "text/plain": "array([[[False, False, False, False, False, False, False, False],\n [False, False, False, False, False, False, False, False],\n [False, False, False, True, False, False, False, False],\n [False, False, True, False, False, False, False, False],\n [False, False, False, False, False, True, False, False],\n [False, False, False, False, True, False, False, False],\n [False, False, False, False, False, False, False, False],\n [False, False, False, False, False, False, False, False]]])" }, - "execution_count": 11, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" } @@ -457,10 +467,10 @@ " board: The board that should be checked for a playable action.\n", " rec_direction: The direction that should be checked.\n", " rec_position: The position that should be checked.\n", - " step_one:\n", + " step_one: Defines if the call of this function is the firs or not. Should be kept to the default value for proper functionality.\n", "\n", " Returns:\n", - "\n", + " True if a turn is possible for possition and direction on the board defined.\n", " \"\"\"\n", " rec_position = rec_position + rec_direction\n", " if np.any((rec_position >= BOARD_SIZE) | (rec_position < 0)):\n", @@ -475,49 +485,43 @@ "\n", "\n", "def get_possible_turns(boards: np.ndarray) -> np.ndarray:\n", - " try:\n", - " _poss_turns = boards == 0\n", - " _poss_turns &= binary_dilation(boards == -1, SURROUNDING)\n", - " except RuntimeError as err:\n", - " print(boards)\n", - " print(boards == -1)\n", - " print(\"err\")\n", - " raise err\n", - " for game in range(boards.shape[0]):\n", - " for idx in range(BOARD_SIZE):\n", - " for idy in range(BOARD_SIZE):\n", + " \"\"\"Check where turns are possible on a board.\n", "\n", - " position = idx, idy\n", - " if _poss_turns[game, idx, idy]:\n", - " _poss_turns[game, idx, idy] = any(\n", - " _recursive_steps(boards[game, :, :], direction, position)\n", - " for direction in DIRECTIONS\n", - " )\n", + " Args:\n", + " boards: A stack of boards to check.\n", + "\n", + " Returns:\n", + " A stack of game boards containing boolean values showing where turns are possible for the player.\n", + " \"\"\"\n", + " _poss_turns = boards == 0 # checks where fields are empty.\n", + " _poss_turns &= binary_dilation(\n", + " boards == -1, SURROUNDING\n", + " ) # checks where fields are next to an enemy filed an empty\n", + " for game, idx, idy in itertools.product(\n", + " range(boards.shape[0]), range(BOARD_SIZE), range(BOARD_SIZE)\n", + " ):\n", + " position = idx, idy\n", + " if _poss_turns[game, idx, idy]:\n", + " _poss_turns[game, idx, idy] = any(\n", + " _recursive_steps(boards[game, :, :], direction, position)\n", + " for direction in DIRECTIONS\n", + " )\n", " return _poss_turns\n", "\n", "\n", - "# %timeit get_possible_turns(get_new_games(10))\n", - "# %timeit get_possible_turns(get_new_games(100))\n", - "get_possible_turns(get_new_games(3))[:1]" + "%timeit get_possible_turns(get_new_games(10)) # checks turn possibility evaluation time for 10 initial games\n", + "%timeit get_possible_turns(get_new_games(100)) # check turn possibility evaluation time for 100 initial games\n", + "get_possible_turns(get_new_games(3))[:1] # shows a singe game" ] }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": "(array([2, 2, 2]), array([2, 2, 2]))" - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "def board_evaluation_final(array: np.ndarray):\n", - " score1, score2 = np.sum(array == 1, axis=(1, 2)), np.sum(array == -1, axis=(1, 2))\n", + "def board_evaluation_final(boards: np.ndarray) -> tuple[np.ndarray, np.ndarray]:\n", + " score1, score2 = np.sum(boards == 1, axis=(1, 2)), np.sum(boards == -1, axis=(1, 2))\n", " player_1_won = score1 > score2\n", " player_2_won = score1 < score2\n", " score1_final = 64 - score2[player_1_won]\n", @@ -527,18 +531,22 @@ " return score1, score2\n", "\n", "\n", - "def board_evaluation(array: np.ndarray):\n", - " score1, score2 = np.sum(array == 1, axis=(1, 2)), np.sum(array == -1, axis=(1, 2))\n", + "def board_evaluation(boards: np.ndarray) -> tuple[np.ndarray, np.ndarray]:\n", + " score1, score2 = np.sum(boards == 1, axis=(1, 2)), np.sum(boards == -1, axis=(1, 2))\n", " return score1, score2\n", "\n", "\n", + "def board_score(boards: np.ndarray) -> tuple[np.ndarray]:\n", + " return np.sign(np.sum(boards, axis=(1, 2)))\n", + "\n", + "\n", "board_evaluation(get_new_games(3))\n", "board_evaluation_final(get_new_games(3))" ] }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -561,7 +569,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -605,18 +613,9 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": "array([[ 0, 0, 0, 0, 0, 0, 0, 0],\n [ 0, 0, 0, 0, 0, 0, 0, 0],\n [ 0, 0, 0, 1, 0, 0, 0, 0],\n [ 0, 0, 0, 1, 1, 0, 0, 0],\n [ 0, 0, 0, 1, -1, 0, 0, 0],\n [ 0, 0, 0, 0, 0, 0, 0, 0],\n [ 0, 0, 0, 0, 0, 0, 0, 0],\n [ 0, 0, 0, 0, 0, 0, 0, 0]])" - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "class InvalidTurn(ValueError):\n", " pass\n", @@ -664,7 +663,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -698,7 +697,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -721,25 +720,9 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "110 ms ± 7.6 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)\n" - ] - }, - { - "data": { - "text/plain": "array([[[0, 0, 0, ..., 0, 0, 0],\n [0, 0, 0, ..., 0, 0, 0],\n [0, 0, 0, ..., 0, 0, 0],\n ...,\n [0, 0, 0, ..., 0, 0, 0],\n [0, 0, 0, ..., 0, 0, 0],\n [0, 0, 0, ..., 0, 0, 0]],\n\n [[0, 0, 0, ..., 0, 0, 0],\n [0, 0, 0, ..., 0, 0, 0],\n [0, 0, 0, ..., 0, 0, 0],\n ...,\n [0, 0, 0, ..., 0, 0, 0],\n [0, 0, 0, ..., 0, 0, 0],\n [0, 0, 0, ..., 0, 0, 0]],\n\n [[0, 0, 0, ..., 0, 0, 0],\n [0, 0, 0, ..., 0, 0, 0],\n [0, 0, 0, ..., 0, 0, 0],\n ...,\n [0, 0, 0, ..., 0, 0, 0],\n [0, 0, 0, ..., 0, 0, 0],\n [0, 0, 0, ..., 0, 0, 0]],\n\n ...,\n\n [[0, 0, 0, ..., 0, 0, 0],\n [0, 0, 0, ..., 0, 0, 0],\n [0, 0, 0, ..., 0, 0, 0],\n ...,\n [0, 0, 0, ..., 0, 0, 0],\n [0, 0, 0, ..., 0, 0, 0],\n [0, 0, 0, ..., 0, 0, 0]],\n\n [[0, 0, 0, ..., 0, 0, 0],\n [0, 0, 0, ..., 0, 0, 0],\n [0, 0, 0, ..., 0, 0, 0],\n ...,\n [0, 0, 0, ..., 0, 0, 0],\n [0, 0, 0, ..., 0, 0, 0],\n [0, 0, 0, ..., 0, 0, 0]],\n\n [[0, 0, 0, ..., 0, 0, 0],\n [0, 0, 0, ..., 0, 0, 0],\n [0, 0, 0, ..., 0, 0, 0],\n ...,\n [0, 0, 0, ..., 0, 0, 0],\n [0, 0, 0, ..., 0, 0, 0],\n [0, 0, 0, ..., 0, 0, 0]]])" - }, - "execution_count": 18, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "def single_turn(\n", " current_boards: np, policy: GamePolicy\n", @@ -761,25 +744,9 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "9.34 s ± 430 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)\n" - ] - }, - { - "data": { - "text/plain": "(array([[[[ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n ...,\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.]],\n \n [[ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n ...,\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.]],\n \n [[ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n ...,\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.]],\n \n ...,\n \n [[ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n ...,\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.]],\n \n [[ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n ...,\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.]],\n \n [[ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n ...,\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.]]],\n \n \n [[[ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n ...,\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.]],\n \n [[ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n ...,\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.]],\n \n [[ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n ...,\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.]],\n \n ...,\n \n [[ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n ...,\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.]],\n \n [[ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n ...,\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.]],\n \n [[ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n ...,\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.]]],\n \n \n [[[ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n ...,\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.]],\n \n [[ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n ...,\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.]],\n \n [[ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n ...,\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.]],\n \n ...,\n \n [[ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n ...,\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.]],\n \n [[ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n ...,\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.]],\n \n [[ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n ...,\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.]]],\n \n \n ...,\n \n \n [[[ 1., 1., 1., ..., 1., 1., -1.],\n [-1., 1., -1., ..., 1., 1., -1.],\n [-1., 1., 1., ..., -1., 1., -1.],\n ...,\n [-1., 1., -1., ..., 1., 1., -1.],\n [-1., -1., -1., ..., -1., 1., -1.],\n [-1., -1., -1., ..., 1., 1., 1.]],\n \n [[-1., -1., -1., ..., -1., -1., -1.],\n [-1., -1., -1., ..., -1., -1., 1.],\n [-1., -1., 1., ..., -1., -1., 1.],\n ...,\n [-1., -1., -1., ..., 1., 1., 1.],\n [-1., -1., -1., ..., 1., 1., 1.],\n [-1., -1., -1., ..., 1., 1., 1.]],\n \n [[-1., -1., -1., ..., -1., -1., -1.],\n [-1., -1., 1., ..., -1., -1., -1.],\n [-1., 1., -1., ..., 1., -1., -1.],\n ...,\n [ 1., 1., 1., ..., -1., 1., 1.],\n [-1., -1., -1., ..., 1., 1., 1.],\n [-1., -1., -1., ..., -1., -1., -1.]],\n \n ...,\n \n [[-1., -1., 1., ..., 1., -1., -1.],\n [-1., -1., -1., ..., -1., -1., -1.],\n [-1., -1., 1., ..., 1., -1., -1.],\n ...,\n [-1., -1., -1., ..., -1., -1., -1.],\n [-1., -1., 1., ..., -1., -1., -1.],\n [-1., -1., -1., ..., -1., -1., -1.]],\n \n [[-1., -1., -1., ..., -1., 1., -1.],\n [ 1., 1., 1., ..., 1., 1., -1.],\n [-1., 1., 1., ..., -1., 1., -1.],\n ...,\n [-1., 1., -1., ..., -1., 1., -1.],\n [-1., -1., 1., ..., 1., -1., -1.],\n [-1., -1., -1., ..., -1., -1., -1.]],\n \n [[ 1., 1., 1., ..., 1., 1., 1.],\n [-1., -1., -1., ..., -1., 1., 1.],\n [-1., -1., -1., ..., 1., -1., 1.],\n ...,\n [-1., -1., 1., ..., 1., 1., 1.],\n [ 1., 1., 1., ..., -1., 1., 1.],\n [ 1., 1., 1., ..., 1., 1., 1.]]],\n \n \n [[[ 1., 1., 1., ..., 1., 1., -1.],\n [-1., 1., -1., ..., 1., 1., -1.],\n [-1., 1., 1., ..., -1., 1., -1.],\n ...,\n [-1., 1., -1., ..., 1., 1., -1.],\n [-1., -1., -1., ..., -1., 1., -1.],\n [-1., -1., -1., ..., 1., 1., 1.]],\n \n [[-1., -1., -1., ..., -1., -1., -1.],\n [-1., -1., -1., ..., -1., -1., 1.],\n [-1., -1., 1., ..., -1., -1., 1.],\n ...,\n [-1., -1., -1., ..., 1., 1., 1.],\n [-1., -1., -1., ..., 1., 1., 1.],\n [-1., -1., -1., ..., 1., 1., 1.]],\n \n [[-1., -1., -1., ..., -1., -1., -1.],\n [-1., -1., 1., ..., -1., -1., -1.],\n [-1., 1., -1., ..., 1., -1., -1.],\n ...,\n [ 1., 1., 1., ..., -1., 1., 1.],\n [-1., -1., -1., ..., 1., 1., 1.],\n [-1., -1., -1., ..., -1., -1., -1.]],\n \n ...,\n \n [[-1., -1., 1., ..., 1., -1., -1.],\n [-1., -1., -1., ..., -1., -1., -1.],\n [-1., -1., 1., ..., 1., -1., -1.],\n ...,\n [-1., -1., -1., ..., -1., -1., -1.],\n [-1., -1., 1., ..., -1., -1., -1.],\n [-1., -1., -1., ..., -1., -1., -1.]],\n \n [[-1., -1., -1., ..., -1., 1., -1.],\n [ 1., 1., 1., ..., 1., 1., -1.],\n [-1., 1., 1., ..., -1., 1., -1.],\n ...,\n [-1., 1., -1., ..., -1., 1., -1.],\n [-1., -1., 1., ..., 1., -1., -1.],\n [-1., -1., -1., ..., -1., -1., -1.]],\n \n [[ 1., 1., 1., ..., 1., 1., 1.],\n [-1., -1., -1., ..., -1., 1., 1.],\n [-1., -1., -1., ..., 1., -1., 1.],\n ...,\n [-1., -1., 1., ..., 1., 1., 1.],\n [ 1., 1., 1., ..., -1., 1., 1.],\n [ 1., 1., 1., ..., 1., 1., 1.]]],\n \n \n [[[ 1., 1., 1., ..., 1., 1., -1.],\n [-1., 1., -1., ..., 1., 1., -1.],\n [-1., 1., 1., ..., -1., 1., -1.],\n ...,\n [-1., 1., -1., ..., 1., 1., -1.],\n [-1., -1., -1., ..., -1., 1., -1.],\n [-1., -1., -1., ..., 1., 1., 1.]],\n \n [[-1., -1., -1., ..., -1., -1., -1.],\n [-1., -1., -1., ..., -1., -1., 1.],\n [-1., -1., 1., ..., -1., -1., 1.],\n ...,\n [-1., -1., -1., ..., 1., 1., 1.],\n [-1., -1., -1., ..., 1., 1., 1.],\n [-1., -1., -1., ..., 1., 1., 1.]],\n \n [[-1., -1., -1., ..., -1., -1., -1.],\n [-1., -1., 1., ..., -1., -1., -1.],\n [-1., 1., -1., ..., 1., -1., -1.],\n ...,\n [ 1., 1., 1., ..., -1., 1., 1.],\n [-1., -1., -1., ..., 1., 1., 1.],\n [-1., -1., -1., ..., -1., -1., -1.]],\n \n ...,\n \n [[-1., -1., 1., ..., 1., -1., -1.],\n [-1., -1., -1., ..., -1., -1., -1.],\n [-1., -1., 1., ..., 1., -1., -1.],\n ...,\n [-1., -1., -1., ..., -1., -1., -1.],\n [-1., -1., 1., ..., -1., -1., -1.],\n [-1., -1., -1., ..., -1., -1., -1.]],\n \n [[-1., -1., -1., ..., -1., 1., -1.],\n [ 1., 1., 1., ..., 1., 1., -1.],\n [-1., 1., 1., ..., -1., 1., -1.],\n ...,\n [-1., 1., -1., ..., -1., 1., -1.],\n [-1., -1., 1., ..., 1., -1., -1.],\n [-1., -1., -1., ..., -1., -1., -1.]],\n \n [[ 1., 1., 1., ..., 1., 1., 1.],\n [-1., -1., -1., ..., -1., 1., 1.],\n [-1., -1., -1., ..., 1., -1., 1.],\n ...,\n [-1., -1., 1., ..., 1., 1., 1.],\n [ 1., 1., 1., ..., -1., 1., 1.],\n [ 1., 1., 1., ..., 1., 1., 1.]]]]),\n array([[[ 3., 5.],\n [ 5., 3.],\n [ 5., 3.],\n ...,\n [ 5., 3.],\n [ 5., 3.],\n [ 3., 5.]],\n \n [[ 2., 3.],\n [ 5., 4.],\n [ 5., 4.],\n ...,\n [ 5., 4.],\n [ 5., 4.],\n [ 4., 5.]],\n \n [[ 3., 2.],\n [ 6., 5.],\n [ 3., 5.],\n ...,\n [ 2., 5.],\n [ 5., 5.],\n [ 5., 6.]],\n \n ...,\n \n [[-1., -1.],\n [-1., -1.],\n [-1., -1.],\n ...,\n [-1., -1.],\n [-1., -1.],\n [-1., -1.]],\n \n [[-1., -1.],\n [-1., -1.],\n [-1., -1.],\n ...,\n [-1., -1.],\n [-1., -1.],\n [-1., -1.]],\n \n [[-1., -1.],\n [-1., -1.],\n [-1., -1.],\n ...,\n [-1., -1.],\n [-1., -1.],\n [-1., -1.]]]))" - }, - "execution_count": 19, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "SIMULATE_TURNS = 70\n", "\n", @@ -813,14 +780,14 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", - "execution_count": 20, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -1071,25 +1038,16 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": "
", - "image/png": "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A2e+GT9RLrgenwxksJbB8fgDAwNOF32m+okMNsYnAxnGcdlR9BMZTI5PBjMZJuuntL/SF4lEdPToUYXDYXmeF/f2/f39qqioUFdXl4qKilKQkAyZksH1+GRIXgbf9zUwMKCysjKFQu7edU4/kSGbMrgeP5syWOioRPtJcr8/XI9PBjJYy5DOfkr7K32hUEjl5eUJP05RUZGzA4QMtjK4Hp8Mycng8hW+UfQTGbIxg+vxsyWD645KVj9J7veH6/HJQAZrGdLRT1zIBQAAAACyGIs+AAAAAMhiGbfoKygo0Oc+9zkVFBSQIcczuB6fDLYyWGBhHshABivjk8Ee13PhenwykMFahnSOn/YLuQAAAAAA0ifjXukDAAAAAMSORR8AAAAAZDEWfQAAAACQxVj0AQAAAEAWy6hFX2trq/Ly8nT77benfewVK1bI87yxrxkzZujd7363nnvuubRnefnll3XvvffquuuuU0FBgSoqKrRkyRI1NzenfOzx85Cfn68rr7xSt912m77xjW8oEomkfPxzM4z/eve7352W8SfL0dHRkZbxX375ZX384x/X7Nmzdemll+rKK6/UzTffrE2bNmlwcDDl469YsULvec97zvvvv/zlL+V5nl577bWUZ7CGjqKfzs3hqqNc95PktqPop/PRT/TTuTnop9z6GyqjFn2bN2/Wvffeq7179+ro0aNpH//d7363XnrpJb300ktqbm7WlClTtHjx4rRmeP7551VXV6ef//znWrdundra2vT444/rlltu0apVq9KSYXQenn/+ee3evVu33HKLPv7xj2vx4sV6/fXX05ph/Ne2bdvSMvZkOa699tqUj/uHP/xBN954o37605/qwQcf1DPPPKPW1lbdf//92rlzp/bs2ZPyDDhfrncU/XR+Dpcd5aqfJDrKIvqJfjo3B/2UW/00xXWAWB0/flzf/e53tX//fr388svaunWr/vEf/zGtGQoKCnTVVVdJkq666ip95jOf0YIFC/Tqq69q5syZacnw0Y9+VJ7n6amnntJll1029t+vv/56ffCDH0xLhvHzcPXVV+stb3mL/uzP/kwNDQ3aunWr/uZv/iatGVxyleOjH/2opkyZov379591HFx33XW68847xZ1Y0o+Oop8myuGKywx0lC30E/00UQ5X6Kf0y5hX+r73ve+pqqpKc+fO1fvf/3594xvfcLpTjh8/rm9961uaPXu2ZsyYkZYx/+///k+PP/64Vq1addZBOmr69OlpyXEh73znO1VbW6sf/OAHzjLkimPHjumnP/3phMeBJHmel+ZUyPWOop8wio6yh36inxCVy/2UMYu+zZs36/3vf7+k6EvCfX19euKJJ9KaYefOnZo2bZqmTZumcDisH/3oR/rud7+rUCg909jR0SHf91VVVZWW8eJVVVWl559/Pi1jjd8Xo18PPvhgWsa+WI73ve99KR9z9DiYO3fuWf/9iiuuGMvx6U9/OuU5pAvvh8bGxrSMbU2udxT9dDYLHeWinyQ7HUU/nUE/0U/j0U/u+0lKf0dlxNs7Dx8+rKeeekqPPfaYJGnKlCn6q7/6K23evFnveMc70pbjlltu0aZNmyRJvb29+trXvqbGxkY99dRTmjVrVsrHt/5ys+/7aXt2ZPy+GHX55ZenZeyL5ZjoWaN0eOqppxSJRHTXXXdpaGgoLWNeaD/85je/GfvjIlfQUfTTuSx0lKV+ktLfUfRTFP1EP52LfjpfLvwNlRGLvs2bN+v1119XWVnZ2H/zfV8FBQX6yle+ouLi4rTkuOyyyzR79uyx7//rv/5LxcXF+vrXv65/+Zd/Sfn4c+bMked5OnToUMrHCqK9vT1tH8I9d1+44iLH7Nmz5XmeDh8+fNZ/v+666yRJU6dOTVuWC/3v7+7uTtv4VtBR9NO5LHSUqwxWOop+iqKf6Kdz0U/u+0lKf0eZf3vn66+/rkcffVQbNmzQs88+O/Z18OBBlZWVObli4yjP8xQKhXTy5Mm0jHf55ZfrL/7iL/TVr35VJ06cOO/nLi9B/fOf/1xtbW1aunSpswy5YsaMGbrtttv0la985YLHAdKLjoqinzCKjrKDfoqinzAql/vJ/Ct9O3fuVG9vrz70oQ+d92zU0qVLtXnzZv393/99WrIMDQ3p5ZdflhR9a8JXvvIVHT9+XEuWLEnL+JL01a9+VTfffLPe9ra36Z//+Z9VU1Oj119/XT/72c+0adMmtbe3pzzD6DyMjIzolVde0eOPP661a9dq8eLF+sAHPpDy8cdnGG/KlCm64oor0jK+a1/72td0880366abbtLnP/951dTUKBQKad++fTp06JDq6upcR8wZdNQZ9NP5Ocajo+iodKOfzqCfzs8xHv2UA/3kG7d48WJ/0aJFF/zZb37zG1+Sf/DgwZTnuOeee3xJY1/hcNh/61vf6u/YsSPlY5/r6NGj/qpVq/xZs2b5l1xyiX/11Vf7d9xxh/+LX/wi5WOPn4cpU6b4M2fO9G+99Vb/G9/4hj8yMpLy8c/NMP5r7ty5aRl/fI4777wzrWOOd/ToUf9jH/uYf+211/r5+fn+tGnT/Le97W3+unXr/BMnTqR8/In+9//iF7/wJfm9vb0pz2ABHXW2XO+nc3O46ijX/eT7bjuKfoqin85GP9FPo3LxbyjP941/uhUAAAAAEJj5z/QBAAAAAIJj0QcAAAAAWYxFHwAAAABkMRZ9AAAAAJDFWPQBAAAAQBZj0QcAAAAAWYxFHwAAAABkMRZ9AAAAAJDFWPQBAAAAQBZj0QcAAAAAWYxFHwAAAABkMRZ9AAAAAJDF/j8/p2BkXTaztQAAAABJRU5ErkJggg==\n" - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "plot_othello_boards(create_test_game()[-3:])" ] }, { "cell_type": "code", - "execution_count": 22, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -1110,7 +1068,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": null, "metadata": {}, "outputs": [], "source": []