Reinforcement learning allows an agent to learn from interaction with an uncertain environment to achieve a goal. There are three main methods to solve reinforcement learning problems: dynamic programming which requires a complete model of the environment; Monte Carlo methods which learn from sample episodes without a model; and temporal-difference learning like Sarsa and Q-learning which combine ideas from dynamic programming and Monte Carlo to learn directly from experience in an online manner. Designing good state representations, features, and rewards is important for applying these methods to real-world problems.