def run_controller(self, args):
        """
        This function will create and run a controller. It iterates over the
        desired number of tests and prints some basic results.

        :param args: the parsed configuration file
        :return: nothing
        """

        # Extract arguments
        cfg_parser = args['cfg_parser']
        tests = args['tests']
        num_dialogues = args['dialogues']
        interaction_mode = args['interaction_mode']
        num_agents = args['num_agents']

        for test in range(tests):
            # Run simulation
            print('\n\n=======================================')
            print('# Running {0} dialogues (test {1} of {2}) #'.format(
                num_dialogues,
                (test + 1),
                tests))
            print('=======================================\n')

            try:
                if interaction_mode in ['simulation', 'text', 'speech']:
                    # YAML version
                    statistics = self.run_single_agent(
                        cfg_parser, num_dialogues)

                elif interaction_mode == 'multi_agent':
                    # YAML version
                    statistics = self.run_multi_agent(
                        cfg_parser, num_dialogues, num_agents)

                else:
                    ValueError('Unknown interaction mode: {0}'.format(
                        interaction_mode))
                    return -1

            except (ValueError, FileNotFoundError, TypeError, AttributeError) \
                    as err:
                print('\nPlato error! {0}\n'.format(err))
                return -1

        print(f'Results:\n{statistics}')
        return 0

        This function will create and run a controller. It iterates over the
        desired number of tests and prints some basic results.

        :param args: the parsed configuration file
        :return: nothing
        
plato/controller/basic_controller.py