Beispiel #1
0
    def test_monotonic_single_probit_config_file(self):
        config_file = "../configs/single_lse_example.ini"
        config_file = os.path.join(os.path.dirname(__file__), config_file)

        config = Config()
        config.update(config_fnames=[config_file])
        strat = SequentialStrategy.from_config(config)

        self.assertTrue(isinstance(strat.strat_list[0], SobolStrategy))
        self.assertTrue(isinstance(strat.strat_list[1], ModelWrapperStrategy))
        self.assertTrue(
            isinstance(strat.strat_list[1].modelbridge,
                       MonotonicSingleProbitModelbridge))
        self.assertTrue(strat.strat_list[1].modelbridge.acqf is MonotonicMCLSE)
        self.assertTrue(strat.strat_list[1].modelbridge.extra_acqf_args == {
            "beta": 3.98,
            "target": 0.75
        })
        self.assertTrue(strat.strat_list[1].modelbridge.samps == 1000)
        self.assertTrue(strat.strat_list[0].n_trials == 10)
        self.assertTrue(strat.strat_list[0].outcome_type == "single_probit")
        self.assertTrue(strat.strat_list[1].n_trials == 20)
        self.assertTrue(
            torch.all(strat.strat_list[0].lb == strat.strat_list[1].lb))
        self.assertTrue(
            torch.all(
                strat.strat_list[1].modelbridge.lb == torch.Tensor([0, 0])))
        self.assertTrue(
            torch.all(strat.strat_list[0].ub == strat.strat_list[1].ub))
        self.assertTrue(
            torch.all(
                strat.strat_list[1].modelbridge.ub == torch.Tensor([1, 1])))
Beispiel #2
0
 def test_experiment_deprecation(self):
     config_str = """
         [experiment]
         acqf = PairwiseMCPosteriorVariance
         model = PairwiseProbitModel
         """
     config = Config()
     config.update(config_str=config_str)
     self.assertTrue("acqf" in config["common"])
     self.assertTrue("model" in config["common"])
 def test_greedyepsilon_config(self):
     config_str = """
         [common]
         acqf = MonotonicMCLSE
         [EpsilonGreedyGenerator]
         subgenerator = MonotonicRejectionGenerator
         epsilon = .5
         """
     config = Config()
     config.update(config_str=config_str)
     gen = EpsilonGreedyGenerator.from_config(config)
     self.assertIsInstance(gen.subgenerator, MonotonicRejectionGenerator)
     self.assertEqual(gen.subgenerator.acqf, MonotonicMCLSE)
     self.assertEqual(gen.epsilon, 0.5)
Beispiel #4
0
    def test_multiple_models_and_strats(self):
        config_str = """
        [common]
        lb = [0, 0]
        ub = [1, 1]
        outcome_type = single_probit
        parnames = [par1, par2]
        strategy_names = [init_strat, opt_strat1, opt_strat2]

        [init_strat]
        generator = SobolGenerator
        n_trials = 1

        [opt_strat1]
        generator = OptimizeAcqfGenerator
        n_trials = 1
        model = GPClassificationModel
        acqf = MCLevelSetEstimation

        [opt_strat2]
        generator = MonotonicRejectionGenerator
        n_trials = 1
        model = MonotonicRejectionGP
        acqf = MonotonicMCLSE
        """

        config = Config()
        config.update(config_str=config_str)

        strat = SequentialStrategy.from_config(config)

        self.assertTrue(
            isinstance(strat.strat_list[0].generator, SobolGenerator))
        self.assertTrue(strat.strat_list[0].model is None)

        self.assertTrue(
            isinstance(strat.strat_list[1].generator, OptimizeAcqfGenerator))
        self.assertTrue(
            isinstance(strat.strat_list[1].model, GPClassificationModel))
        self.assertTrue(
            strat.strat_list[1].generator.acqf is MCLevelSetEstimation)

        self.assertTrue(
            isinstance(strat.strat_list[2].generator,
                       MonotonicRejectionGenerator))
        self.assertTrue(
            isinstance(strat.strat_list[2].model, MonotonicRejectionGP))
        self.assertTrue(strat.strat_list[2].generator.acqf is MonotonicMCLSE)
    def test_sobol_config(self):
        config_str = """
                [common]
                lb = [0]
                ub = [1]
                parnames = [par1]

                [SobolGenerator]
                seed=12345
                """
        config = Config()
        config.update(config_str=config_str)
        gen = SobolGenerator.from_config(config)
        npt.assert_equal(gen.lb.numpy(), np.array([0]))
        npt.assert_equal(gen.ub.numpy(), np.array([1]))
        self.assertEqual(gen.seed, 12345)
Beispiel #6
0
    def test_sobol_n_trials(self):
        for n_trials in [-1, 0, 1]:
            config_str = f"""
            [common]
            lb = [0]
            ub = [1]
            parnames = [par1]
            strategy_names = [init_strat]

            [init_strat]
            generator = SobolGenerator
            n_trials = {n_trials}
            """
            config = Config()
            config.update(config_str=config_str)
            strat = Strategy.from_config(config, "init_strat")
            self.assertEqual(strat.n_trials, n_trials)
            self.assertEqual(strat.finished, n_trials <= 0)
