def save(self, path=None):
        """
        Saves the dialogue_policy model to the path provided

        :param path: path to save the model to
        :return:
        """

        # Don't save if not training
        if not self.is_training:
            return

        if not path:
            path = 'models/policies/wolf_phc_policy.pkl'
            print('No dialogue_policy file name provided. Using default: {0}'
                  .format(path))

        # If the directory does not exist, create it
        if not os.path.exists(os.path.dirname(path)):
            os.makedirs(os.path.dirname(path), exist_ok=True)

        obj = {'Q': self.Q,
               'pi': self.pi,
               'mean_pi': self.mean_pi,
               'state_counter': self.state_counter,
               'a': self.alpha,
               'e': self.epsilon,
               'g': self.gamma}

        with open(path, 'wb') as file:
            pickle.dump(obj, file, pickle.HIGHEST_PROTOCOL)

        if self.statistics['total_turns'] > 0:
            print('DEBUG > {0} WoLF PHC dialogue_policy supervision ratio: {1}'
                  .format(self.agent_role,
                          float(
                              self.statistics['supervised_turns'] /
                              self.statistics['total_turns'])))

        print(f'DEBUG > {self.agent_role} WoLF PHC policy state space '
              f'size: {len(self.pi)}')

        Saves the dialogue_policy model to the path provided

        :param path: path to save the model to
        :return:
        
plato/agent/component/dialogue_policy/reinforcement_learning/wolf_phc_policy.py