Esempio n. 1
0
def multi_type_experiment_from_json(
        object_json: Dict[str, Any]) -> MultiTypeExperiment:
    """Load AE MultiTypeExperiment from JSON."""
    experiment_info = _get_experiment_info(object_json)

    _metric_to_canonical_name = object_json.pop("_metric_to_canonical_name")
    _metric_to_trial_type = object_json.pop("_metric_to_trial_type")
    _trial_type_to_runner = object_from_json(
        object_json.pop("_trial_type_to_runner"))
    tracking_metrics = object_from_json(object_json.pop("tracking_metrics"))
    # not relevant to multi type experiment
    del object_json["runner"]

    kwargs = {k: object_from_json(v) for k, v in object_json.items()}
    kwargs["default_runner"] = _trial_type_to_runner[
        object_json["default_trial_type"]]

    experiment = MultiTypeExperiment(**kwargs)
    for metric in tracking_metrics:
        experiment._tracking_metrics[metric.name] = metric
    experiment._metric_to_canonical_name = _metric_to_canonical_name
    experiment._metric_to_trial_type = _metric_to_trial_type
    experiment._trial_type_to_runner = _trial_type_to_runner

    _load_experiment_info(exp=experiment, exp_info=experiment_info)
    return experiment
Esempio n. 2
0
def get_multi_type_experiment_with_multi_objective(
    add_trials: bool = False,
) -> MultiTypeExperiment:
    oc = get_branin_multi_objective_optimization_config()
    experiment = MultiTypeExperiment(
        name="test_exp",
        search_space=get_branin_search_space(),
        default_trial_type="type1",
        default_runner=SyntheticRunner(dummy_metadata="dummy1"),
        optimization_config=oc,
    )
    experiment.add_trial_type(
        trial_type="type2", runner=SyntheticRunner(dummy_metadata="dummy2")
    )

    if add_trials:
        generator = get_sobol(experiment.search_space)
        gr = generator.gen(10)
        t1 = experiment.new_batch_trial(generator_run=gr, trial_type="type1")
        t2 = experiment.new_batch_trial(generator_run=gr, trial_type="type2")
        t1.set_status_quo_with_weight(status_quo=t1.arms[0], weight=0.5)
        t2.set_status_quo_with_weight(status_quo=t2.arms[0], weight=0.5)
        t1.run()
        t2.run()

    return experiment
Esempio n. 3
0
 def _init_mt_experiment_from_sqa(
         self, experiment_sqa: SQAExperiment) -> MultiTypeExperiment:
     """First step of conversion within experiment_from_sqa."""
     opt_config, tracking_metrics = self.opt_config_and_tracking_metrics_from_sqa(
         metrics_sqa=experiment_sqa.metrics)
     search_space = self.search_space_from_sqa(
         parameters_sqa=experiment_sqa.parameters,
         parameter_constraints_sqa=experiment_sqa.parameter_constraints,
     )
     if search_space is None:
         raise SQADecodeError(  # pragma: no cover
             "Experiment SearchSpace cannot be None.")
     status_quo = (
         Arm(
             # pyre-fixme[6]: Expected `Dict[str, Optional[Union[bool, float,
             #  int, str]]]` for 1st param but got `Optional[Dict[str,
             #  Optional[Union[bool, float, int, str]]]]`.
             parameters=experiment_sqa.status_quo_parameters,
             name=experiment_sqa.status_quo_name,
         ) if experiment_sqa.status_quo_parameters is not None else None)
     trial_type_to_runner = {
         not_none(sqa_runner.trial_type): self.runner_from_sqa(sqa_runner)
         for sqa_runner in experiment_sqa.runners
     }
     default_trial_type = not_none(experiment_sqa.default_trial_type)
     properties = experiment_sqa.properties
     if properties:
         # Remove 'subclass' from experiment's properties, since its only
         # used for decoding to the correct experiment subclass in storage.
         properties.pop(Keys.SUBCLASS, None)
     default_data_type = experiment_sqa.default_data_type
     experiment = MultiTypeExperiment(
         name=experiment_sqa.name,
         description=experiment_sqa.description,
         search_space=search_space,
         default_trial_type=default_trial_type,
         default_runner=trial_type_to_runner[default_trial_type],
         optimization_config=opt_config,
         status_quo=status_quo,
         properties=properties,
         default_data_type=default_data_type,
     )
     experiment._trial_type_to_runner = trial_type_to_runner
     sqa_metric_dict = {
         metric.name: metric
         for metric in experiment_sqa.metrics
     }
     for tracking_metric in tracking_metrics:
         sqa_metric = sqa_metric_dict[tracking_metric.name]
         experiment.add_tracking_metric(
             tracking_metric,
             trial_type=not_none(sqa_metric.trial_type),
             canonical_name=sqa_metric.canonical_name,
         )
     return experiment