Beispiel #7
0
    def make_strat_and_flatconfig(
        self, config_dict: Mapping[str, str]
    ) -> Tuple[SequentialStrategy, Dict[str, str]]:
        """From a config dict, generate a strategy (for running) and
            flattened config (for logging)

        Args:
            config_dict (Mapping[str, str]): A run configuration dictionary.

        Returns:
            Tuple[SequentialStrategy, Dict[str,str]]: A tuple containing a strategy
                object and a flat config.
        """
        config = Config()
        config.update(config_dict=config_dict)
        strat = SequentialStrategy.from_config(config)
        flatconfig = self.flatten_config(config)
        return strat, flatconfig
Beispiel #8
0
    def test_monotonic_single_probit_config_file(self):
        config_file = "../configs/single_lse_example.ini"
        config_file = os.path.join(os.path.dirname(__file__), config_file)

        config = Config()
        config.update(config_fnames=[config_file])
        strat = SequentialStrategy.from_config(config)

        self.assertTrue(
            isinstance(strat.strat_list[0].generator, SobolGenerator))
        self.assertTrue(strat.strat_list[0].model is None)

        self.assertTrue(
            isinstance(strat.strat_list[1].generator,
                       MonotonicRejectionGenerator))
        self.assertTrue(strat.strat_list[1].generator.acqf is MonotonicMCLSE)
        self.assertTrue(
            set(strat.strat_list[1].generator.acqf_kwargs.keys()) ==
            {"beta", "target", "objective"})
        self.assertTrue(
            strat.strat_list[1].generator.acqf_kwargs["target"] == 0.75)
        self.assertTrue(
            strat.strat_list[1].generator.acqf_kwargs["beta"] == 3.98)
        self.assertTrue(
            isinstance(
                strat.strat_list[1].generator.acqf_kwargs["objective"],
                ProbitObjective,
            ))
        self.assertTrue(strat.strat_list[1].generator.
                        model_gen_options["raw_samples"] == 1000)
        self.assertTrue(strat.strat_list[0].n_trials == 10)
        self.assertTrue(strat.strat_list[0].outcome_type == "single_probit")
        self.assertTrue(strat.strat_list[1].n_trials == 20)
        self.assertTrue(
            torch.all(strat.strat_list[0].lb == strat.strat_list[1].lb))
        self.assertTrue(
            torch.all(strat.strat_list[1].model.lb == torch.Tensor([0, 0])))
        self.assertTrue(
            torch.all(strat.strat_list[0].ub == strat.strat_list[1].ub))
        self.assertTrue(
            torch.all(strat.strat_list[1].model.ub == torch.Tensor([1, 1])))
Beispiel #9
0
    def test_nonmonotonic_optimization_config_file(self):
        config_file = "../configs/nonmonotonic_optimization_example.ini"
        config_file = os.path.join(os.path.dirname(__file__), config_file)

        config = Config()
        config.update(config_fnames=[config_file])
        strat = SequentialStrategy.from_config(config)

        self.assertTrue(
            isinstance(strat.strat_list[0].generator, SobolGenerator))
        self.assertTrue(strat.strat_list[0].model is None)

        self.assertTrue(
            isinstance(strat.strat_list[1].generator, OptimizeAcqfGenerator))
        self.assertTrue(
            strat.strat_list[1].generator.acqf is qNoisyExpectedImprovement)
        self.assertTrue(
            set(strat.strat_list[1].generator.acqf_kwargs.keys()) ==
            {"objective"})
        self.assertTrue(
            isinstance(
                strat.strat_list[1].generator.acqf_kwargs["objective"],
                ProbitObjective,
            ))

        self.assertTrue(strat.strat_list[0].n_trials == 10)
        self.assertTrue(strat.strat_list[0].outcome_type == "single_probit")
        self.assertTrue(strat.strat_list[1].n_trials == 20)
        self.assertTrue(
            torch.all(strat.strat_list[0].lb == strat.strat_list[1].lb))
        self.assertTrue(
            torch.all(strat.strat_list[1].model.lb == torch.Tensor([0, 0])))
        self.assertTrue(
            torch.all(strat.strat_list[0].ub == strat.strat_list[1].ub))
        self.assertTrue(
            torch.all(strat.strat_list[1].model.ub == torch.Tensor([1, 1])))
