old_contents: from capstone.game.games import TicTacToe
  from capstone.game.players import AlphaBeta, RandPlayer
  from capstone.game.utils import normalize_board
  from capstone.rl import GameMDP, FixedGameMDP, Environment
  from capstone.rl.learners import ApproximateQLearning
  from capstone.rl.value_functions import MLP
  
  board = [[' ', ' ', ' '],
           [' ', ' ', ' '],
           [' ', ' ', ' ']]
  game = TicTacToe(board)
  env = Environment(FixedGameMDP(game, RandPlayer(), 1))
  mlp = MLP()
  qlearning = ApproximateQLearning(env, qf=mlp, n_episodes=10000, verbose=False)
  qlearning.train()
  mlp.model.save('models/qltic.h5')
  
  for move in game.legal_moves():
      print('-' * 80)
      new_game = game.copy().make_move(move)
      value = mlp[game, move]
      print(value)
      print(new_game)
  
new_contents: from capstone.game.games import TicTacToe
  from capstone.game.players import RandPlayer
  from capstone.rl import GameMDP, FixedGameMDP, Environment
  from capstone.rl.learners import ApproximateQLearning
  from capstone.rl.policies import RandomPolicy
  from capstone.rl.utils import EpisodicWLDPlotter, QValuesPlotter
  from capstone.rl.value_functions import MLP
  
  seed = 23
  game = TicTacToe()
  env = Environment(FixedGameMDP(game, RandPlayer(), 1))
  mlp = MLP()
  qlearning = ApproximateQLearning(
      env=env,
      policy=RandomPolicy(env.actions, random_state=seed),
      qfunction=mlp,
      discount_factor=1.0,
      n_episodes=50000
  )
  qlearning.train(
      callbacks=[
          EpisodicWLDPlotter(
              game=game,
              opp_player=RandPlayer(random_state=seed),
              n_matches=1000,
              period=5000,
              # filepath='../mlnd-capstone-report/figures/tic_ql_tab_full_selfplay_wld_plot.pdf'
              filepath='figures/test88.pdf'
          )
      ]
  )
  # mlp.model.save('models/qltic.h5')
  
subject: Update examples/tic_ql_mlp.py