Exemplo n.º 1
0
    def __init__(self, scenario_dir, num_trees=30, split_min=1, seed=42,
        fanova_lib_folder=None,
        fanova_class_folder=None):
        """

            fanova_class_folder: used for development purposes only.
        """

        self._remote = FanovaRemote()

        if fanova_lib_folder is None:
            self._fanova_lib_folder = resource_filename("pyfanova", 'fanova')
        else:
            self._fanova_lib_folder = fanova_lib_folder
        self._fanova_class_folder = fanova_class_folder
        self._num_trees = num_trees
        self._split_min = split_min
        self._seed = seed
        self._scenario_dir = scenario_dir

        self._start_fanova()
        logging.debug("Now connecting to fanova...")
        if self._start_connection():
            self._config_space = ConfigSpace(self._remote)

            param_names = self._config_space.get_parameter_names()
            self.param_name2dmin = dict(zip(param_names, range(len(param_names))))
        else:
            stdout, stderr = self._process.communicate()
            error_msg = "failed starting fanova "
            if stdout is not None:
                error_msg += stdout
            if stderr is not None:
                error_msg += stderr
            raise RuntimeError(error_msg)
Exemplo n.º 2
0
    def __init__(self,
                 smac_output,
                 num_trees=30,
                 split_min=5,
                 seed=42,
                 improvement_over="NOTHING",
                 quantile_to_compare=0.25,
                 heap_size=1024,
                 fanova_lib_folder=None,
                 fanova_class_folder=None):
        """
            Starts the Fanova from the scenario directory and opens a TCP connection to communicate with Java
            
            Arguments:
              smac_output (str): Path to the state_run directory created by SMAC
              num_trees (int): Number of trees to create the Random Forest
              split_min (int): Minimum number of points to create a new split in the Random Forest
              heap_size (int): Head size in MB for Java
              improvement_over [DEFAULT, QUANTILE, NOTHING]: Compute improvements with respect to (this setting)
              quantile_to_compare (float): Quantile to compare to (if using QUANTILE --improvements-over)
        """

        self._remote = FanovaRemote()

        self.check_output_dir(smac_output)

        if fanova_lib_folder is None:
            self._fanova_lib_folder = resource_filename("pyfanova", 'fanova')
        else:
            self._fanova_lib_folder = fanova_lib_folder
        self._fanova_class_folder = fanova_class_folder
        self._num_trees = num_trees
        self._split_min = split_min
        self._seed = seed
        self._smac_output = smac_output
        self._heap_size = "-Xmx" + str(heap_size) + "m"
        self._improvement_over = improvement_over
        self._quantile_to_compare = quantile_to_compare

        self._start_fanova()
        logging.debug("Now connecting to fanova...")
        if self._start_connection():
            self._config_space = ConfigSpace(self._remote)

            param_names = self._config_space.get_parameter_names()
            self.param_name2dmin = dict(
                list(zip(param_names, list(range(len(param_names))))))
        else:
            stdout, stderr = self._process.communicate()
            error_msg = "Failed starting fanova. Did you start it from a SMAC state-run directory?"
            if stdout is not None:
                error_msg += stdout
            if stderr is not None:
                error_msg += stderr
            raise RuntimeError(error_msg)