Algorithmic Collusion: Theory & Practice