Beispiel #10
0
    def test_single_probit_config(self):
        config_str = """
        [common]
        lb = [0, 0]
        ub = [1, 1]
        outcome_type = single_probit
        parnames = [par1, par2]

        [experiment]
        acqf = LevelSetEstimation
        modelbridge_cls = SingleProbitModelbridge
        init_strat_cls = SobolStrategy
        opt_strat_cls = ModelWrapperStrategy

        [LevelSetEstimation]
        beta = 3.98

        [GPClassificationModel]
        inducing_size = 10
        mean_covar_factory = default_mean_covar_factory

        [SingleProbitModelbridge]
        restarts = 10
        samps = 1000

        [SobolStrategy]
        n_trials = 10

        [ModelWrapperStrategy]
        n_trials = 20
        """
        config = Config()
        config.update(config_str=config_str)

        strat = SequentialStrategy.from_config(config)

        self.assertTrue(isinstance(strat.strat_list[0], SobolStrategy))
        self.assertTrue(isinstance(strat.strat_list[1], ModelWrapperStrategy))
        self.assertTrue(
            isinstance(strat.strat_list[1].modelbridge,
                       SingleProbitModelbridge))
        self.assertTrue(
            strat.strat_list[1].modelbridge.acqf is LevelSetEstimation)
        # since ProbitObjective() is turned into an obj, we check for keys and then vals
        self.assertTrue(
            set(strat.strat_list[1].modelbridge.extra_acqf_args.keys()) ==
            {"beta", "target", "objective"})
        self.assertTrue(
            strat.strat_list[1].modelbridge.extra_acqf_args["target"] == 0.75)
        self.assertTrue(
            strat.strat_list[1].modelbridge.extra_acqf_args["beta"] == 3.98)
        self.assertTrue(
            isinstance(
                strat.strat_list[1].modelbridge.extra_acqf_args["objective"],
                ProbitObjective,
            ))

        self.assertTrue(strat.strat_list[1].modelbridge.restarts == 10)
        self.assertTrue(strat.strat_list[1].modelbridge.samps == 1000)
        self.assertTrue(strat.strat_list[0].n_trials == 10)
        self.assertTrue(strat.strat_list[0].outcome_type == "single_probit")
        self.assertTrue(strat.strat_list[1].n_trials == 20)
        self.assertTrue(
            torch.all(strat.strat_list[0].lb == strat.strat_list[1].lb))
        self.assertTrue(
            torch.all(
                strat.strat_list[1].modelbridge.lb == torch.Tensor([0, 0])))
        self.assertTrue(
            torch.all(strat.strat_list[0].ub == strat.strat_list[1].ub))
        self.assertTrue(
            torch.all(
                strat.strat_list[1].modelbridge.ub == torch.Tensor([1, 1])))
Beispiel #11
0
 def make_strat_and_flatconfig(self, config_dict):
     config = Config()
     config.update(config_dict=config_dict)
     strat = SequentialStrategy.from_config(config)
     flatconfig = self.flatten_config(config)
     return strat, flatconfig
Beispiel #12
0
    def test_single_probit_config(self):
        config_str = """
        [common]
        lb = [0, 0]
        ub = [1, 1]
        outcome_type = single_probit
        parnames = [par1, par2]
        strategy_names = [init_strat, opt_strat]
        model = GPClassificationModel
        acqf = MCLevelSetEstimation

        [init_strat]
        generator = SobolGenerator
        n_trials = 10

        [opt_strat]
        generator = OptimizeAcqfGenerator
        n_trials = 20

        [MCLevelSetEstimation]
        beta = 3.98
        objective = ProbitObjective

        [GPClassificationModel]
        inducing_size = 10
        mean_covar_factory = default_mean_covar_factory

        [OptimizeAcqfGenerator]
        restarts = 10
        samps = 1000
        """
        config = Config()
        config.update(config_str=config_str)

        strat = SequentialStrategy.from_config(config)

        self.assertTrue(
            isinstance(strat.strat_list[0].generator, SobolGenerator))
        self.assertTrue(
            isinstance(strat.strat_list[1].generator, OptimizeAcqfGenerator))
        self.assertTrue(
            isinstance(strat.strat_list[1].model, GPClassificationModel))
        self.assertTrue(
            strat.strat_list[1].generator.acqf is MCLevelSetEstimation)
        # since ProbitObjective() is turned into an obj, we check for keys and then vals
        self.assertTrue(
            set(strat.strat_list[1].generator.acqf_kwargs.keys()) ==
            {"beta", "target", "objective"})
        self.assertTrue(
            strat.strat_list[1].generator.acqf_kwargs["target"] == 0.75)
        self.assertTrue(
            strat.strat_list[1].generator.acqf_kwargs["beta"] == 3.98)
        self.assertTrue(
            isinstance(
                strat.strat_list[1].generator.acqf_kwargs["objective"],
                ProbitObjective,
            ))

        self.assertTrue(strat.strat_list[1].generator.restarts == 10)
        self.assertTrue(strat.strat_list[1].generator.samps == 1000)
        self.assertTrue(strat.strat_list[0].n_trials == 10)
        self.assertTrue(strat.strat_list[0].outcome_type == "single_probit")
        self.assertTrue(strat.strat_list[1].n_trials == 20)
        self.assertTrue(
            torch.all(strat.strat_list[0].lb == strat.strat_list[1].lb))
        self.assertTrue(
            torch.all(strat.strat_list[1].model.lb == torch.Tensor([0, 0])))
        self.assertTrue(
            torch.all(strat.strat_list[0].ub == strat.strat_list[1].ub))
        self.assertTrue(
            torch.all(strat.strat_list[1].model.ub == torch.Tensor([1, 1])))