def initialize(self, args):
        """
        Initializes the user simulator, e.g. before each dialogue episode.

        :return: Nothing
        """

        if 'goal' not in args:
            # Sample Goal
            goal_slot_selection_weights = None
            if 'goal_slot_selection_weights' in args:
                goal_slot_selection_weights = \
                    args['goal_slot_selection_weights']

            self.goal = \
                self.goal_generator.generate(
                    goal_slot_selection_weights=goal_slot_selection_weights)
        else:
            self.goal = deepcopy(args['goal'])

        # Initialize agenda and user state
        self.agenda.initialize(deepcopy(self.goal))

        if self.nlu:
            self.nlu.initialize({})

        if self.nlg:
            self.nlg.initialize({})

        self.prev_system_acts = None
        self.curr_patience = self.patience

        self.dialogue_turn = 0
        self.offer_made = False
        self.prev_offer_name = None

        Initializes the user simulator, e.g. before each dialogue episode.

        :return: Nothing
        
plato/agent/component/user_simulator/agenda_based_user_simulator/agenda_based_us.py