diff --git a/games.ipynb b/games.ipynb index 1dc5f5ca9..da7652cf8 100644 --- a/games.ipynb +++ b/games.ipynb @@ -18,7 +18,7 @@ "outputs": [], "source": [ "from games import (GameState, Game, Fig52Game, TicTacToe, query_player, random_player, \n", - " alphabeta_player, play_game, minimax_decision, alphabeta_full_search,\n", + " alphabeta_player, minimax_decision, alphabeta_full_search,\n", " alphabeta_search, Canvas_TicTacToe)" ] }, @@ -209,7 +209,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 2, "metadata": { "collapsed": false }, @@ -227,7 +227,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 3, "metadata": { "collapsed": false }, @@ -237,7 +237,7 @@ "output_type": "stream", "text": [ "a1\n", - "a3\n" + "a1\n" ] } ], @@ -250,12 +250,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "The `alphabeta_player(game, state)` will always give us the best move possible:" + "The `alphabeta_player(game, state)` will always give us the best move possible, for the relevant player (MAX or MIN):" ] }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 4, "metadata": { "collapsed": false }, @@ -285,7 +285,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 5, "metadata": { "collapsed": false }, @@ -296,7 +296,7 @@ "'a1'" ] }, - "execution_count": 7, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } @@ -307,7 +307,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 6, "metadata": { "collapsed": false }, @@ -318,7 +318,7 @@ "'a1'" ] }, - "execution_count": 8, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } @@ -336,7 +336,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 8, "metadata": { "collapsed": false }, @@ -354,18 +354,47 @@ "3" ] }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "game52.play_game(alphabeta_player, alphabeta_player)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "B3\n" + ] + }, + { + "data": { + "text/plain": [ + "8" + ] + }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "play_game(game52, alphabeta_player, alphabeta_player)" + "game52.play_game(alphabeta_player, random_player)" ] }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 12, "metadata": { "collapsed": false }, @@ -374,41 +403,68 @@ "name": "stdout", "output_type": "stream", "text": [ - "B2\n" + "current state:\n", + "A\n", + "available moves: ['a2', 'a1', 'a3']\n", + "\n", + "Your move? a3\n", + "D3\n" ] }, { "data": { "text/plain": [ - "12" + "2" ] }, - "execution_count": 10, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "play_game(game52, alphabeta_player, random_player)" + "game52.play_game(query_player, alphabeta_player)" ] }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 14, "metadata": { - "collapsed": true + "collapsed": false }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "current state:\n", + "B\n", + "available moves: ['b1', 'b3', 'b2']\n", + "\n", + "Your move? b3\n", + "B3\n" + ] + }, + { + "data": { + "text/plain": [ + "8" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "#play_game(game52, query_player, alphabeta_player)\n", - "#play_game(game52, alphabeta_player, query_player)" + "game52.play_game(alphabeta_player, query_player)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Note that, here, if you are the first player, the alphabeta_player plays as MIN, and if you are the second player, the alphabeta_player plays as MAX. This happens because that's the way the game is defined in the class Fig52Game. Having a look at the code of this class should make it clear." + "Note that if you are the first player then alphabeta_player plays as MIN, and if you are the second player then alphabeta_player plays as MAX. This happens because that's the way the game is defined in the class Fig52Game. Having a look at the code of this class should make it clear." ] }, { @@ -421,7 +477,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 15, "metadata": { "collapsed": false }, @@ -439,7 +495,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 16, "metadata": { "collapsed": false }, @@ -469,7 +525,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 17, "metadata": { "collapsed": false }, @@ -490,12 +546,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "So, how does this game state looks like?" + "So, how does this game state look like?" ] }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 18, "metadata": { "collapsed": false }, @@ -523,7 +579,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 19, "metadata": { "collapsed": false }, @@ -531,10 +587,10 @@ { "data": { "text/plain": [ - "(3, 3)" + "(3, 2)" ] }, - "execution_count": 16, + "execution_count": 19, "metadata": {}, "output_type": "execute_result" } @@ -545,7 +601,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 20, "metadata": { "collapsed": false }, @@ -556,7 +612,7 @@ "(3, 2)" ] }, - "execution_count": 17, + "execution_count": 20, "metadata": {}, "output_type": "execute_result" } @@ -574,7 +630,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 21, "metadata": { "collapsed": false }, @@ -585,7 +641,7 @@ "(2, 2)" ] }, - "execution_count": 18, + "execution_count": 21, "metadata": {}, "output_type": "execute_result" } @@ -603,7 +659,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 22, "metadata": { "collapsed": false }, @@ -612,29 +668,38 @@ "name": "stdout", "output_type": "stream", "text": [ - "O X O \n", - "O . X \n", - "O X X \n", - "-1\n" + "O O O \n", + "X X . \n", + ". X . \n" ] + }, + { + "data": { + "text/plain": [ + "-1" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "print(play_game(ttt, random_player, alphabeta_player))" + "ttt.play_game(random_player, alphabeta_player)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "The output is -1, hence `random_player` loses implies `alphabeta_player` wins. \n", + "The output is (usually) -1, because `random_player` loses to `alphabeta_player`. Sometimes, however, `random_player` manages to draw with `alphabeta_player`.\n", " \n", - " Since, an `alphabeta_player` plays perfectly, a match between two `alphabeta_player`s should always end in a draw. Let's see if this happens:" + " Since an `alphabeta_player` plays perfectly, a match between two `alphabeta_player`s should always end in a draw. Let's see if this happens:" ] }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 24, "metadata": { "collapsed": false }, @@ -688,7 +753,7 @@ ], "source": [ "for _ in range(10):\n", - " print(play_game(ttt, alphabeta_player, alphabeta_player))" + " print(ttt.play_game(alphabeta_player, alphabeta_player))" ] }, { @@ -700,7 +765,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 25, "metadata": { "collapsed": false }, @@ -709,52 +774,52 @@ "name": "stdout", "output_type": "stream", "text": [ - "X . . \n", - "O O O \n", - ". X X \n", - "-1\n", - "O O O \n", - "X X O \n", - "X X . \n", - "-1\n", - "O X . \n", - ". O X \n", - "X . O \n", - "-1\n", - "O . . \n", - ". O X \n", - "X X O \n", - "-1\n", + "O . X \n", "X O X \n", - "X O O \n", - ". O X \n", + ". . O \n", "-1\n", - "O . X \n", + "X O X \n", + "O O X \n", "X O . \n", - ". X O \n", "-1\n", - "O O X \n", + "O X O \n", "X O X \n", + "X O X \n", + "0\n", + "O X O \n", "X O . \n", + "O X X \n", "-1\n", - "O O O \n", + ". . O \n", + ". O X \n", "O X X \n", - "X . X \n", "-1\n", + "O O O \n", "X X O \n", - "O O X \n", - "O X . \n", + ". X X \n", + "-1\n", + "O O O \n", + ". . X \n", + ". X X \n", "-1\n", - "X . X \n", "O O O \n", + ". X X \n", ". X . \n", + "-1\n", + "X O X \n", + ". O X \n", + ". O . \n", + "-1\n", + "O X O \n", + "X O X \n", + "O X . \n", "-1\n" ] } ], "source": [ "for _ in range(10):\n", - " print(play_game(ttt, random_player, alphabeta_player))" + " print(ttt.play_game(random_player, alphabeta_player))" ] }, { @@ -770,7 +835,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 27, "metadata": { "collapsed": false }, @@ -828,7 +893,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 28, "metadata": { "collapsed": false }, @@ -881,12 +946,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Yay! We win. But we cannot win against an `alphabeta_player`, however hard we try." + "Yay! We (usually) win. But we cannot win against an `alphabeta_player`, however hard we try." ] }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 29, "metadata": { "collapsed": false }, @@ -934,6 +999,15 @@ "source": [ "ab_play = Canvas_TicTacToe('ab_play', 'human', 'alphabeta')" ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] } ], "metadata": { @@ -952,7 +1026,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.5.1" + "version": "3.4.3" } }, "nbformat": 4,
Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
Alternative Proxies: