Offline Reinforcement Learning: From Algorithms to Practical Challenges