To use this class, you need to implement the SetupRewards and SetupCompletions functions (as well as their corresponding SetRewards and SetCompletions functions), which will define the rewards and penalties the agent receives and what conditions cause an episode to end. Before you can begin training, you need to call SetupTrainer, which will initialize the underlying data structures, and you need to call AddAgent for each agent you want to gather training data from.