Ejemplo n.º 1
0
    def test_local_search_2(
        self,
        _get_initial_points_patch,
    ):
        pcs_file = os.path.join(self.test_files_dir, "test_local_search.pcs")
        seed = np.random.randint(1, 100000)

        runhistory = unittest.mock.Mock()
        runhistory.data = [None] * 1000

        with open(pcs_file) as fh:
            config_space = pcs.read(fh.readlines())
            config_space.seed(seed)

        def acquisition_function(points):
            return np.array([[np.count_nonzero(point.get_array())]
                             for point in points])

        start_point = config_space.get_default_configuration()
        _get_initial_points_patch.return_value = [start_point]

        ls = LocalSearch(acquisition_function, config_space, max_steps=100000)
        # To have some data in a mock runhistory
        ls.runhistory = [None] * 1000
        acq_val_incumbent, incumbent = ls._maximize(runhistory, None, 1)[0]

        np.testing.assert_allclose(
            incumbent.get_array(),
            np.ones(len(config_space.get_hyperparameters())))
Ejemplo n.º 2
0
    def test_local_search_2(
        self,
        _calculate_num_points_patch,
        _get_initial_points_patch,
    ):
        pcs_file = os.path.join(self.test_files_dir, "test_local_search.pcs")
        seed = np.random.randint(1, 100000)

        with open(pcs_file) as fh:
            config_space = pcs.read(fh.readlines())
            config_space.seed(seed)

        def acquisition_function(point):
            return np.array([np.count_nonzero(point[0].get_array())])

        start_point = config_space.get_default_configuration()
        _calculate_num_points_patch.return_value = 1
        _get_initial_points_patch.return_value = [start_point]

        l = LocalSearch(acquisition_function,
                        config_space,
                        epsilon=0.01,
                        max_iterations=100000)
        acq_val_incumbent, incumbent = l._maximize(None, None, 10)[0]

        np.testing.assert_allclose(
            incumbent.get_array(),
            np.ones(len(config_space.get_hyperparameters())))
Ejemplo n.º 3
0
    def read_pcs_file(fn: str, logger=None):
        """Encapsulates generating configuration space object from file.

        Automatically detects whether the cs is saved in json, pcs or pcs_new.

        Parameters
        ----------
            fn: string
                 File name of pcs file

        Returns
        -------
            ConfigSpace: ConfigSpace
        """
        # Three possible formats: json, pcs and pcs_new. We prefer json.
        with open(fn) as fp:
            if fn.endswith('.json'):
                cs = pcs_json.read(fp.read())
                if logger:
                    logger.debug("Loading pcs as json from: %s", fn)
            else:
                pcs_str = fp.readlines()
                try:
                    cs = pcs.read(pcs_str)
                except NotImplementedError:
                    if logger:
                        logger.debug(
                            "Could not parse pcs file with old format; trying new format ..."
                        )
                    cs = pcs_new.read(pcs_str)
        return cs
Ejemplo n.º 4
0
    def read_pcs_file(self, fn: str):
        """Encapsulates generating configuration space object

        Parameters
        ----------
            fn: string
                 File name of pcs file

        Returns
        -------
            ConfigSpace: ConfigSpace
        """
        space = pcs.read(fn)
        return space
Ejemplo n.º 5
0
 def __call__(self, parser: ArgumentParser, namespace: Namespace, values: list, option_string: str=None):
     fn = values
     if fn:
         if os.path.isfile(fn):
             with open(fn) as fp:
                 pcs_str = fp.readlines()
                 try:
                     parsed_scen_args["cs"] = pcs.read(pcs_str)
                 except:
                     logger.debug("Could not parse pcs file with old format; trying new format ...")
                     parsed_scen_args["cs"] = pcs_new.read(pcs_str)
                 parsed_scen_args["cs"].seed(42)
         else:
             parser.exit(1, "Could not find pcs file: {}".format(fn))
     setattr(namespace, self.dest, values)
Ejemplo n.º 6
0
 def __call__(self, parser: ArgumentParser, namespace: Namespace, values: list, option_string: str=None):
     fn = values
     if fn:
         if os.path.isfile(fn):
             # Three possible formats: json, pcs and pcs_new. We prefer json.
             with open(fn) as fp:
                 if fn.endswith('.json'):
                     parsed_scen_args['cs'] = pcs_json.read(fp.read())
                     logger.debug("Loading pcs as json from: %s", fn)
                 else:
                     pcs_str = fp.readlines()
                     try:
                         parsed_scen_args["cs"] = pcs.read(pcs_str)
                     except:
                         logger.debug("Could not parse pcs file with old format; trying new format ...")
                         parsed_scen_args["cs"] = pcs_new.read(pcs_str)
                 parsed_scen_args["cs"].seed(42)
         else:
             parser.exit(1, "Could not find pcs file: {}".format(fn))
     setattr(namespace, self.dest, values)
Ejemplo n.º 7
0
    def test_local_search_2(self):
        pcs_file = os.path.join(self.test_files_dir, "test_local_search.pcs")
        seed = np.random.randint(1, 100000)

        with open(pcs_file) as fh:
            config_space = pcs.read(fh.readlines())
            config_space.seed(seed)

        def acquisition_function(point):
            return np.count_nonzero(np.array(point))

        start_point = config_space.get_default_configuration()

        l = LocalSearch(acquisition_function,
                        config_space,
                        epsilon=0.01,
                        max_iterations=100000)
        incumbent, acq_val_incumbent = l.maximize(start_point)

        self.assertEqual(acq_val_incumbent, len(start_point.get_array()))
        self.assertTrue(
            np.all(incumbent.get_array() == np.ones([acq_val_incumbent])))
Ejemplo n.º 8
0
    def _transform_arguments(self):
        """TODO"""
        self.n_features = len(self.feature_dict)
        self.feature_array = None

        if self.overall_obj[:3] in ["PAR", "par"]:
            par_str = self.overall_obj[3:]
        elif self.overall_obj[:4] in ["mean", "MEAN"]:
            par_str = self.overall_obj[4:]
        # Check for par-value as in "par10"/ "mean5"
        if len(par_str) > 0:
            self.par_factor = int(par_str)
        else:
            self.logger.debug("No par-factor detected. Using 1 by default.")
            self.par_factor = 1

        # read instance files
        if self.train_inst_fn:
            if os.path.isfile(self.train_inst_fn):
                self.train_insts = self.in_reader.read_instance_file(
                    self.train_inst_fn)
            else:
                self.logger.error("Have not found instance file: %s" %
                                  (self.train_inst_fn))
                sys.exit(1)
        if self.test_inst_fn:
            if os.path.isfile(self.test_inst_fn):
                self.test_insts = self.in_reader.read_instance_file(
                    self.test_inst_fn)
            else:
                self.logger.error("Have not found test instance file: %s" %
                                  (self.test_inst_fn))
                sys.exit(1)

        self.instance_specific = {}

        def extract_instance_specific(instance_list):
            insts = []
            for inst in instance_list:
                if len(inst) > 1:
                    self.instance_specific[inst[0]] = " ".join(inst[1:])
                insts.append(inst[0])
            return insts

        self.train_insts = extract_instance_specific(self.train_insts)
        if self.test_insts:
            self.test_insts = extract_instance_specific(self.test_insts)

        self.train_insts = self._to_str_and_warn(l=self.train_insts)
        self.test_insts = self._to_str_and_warn(l=self.test_insts)

        # read feature file
        if self.feature_fn:
            if os.path.isfile(self.feature_fn):
                self.feature_dict = self.in_reader.read_instance_features_file(
                    self.feature_fn)[1]

        if self.feature_dict:
            self.feature_array = []
            for inst_ in self.train_insts:
                self.feature_array.append(self.feature_dict[inst_])
            self.feature_array = numpy.array(self.feature_array)
            self.n_features = self.feature_array.shape[1]

        # read pcs file
        if self.pcs_fn and os.path.isfile(self.pcs_fn):
            with open(self.pcs_fn) as fp:
                pcs_str = fp.readlines()
                try:
                    self.cs = pcs.read(pcs_str)
                except:
                    self.logger.debug(
                        "Could not parse pcs file with old format; trying new format next"
                    )
                    self.cs = pcs_new.read(pcs_str)
                self.cs.seed(42)
        elif self.pcs_fn:
            self.logger.error("Have not found pcs file: %s" % (self.pcs_fn))
            sys.exit(1)

        # you cannot set output dir to None directly
        # because None is replaced by default always
        if self.output_dir == "":
            self.output_dir = None
            self.logger.debug("Deactivate output directory.")
        else:
            self.logger.info("Output to %s" % (self.output_dir))

        if self.shared_model and self.input_psmac_dirs is None:
            # per default, we assume that
            # all psmac runs write to the same directory
            self.input_psmac_dirs = [self.output_dir]
Ejemplo n.º 9
0
    def _transform_arguments(self):
        self.n_features = len(self.feature_dict)
        self.feature_array = None

        if self.overall_obj[:3] in ["PAR", "par"]:
            self.par_factor = int(self.overall_obj[3:])
        elif self.overall_obj[:4] in ["mean", "MEAN"]:
            self.par_factor = int(self.overall_obj[4:])
        else:
            self.par_factor = 1

        # read instance files
        if self.train_inst_fn:
            if os.path.isfile(self.train_inst_fn):
                self.train_insts = self.in_reader.read_instance_file(
                    self.train_inst_fn)
            else:
                self.logger.error("Have not found instance file: %s" %
                                  (self.train_inst_fn))
                sys.exit(1)
        if self.test_inst_fn:
            if os.path.isfile(self.test_inst_fn):
                self.test_insts = self.in_reader.read_instance_file(
                    self.test_inst_fn)
            else:
                self.logger.error("Have not found test instance file: %s" %
                                  (self.test_inst_fn))
                sys.exit(1)

        self.instance_specific = {}

        def extract_instance_specific(instance_list):
            insts = []
            for inst in instance_list:
                if len(inst) > 1:
                    self.instance_specific[inst[0]] = " ".join(inst[1:])
                insts.append(inst[0])
            return insts

        self.train_insts = extract_instance_specific(self.train_insts)
        if self.test_insts:
            self.test_insts = extract_instance_specific(self.test_insts)

        # read feature file
        if self.feature_fn:
            if os.path.isfile(self.feature_fn):
                self.feature_dict = self.in_reader.read_instance_features_file(
                    self.feature_fn)[1]

        if self.feature_dict:
            self.n_features = len(self.feature_dict[list(
                self.feature_dict.keys())[0]])
            self.feature_array = []
            for inst_ in self.train_insts:
                self.feature_array.append(self.feature_dict[inst_])
            self.feature_array = numpy.array(self.feature_array)

        # read pcs file
        if self.pcs_fn and os.path.isfile(self.pcs_fn):
            with open(self.pcs_fn) as fp:
                pcs_str = fp.readlines()
                self.cs = pcs.read(pcs_str)
                self.cs.seed(42)
        elif self.pcs_fn:
            self.logger.error("Have not found pcs file: %s" % (self.pcs_fn))
            sys.exit(1)

        self.logger.info("Output to %s" % (self.output_dir))