# Algorithm Taxonomy

## :herb: Algorithm Taxonomy

Deep RL algorithms can be classified into a family tree based on their methods / functions they learn, such as the one shown below.

![Source: Foundations of Deep Reinforcement Learning, Graesser & Keng.](https://306139625-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LterKThgiKKTvsbx4WI%2F-Lu8iAGsdq-ZbkqCgAIl%2F-Lu8jgocbohDU-x6R16F%2Falgorithm_tree.png?alt=media\&token=dc9b4de4-cb0f-4401-b30a-4812effa338d)

Algorithms often extends an existing one by modifying or adding components. Most model-free algorithms are descended from SARSA and REINFORCE. The figure below shows some of the algorithms in SLM Lab, and their relationships.

![Source: Foundations of Deep Reinforcement Learning, Graesser & Keng.](https://306139625-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LterKThgiKKTvsbx4WI%2F-Lu6MbpSMpj39Fcq7Enq%2F-Lu6cZI1Z0R9Qr16-yKB%2Falgo_hierarchy-ak.png?alt=media\&token=bdb2fd06-143a-4183-b0a2-a4aff85c36cd)

Naturally, implementations can be consistent with this theoretical taxonomy by using **class inheritance** and **modular components**. This is precisely what SLM Lab does.
