def __str__(self):
        """
        Generate a string representing the Goal
        :return: a string
        """
        ret = ''
        
        for c in self.constraints:
            ret += \
                f'\t\tConstr({self.constraints[c].slot}=' \
                f'{self.constraints[c].value})\n'
        ret += '\t\t-------------\n'
        for r in self.requests:
            ret += f'\t\tReq({self.requests[r].slot})\n'
        ret += '\t\t-------------\n'
        ret += 'Sub-goals:\n'
        for sg in self.subgoals:
            for c in sg.constraints:
                if not sg.constraints[c].slot:
                    ret += f'Error! No slot for {c}\n'
                if not sg.constraints[c].value:
                    ret += f'Error! No value for {c}\n'
                ret += f'\t\tConstr({sg.constraints[c].slot}=' \
                       f'{sg.constraints[c].value})\n'
            ret += '\t\t--------\n'
        ret += '\n'
        
        return ret

        Generate a string representing the Goal
        :return: a string
        
plato/agent/component/user_simulator/goal.py