Esempio n. 4
0
 def _init_mt_experiment_from_sqa(
     self, experiment_sqa: SQAExperiment
 ) -> MultiTypeExperiment:
     """First step of conversion within experiment_from_sqa."""
     opt_config, tracking_metrics = self.opt_config_and_tracking_metrics_from_sqa(
         metrics_sqa=experiment_sqa.metrics
     )
     search_space = self.search_space_from_sqa(
         parameters_sqa=experiment_sqa.parameters,
         parameter_constraints_sqa=experiment_sqa.parameter_constraints,
     )
     if search_space is None:
         raise SQADecodeError(  # pragma: no cover
             "Experiment SearchSpace cannot be None."
         )
     status_quo = (
         Arm(
             parameters=experiment_sqa.status_quo_parameters,
             name=experiment_sqa.status_quo_name,
         )
         if experiment_sqa.status_quo_parameters is not None
         else None
     )
     trial_type_to_runner = {
         not_none(sqa_runner.trial_type): self.runner_from_sqa(sqa_runner)
         for sqa_runner in experiment_sqa.runners
     }
     default_trial_type = not_none(experiment_sqa.default_trial_type)
     experiment = MultiTypeExperiment(
         name=experiment_sqa.name,
         search_space=search_space,
         default_trial_type=default_trial_type,
         default_runner=trial_type_to_runner[default_trial_type],
         optimization_config=opt_config,
         status_quo=status_quo,
     )
     experiment._trial_type_to_runner = trial_type_to_runner
     sqa_metric_dict = {metric.name: metric for metric in experiment_sqa.metrics}
     for tracking_metric in tracking_metrics:
         sqa_metric = sqa_metric_dict[tracking_metric.name]
         experiment.add_tracking_metric(
             tracking_metric,
             trial_type=not_none(sqa_metric.trial_type),
             canonical_name=sqa_metric.canonical_name,
         )
     return experiment
Esempio n. 5
0
def get_multi_type_experiment(
    add_trial_type: bool = True, add_trials: bool = False
) -> MultiTypeExperiment:
    oc = OptimizationConfig(Objective(BraninMetric("m1", ["x1", "x2"])))
    experiment = MultiTypeExperiment(
        name="test_exp",
        search_space=get_branin_search_space(),
        default_trial_type="type1",
        default_runner=SyntheticRunner(dummy_metadata="dummy1"),
        optimization_config=oc,
    )
    experiment.add_trial_type(
        trial_type="type2", runner=SyntheticRunner(dummy_metadata="dummy2")
    )
    # Switch the order of variables so metric gives different results
    experiment.add_tracking_metric(
        BraninMetric("m2", ["x2", "x1"]), trial_type="type2", canonical_name="m1"
    )

    if add_trials and add_trial_type:
        generator = get_sobol(experiment.search_space)
        gr = generator.gen(10)
        t1 = experiment.new_batch_trial(generator_run=gr, trial_type="type1")
        t2 = experiment.new_batch_trial(generator_run=gr, trial_type="type2")
        t1.set_status_quo_with_weight(status_quo=t1.arms[0], weight=0.5)
        t2.set_status_quo_with_weight(status_quo=t2.arms[0], weight=0.5)
        t1.run()
        t2.run()

    return experiment