def set_goal(self, goal):
        """
        Set or update this agent's goal

        :param goal: a Goal
        :return: nothing
        """

        # Note: reason for non-deep copy is that if this agent changes the goal
        #       these changes are propagated to e.g. the reward function, and
        #       the reward calculation is up to date.
        self.agent_goal = goal

        Set or update this agent's goal

        :param goal: a Goal
        :return: nothing
        
plato/agent/conversational_agent/conversational_multi_agent.py