Search code examples
pythonanimationmatplotlibtensorflowconways-game-of-life

Tensorflow + Matplotlib animation


I am trying to implement the Game of Life using tensorflow and use matplotlib.animation to depict the animation. Although the image gets displayed but it is not animating for some reason. Below is the code I am using:

Ref: http://learningtensorflow.com/lesson8/

IDE: Pycharm Community Edition

I am passing blit=False in FuncAnimation as it is not working on Mac with blit=True

shape = (50, 50)
initial_board = tf.random_uniform(shape, minval=0, maxval=2, dtype=tf.int32)
board = tf.placeholder(tf.int32, shape=shape, name='board')

def update_board(X):
# Check out the details at: https://jakevdp.github.io/blog/2013/08/07/conways-game-of-life/
# Compute number of neighbours,
N = convolve2d(X, np.ones((3, 3)), mode='same', boundary='wrap') - X
# Apply rules of the game
X = (N == 3) | (X & (N == 2))
return X

board_update = tf.py_func(update_board, [board], [tf.int32])
fig = plt.figure()

if __name__ == '__main__':
with tf.Session() as sess:
    initial_board_values = sess.run(initial_board)
    X = sess.run(board_update, feed_dict={board: initial_board_values})[0]

    def game_of_life(*args):
        A = sess.run(board_update, feed_dict={board: X})[0]
        plot.set_array(A)
        return plot,

    ani = animation.FuncAnimation(fig, game_of_life, interval=100, blit=False)

    plot = plt.imshow(X, cmap='Greys', interpolation='nearest')
    plt.show()

Solution

  • When you are displaying the image, you are displaying the static image not the animation. You need to remove this line, as stated in the tutorial:

    plot = plt.imshow(X, cmap='Greys', interpolation='nearest')
    

    Hint: you will need to remove the plt.show() from the earlier code to make this run!

    Hope that helps!