A reinforcement learning AI for playing Pool. Methods include Q-Table, Deep Q-Network (DQN), and Asynchronous Advantage Actor-Critic (A3C).
# (Optional) Create & activate virtual environment
$ virtualenv .venv
$ source .venv/bin/activate
# Install package
$ python -m pip install -r requirements.txt
# Run game
$ python -m src.game.main
# Run training, ALGO = q-table | dqn | a3c | a3c-discrete
$ python -m src.model.train [--balls BALLS] [--algo ALGO] [--visualize] output_model
# Run evaluation, ALGO = random | q-table | dqn | a3c | a3c-discrete
$ python -m src.model.eval [--model MODEL] [--balls BALLS] [--algo ALGO] [--visualize]
- Visualize average rewards over episodes
$ python -m src.utils.training_rewards_vis INPUT_FILE OUTPUT_FILE
- States
[(x, y)]
: list of (x, y) coordinates of the balls; white ball first- Coordinate
- Continuous range:
[0, 1000]
- Discrete range (Q-table only):
[0, 19]
- Continuous range:
- Coordinate
- Actions
- Angle
- Continuous range:
[0, 1]
- Discrete range (Q-table only):
[0, 17]
- Continuous range:
- Force
- Continuous range:
[0, 1]
- Discrete range (Q-table only):
[0, 4]
- Continuous range:
- Angle
- Rewards
- If pocket the balls, reward += 5 for each pocketed ball
- If no ball is hit, reward += -1