Last active
June 12, 2023 23:47
-
-
Save sethaxen/331402e156537a933121133fe9965573 to your computer and use it in GitHub Desktop.
Expected Constrained Improvement with SMAC
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "code", | |
"execution_count": 1, | |
"id": "8069c081", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"import numpy as np\n", | |
"\n", | |
"import matplotlib.pyplot as plt\n", | |
"\n", | |
"import sklearn.ensemble\n", | |
"from sklearn import datasets\n", | |
"from sklearn.base import ClassifierMixin\n", | |
"from sklearn.gaussian_process import GaussianProcessClassifier\n", | |
"\n", | |
"from ConfigSpace import Configuration, ConfigurationSpace\n", | |
"from smac import HyperparameterOptimizationFacade, BlackBoxFacade, Scenario\n", | |
"from smac.model import AbstractModel\n", | |
"from smac.model.random_forest import RandomForest\n", | |
"from smac.model.gaussian_process import AbstractGaussianProcess, GaussianProcess\n", | |
"from smac.acquisition.function.expected_improvement import EI\n", | |
"from smac.runhistory.encoder import RunHistoryEncoder\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 2, | |
"id": "6ecf7c71", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"# utility functions\n", | |
"\n", | |
"\n", | |
"def is_trained(model: AbstractModel) -> bool:\n", | |
" if issubclass(type(model), AbstractGaussianProcess):\n", | |
" return model._is_trained\n", | |
" elif issubclass(type(model), RandomForest):\n", | |
" return model._rf is not None\n", | |
" else:\n", | |
" # we don't know\n", | |
" return True\n", | |
"\n", | |
"\n", | |
"def is_fitted(clf: ClassifierMixin) -> bool:\n", | |
" try:\n", | |
" sklearn.utils.validation.check_is_fitted(clf)\n", | |
" return True\n", | |
" except:\n", | |
" return False\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 3, | |
"id": "573eb87e", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"class UnknownConstraintModel(AbstractModel):\n", | |
" \"\"\"A model for handling unknown constraints.\n", | |
"\n", | |
" Sometimes the target function includes unknown or complicated constraints that cause a nonfinite value to be\n", | |
" returned or a nan to be raised. This model wraps another model that is trained only on the finite values,\n", | |
" along with a classifier that is trained to predict whether a configuration will produce a finite response.\n", | |
"\n", | |
" This model is intended to be used with an acquisition function that calls ``predict_probability``.\n", | |
"\n", | |
" Parameters\n", | |
" ----------\n", | |
" configspace : ConfigurationSpace\n", | |
" The configuration space.\n", | |
" model : AbstractModel\n", | |
" the model used to predict finite responses\n", | |
" clf : ClassifierMixin | None, defaults to None\n", | |
" the classifier used to predict whether a configuration will produce a finite response. If None, a\n", | |
" random forest classifier is used.\n", | |
" *args, **kwargs: forwarded to AbstractModel\n", | |
" \"\"\"\n", | |
"\n", | |
" def __init__(\n", | |
" self, configspace: ConfigurationSpace, model: AbstractModel, clf: ClassifierMixin | None = None, *args, **kwargs\n", | |
" ):\n", | |
" if clf is None:\n", | |
" clf = sklearn.ensemble.RandomForestClassifier()\n", | |
" self._clf = clf\n", | |
" self._model = model\n", | |
" super().__init__(configspace, *args, **kwargs)\n", | |
"\n", | |
" @property\n", | |
" def classifier(self) -> ClassifierMixin:\n", | |
" return self._clf\n", | |
"\n", | |
" @property\n", | |
" def model(self) -> AbstractModel:\n", | |
" return self._model\n", | |
"\n", | |
" def _train(self, X: np.ndarray, y: np.ndarray):\n", | |
" isvalid = np.isfinite(y).ravel()\n", | |
" if np.any(isvalid):\n", | |
" self.model._train(X[isvalid, ...], y[isvalid, ...])\n", | |
" self._train_classifier(X, isvalid)\n", | |
" return self\n", | |
"\n", | |
" def _train_classifier(self, X: np.ndarray, y: np.ndarray):\n", | |
" self.classifier.fit(X, y)\n", | |
" return self\n", | |
"\n", | |
" def _predict(self, X: np.ndarray, *args) -> tuple[np.ndarray, np.ndarray | None]:\n", | |
" if is_trained(self.model):\n", | |
" return self.model._predict(X, *args)\n", | |
" else:\n", | |
" # hopefully these are never used, see EIConstrained\n", | |
" return (np.ones(X.shape[0]), np.zeros(X.shape[0]))\n", | |
"\n", | |
" def predict_probability(self, X: np.ndarray) -> np.ndarray:\n", | |
" if is_fitted(self.classifier):\n", | |
" p = self.classifier.predict_proba(X)\n", | |
" return p[:, [-1]]\n", | |
" else:\n", | |
" return np.ones(X.shape[0]).reshape(-1, 1)\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 4, | |
"id": "099f3069", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"class EIConstrained(EI):\n", | |
" \"\"\"A constraint-weighted expected improvement (EI) acquisition function.\n", | |
"\n", | |
" This acquisition function is only intended for use when the model is a ``UnknownConstraintModel``.\n", | |
"\n", | |
" References\n", | |
" ----------\n", | |
" [1] Lee, H., Gramacy, R., Linkletter, C., & Gray, G. (2011).\n", | |
" Optimization subject to hidden constraints via statistical emulation.\n", | |
" Pacific Journal of Optimization, 7(3), 467-478.\n", | |
" [2] Gelbart, M. H., Snoek, J., & Adams, R. P. (2014).\n", | |
" Bayesian optimization with unknown constraints.\n", | |
" In: Proceedings of the Thirtieth Conference on Uncertainty in Artificial Intelligence (UAI'14).\n", | |
" arXiv: 1403.5607.\n", | |
" \"\"\"\n", | |
"\n", | |
" def _compute(self, X: np.ndarray) -> np.ndarray:\n", | |
" parent_model = self._model.model\n", | |
" pconst = self._model.predict_probability(X)\n", | |
" if is_trained(parent_model):\n", | |
" ei = super()._compute(X)\n", | |
" return ei * pconst\n", | |
" else:\n", | |
" return pconst\n" | |
] | |
}, | |
{ | |
"attachments": {}, | |
"cell_type": "markdown", | |
"id": "6552a1fe", | |
"metadata": {}, | |
"source": [ | |
"## Example 1: Branin-Hoo function with a constraint" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 5, | |
"id": "fefe67bc", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"[INFO][abstract_initial_design.py:68] Using `n_configs` and ignoring `n_configs_per_hyperparameter`.\n" | |
] | |
} | |
], | |
"source": [ | |
"# problem set-up\n", | |
"# branin-hoo function has 3 optima.\n", | |
"# only one satisfies the specified ellipse constraint: (x1, x2) = (np.pi, 2.275).\n", | |
"\n", | |
"\n", | |
"def braninhoo(x1, x2):\n", | |
" a = 1\n", | |
" b = 5.1 / (4 * np.pi**2)\n", | |
" c = 5 / np.pi\n", | |
" r = 6\n", | |
" s = 10\n", | |
" t = 1 / (8 * np.pi)\n", | |
" return a * (x2 - b * x1**2 + c * x1 - r) ** 2 + s * (1 - t) * np.cos(x1) + s\n", | |
"\n", | |
"\n", | |
"def ellipse_constraint(x1, x2):\n", | |
" return (x1 - 2.5) ** 2 + (x2 - 7.5) ** 2 <= 50\n", | |
"\n", | |
"\n", | |
"def braninhoo_constrained(config, seed: int = 0):\n", | |
" x1 = config[\"x1\"]\n", | |
" x2 = config[\"x2\"]\n", | |
" if not ellipse_constraint(x1, x2):\n", | |
" return np.nan\n", | |
" return braninhoo(x1, x2)\n", | |
"\n", | |
"\n", | |
"configspace = ConfigurationSpace({\"x1\": (-5.0, 10.0), \"x2\": (0.0, 15.0)})\n", | |
"scenario = Scenario(configspace, deterministic=True, n_trials=50)\n", | |
"# override the default RunHistoryInverseScaledEncoder, which doesn't play well with nans and infs\n", | |
"runhistory_encoder = RunHistoryEncoder(scenario=scenario)\n", | |
"# use a smaller number of initial configurations\n", | |
"initial_design = HyperparameterOptimizationFacade.get_initial_design(scenario, n_configs=5)\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 6, | |
"id": "769db7a5", | |
"metadata": { | |
"scrolled": true | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"[INFO][abstract_initial_design.py:81] Reducing the number of initial configurations from 20 to 12 (max_ratio == 0.25).\n", | |
"[INFO][abstract_initial_design.py:133] Using 12 initial design configurations and 0 additional configurations.\n", | |
"[INFO][abstract_intensifier.py:306] Using only one seed for deterministic scenario.\n", | |
"[INFO][abstract_intensifier.py:493] Added config 719654 as new incumbent because there are no incumbents yet.\n", | |
"[INFO][abstract_intensifier.py:565] Added config 34beb6 and rejected config 719654 as incumbent because it is not better than the incumbents on 1 instances:\n", | |
"[INFO][configspace.py:175] --- x1: -0.9968221839517355 -> 4.511546706780791\n", | |
"[INFO][configspace.py:175] --- x2: 9.30847043171525 -> 3.1949775852262974\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[INFO][abstract_intensifier.py:565] Added config a1337d and rejected config 34beb6 as incumbent because it is not better than the incumbents on 1 instances:\n", | |
"[INFO][configspace.py:175] --- x1: 4.511546706780791 -> 2.3189717205241323\n", | |
"[INFO][configspace.py:175] --- x2: 3.1949775852262974 -> 1.2824171036481857\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[INFO][smbo.py:298] Finished 50 trials.\n", | |
"[INFO][smbo.py:306] Configuration budget is exhausted:\n", | |
"[INFO][smbo.py:307] --- Remaining wallclock time: inf\n", | |
"[INFO][smbo.py:308] --- Remaining cpu time: inf\n", | |
"[INFO][smbo.py:309] --- Remaining trials: 0\n" | |
] | |
} | |
], | |
"source": [ | |
"# try SMAC without accounting for constraints\n", | |
"smac_std = HyperparameterOptimizationFacade(\n", | |
" scenario,\n", | |
" braninhoo_constrained,\n", | |
" model=RandomForest(configspace),\n", | |
" acquisition_function=EI(),\n", | |
" runhistory_encoder=runhistory_encoder,\n", | |
" overwrite=True,\n", | |
")\n", | |
"incumbent_std = smac_std.optimize()\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 7, | |
"id": "27b26235", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"(Configuration(values={\n", | |
" 'x1': 2.3189717205241323,\n", | |
" 'x2': 1.2824171036481857,\n", | |
" }),\n", | |
" 6.431327806074405)" | |
] | |
}, | |
"execution_count": 7, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"incumbent_std, braninhoo_constrained(incumbent_std)\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 8, | |
"id": "e515ebb0", | |
"metadata": { | |
"scrolled": true | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"[INFO][abstract_initial_design.py:133] Using 5 initial design configurations and 0 additional configurations.\n", | |
"[INFO][abstract_intensifier.py:306] Using only one seed for deterministic scenario.\n", | |
"[INFO][abstract_intensifier.py:493] Added config 719654 as new incumbent because there are no incumbents yet.\n", | |
"[INFO][abstract_intensifier.py:565] Added config 34beb6 and rejected config 719654 as incumbent because it is not better than the incumbents on 1 instances:\n", | |
"[INFO][configspace.py:175] --- x1: -0.9968221839517355 -> 4.511546706780791\n", | |
"[INFO][configspace.py:175] --- x2: 9.30847043171525 -> 3.1949775852262974\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[INFO][abstract_intensifier.py:565] Added config 665224 and rejected config 34beb6 as incumbent because it is not better than the incumbents on 1 instances:\n", | |
"[INFO][configspace.py:175] --- x1: 4.511546706780791 -> 3.517400861622688\n", | |
"[INFO][configspace.py:175] --- x2: 3.1949775852262974 -> 3.0289182973655278\n", | |
"[INFO][abstract_intensifier.py:565] Added config 5c1a56 and rejected config 665224 as incumbent because it is not better than the incumbents on 1 instances:\n", | |
"[INFO][configspace.py:175] --- x1: 3.517400861622688 -> 3.5113129948124318\n", | |
"[INFO][configspace.py:175] --- x2: 3.0289182973655278 -> 3.0308532789081988\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[INFO][abstract_intensifier.py:565] Added config d680c5 and rejected config 5c1a56 as incumbent because it is not better than the incumbents on 1 instances:\n", | |
"[INFO][configspace.py:175] --- x1: 3.5113129948124318 -> 3.0311969520736604\n", | |
"[INFO][configspace.py:175] --- x2: 3.0308532789081988 -> 2.8865589024188467\n", | |
"[INFO][abstract_intensifier.py:565] Added config d283e3 and rejected config d680c5 as incumbent because it is not better than the incumbents on 1 instances:\n", | |
"[INFO][configspace.py:175] --- x1: 3.0311969520736604 -> 3.037406654973571\n", | |
"[INFO][configspace.py:175] --- x2: 2.8865589024188467 -> 2.8816691479706464\n", | |
"[INFO][abstract_intensifier.py:565] Added config 0aa4d9 and rejected config d283e3 as incumbent because it is not better than the incumbents on 1 instances:\n", | |
"[INFO][configspace.py:175] --- x1: 3.037406654973571 -> 3.0427788597576875\n", | |
"[INFO][configspace.py:175] --- x2: 2.8816691479706464 -> 2.8797333877228173\n", | |
"[INFO][abstract_intensifier.py:565] Added config bc8d60 and rejected config 0aa4d9 as incumbent because it is not better than the incumbents on 1 instances:\n", | |
"[INFO][configspace.py:175] --- x1: 3.0427788597576875 -> 3.0441453908825107\n", | |
"[INFO][configspace.py:175] --- x2: 2.8797333877228173 -> 2.869151780728192\n", | |
"[INFO][abstract_intensifier.py:565] Added config cb6e27 and rejected config bc8d60 as incumbent because it is not better than the incumbents on 1 instances:\n", | |
"[INFO][configspace.py:175] --- x1: 3.0441453908825107 -> 3.025667909708938\n", | |
"[INFO][configspace.py:175] --- x2: 2.869151780728192 -> 2.8625116026951853\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[INFO][smbo.py:298] Finished 50 trials.\n", | |
"[INFO][smbo.py:306] Configuration budget is exhausted:\n", | |
"[INFO][smbo.py:307] --- Remaining wallclock time: inf\n", | |
"[INFO][smbo.py:308] --- Remaining cpu time: inf\n", | |
"[INFO][smbo.py:309] --- Remaining trials: 0\n" | |
] | |
} | |
], | |
"source": [ | |
"# now try with accounting for constraints\n", | |
"smac_const = HyperparameterOptimizationFacade(\n", | |
" scenario,\n", | |
" braninhoo_constrained,\n", | |
" overwrite=True,\n", | |
" initial_design=initial_design,\n", | |
" model=UnknownConstraintModel(\n", | |
" configspace,\n", | |
" GaussianProcess(\n", | |
" configspace,\n", | |
" kernel=BlackBoxFacade.get_kernel(scenario),\n", | |
" ),\n", | |
" ),\n", | |
" acquisition_function=EIConstrained(),\n", | |
" runhistory_encoder=runhistory_encoder,\n", | |
")\n", | |
"incumbent_const = smac_const.optimize()\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 9, | |
"id": "12bbc0ac", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"(Configuration(values={\n", | |
" 'x1': 3.025667909708938,\n", | |
" 'x2': 2.8625116026951853,\n", | |
" }),\n", | |
" 0.7077263556119711)" | |
] | |
}, | |
"execution_count": 9, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"incumbent_const, braninhoo_constrained(incumbent_const)\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 10, | |
"id": "6a148406", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"/tmp/ipykernel_56970/987300156.py:14: UserWarning: No contour levels were found within the data range.\n", | |
" plt.contour(x1, x2, ellipse_constraint(x1, x2), levels=0, colors=\"red\")\n" | |
] | |
}, | |
{ | |
"data": { | |
"text/plain": [ | |
"<matplotlib.collections.PathCollection at 0x7fb385aaf010>" | |
] | |
}, | |
"execution_count": 10, | |
"metadata": {}, | |
"output_type": "execute_result" | |
}, | |
{ | |
"data": { | |
"image/png": "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", | |
"text/plain": [ | |
"<Figure size 640x480 with 1 Axes>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"x1 = np.linspace(-5, 10, 1000)\n", | |
"x2 = np.linspace(0, 15, 1000)\n", | |
"x1, x2 = np.meshgrid(x1, x2)\n", | |
"X = np.dstack([x1, x2]).reshape(-1, 2)\n", | |
"# we can't just plot the decision surface of the classifier,\n", | |
"# because _build_matrix operates only on the actual run history,\n", | |
"# so instead we plot the probabilities for the configurations tested\n", | |
"x1_config = [d[\"x1\"] for d in smac_const.runhistory.get_configs()]\n", | |
"x2_config = [d[\"x2\"] for d in smac_const.runhistory.get_configs()]\n", | |
"X_config = runhistory_encoder._build_matrix(smac_const.runhistory)[0]\n", | |
"prob_config = smac_const._model.predict_probability(X_config).ravel()\n", | |
"\n", | |
"plt.contourf(x1, x2, braninhoo(x1, x2), levels=50, cmap=\"plasma_r\")\n", | |
"plt.contour(x1, x2, ellipse_constraint(x1, x2), levels=0, colors=\"red\")\n", | |
"plt.scatter(x1_config, x2_config, c=prob_config, cmap=\"bone_r\", clim=(0, 1))\n" | |
] | |
}, | |
{ | |
"attachments": {}, | |
"cell_type": "markdown", | |
"id": "db908527", | |
"metadata": {}, | |
"source": [ | |
"## Example 2" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 11, | |
"id": "8fddafc2", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"[INFO][abstract_initial_design.py:68] Using `n_configs` and ignoring `n_configs_per_hyperparameter`.\n" | |
] | |
} | |
], | |
"source": [ | |
"def w(x):\n", | |
" return np.exp(-((x - 1) ** 2)) + np.exp(-0.8 * (x + 1) ** 2) - 0.05 * np.sin(8 * (x + 0.1))\n", | |
"\n", | |
"\n", | |
"def z(x1, x2):\n", | |
" return -w(x1) * w(x2)\n", | |
"\n", | |
"\n", | |
"def ellipse_constraint(x1, x2):\n", | |
" return (x1 - x2) ** 2 / 3 + (x1 + x2) ** 2 < 3\n", | |
"\n", | |
"\n", | |
"def z_constrained(config, seed: int = 0):\n", | |
" x1 = config[\"x1\"]\n", | |
" x2 = config[\"x2\"]\n", | |
" if not ellipse_constraint(x1, x2):\n", | |
" return np.nan\n", | |
" return z(x1, x2)\n", | |
"\n", | |
"\n", | |
"configspace = ConfigurationSpace({\"x1\": (-2.0, 2.0), \"x2\": (-2.0, 2.0)})\n", | |
"scenario = Scenario(configspace, deterministic=True, n_trials=50)\n", | |
"# override the default RunHistoryInverseScaledEncoder, which doesn't play well with nans and infs\n", | |
"runhistory_encoder = RunHistoryEncoder(scenario=scenario)\n", | |
"# use a smaller number of initial configurations\n", | |
"initial_design = HyperparameterOptimizationFacade.get_initial_design(scenario, n_configs=5)\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 12, | |
"id": "d994c0b3", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"[INFO][abstract_initial_design.py:81] Reducing the number of initial configurations from 20 to 12 (max_ratio == 0.25).\n", | |
"[INFO][abstract_initial_design.py:133] Using 12 initial design configurations and 0 additional configurations.\n", | |
"[INFO][abstract_intensifier.py:306] Using only one seed for deterministic scenario.\n", | |
"[INFO][abstract_intensifier.py:493] Added config 927cdc as new incumbent because there are no incumbents yet.\n", | |
"[INFO][abstract_intensifier.py:565] Added config afc31e and rejected config 927cdc as incumbent because it is not better than the incumbents on 1 instances:\n", | |
"[INFO][configspace.py:175] --- x1: -0.9324859157204628 -> 0.5364124551415443\n", | |
"[INFO][configspace.py:175] --- x2: 0.48225878179073334 -> -1.1480059772729874\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[INFO][abstract_intensifier.py:565] Added config 61fdf6 and rejected config afc31e as incumbent because it is not better than the incumbents on 1 instances:\n", | |
"[INFO][configspace.py:175] --- x1: 0.5364124551415443 -> -1.0249349139630795\n", | |
"[INFO][configspace.py:175] --- x2: -1.1480059772729874 -> 1.7202088944613934\n", | |
"[INFO][abstract_intensifier.py:565] Added config 172e3b and rejected config 61fdf6 as incumbent because it is not better than the incumbents on 1 instances:\n", | |
"[INFO][configspace.py:175] --- x1: -1.0249349139630795 -> 1.3809673972427845\n", | |
"[INFO][configspace.py:175] --- x2: 1.7202088944613934 -> -0.9015109427273273\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[INFO][abstract_intensifier.py:565] Added config 422a13 and rejected config 172e3b as incumbent because it is not better than the incumbents on 1 instances:\n", | |
"[INFO][configspace.py:175] --- x1: 1.3809673972427845 -> 1.1551328413188457\n", | |
"[INFO][configspace.py:175] --- x2: -0.9015109427273273 -> 0.14300767704844475\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[INFO][smbo.py:298] Finished 50 trials.\n", | |
"[INFO][smbo.py:306] Configuration budget is exhausted:\n", | |
"[INFO][smbo.py:307] --- Remaining wallclock time: inf\n", | |
"[INFO][smbo.py:308] --- Remaining cpu time: inf\n", | |
"[INFO][smbo.py:309] --- Remaining trials: 0\n" | |
] | |
} | |
], | |
"source": [ | |
"# try SMAC without accounting for constraints\n", | |
"smac_std = HyperparameterOptimizationFacade(\n", | |
" scenario,\n", | |
" braninhoo_constrained,\n", | |
" model=RandomForest(configspace),\n", | |
" acquisition_function=EI(),\n", | |
" runhistory_encoder=runhistory_encoder,\n", | |
" overwrite=True,\n", | |
")\n", | |
"incumbent_std = smac_std.optimize()\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 13, | |
"id": "1e726676", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"(Configuration(values={\n", | |
" 'x1': 1.1551328413188457,\n", | |
" 'x2': 0.14300767704844475,\n", | |
" }),\n", | |
" -0.8079718466860779)" | |
] | |
}, | |
"execution_count": 13, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"incumbent_std, z_constrained(incumbent_std)\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 14, | |
"id": "7ddd918c", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"[INFO][abstract_initial_design.py:133] Using 5 initial design configurations and 0 additional configurations.\n", | |
"[INFO][abstract_intensifier.py:306] Using only one seed for deterministic scenario.\n", | |
"[INFO][abstract_intensifier.py:493] Added config 927cdc as new incumbent because there are no incumbents yet.\n", | |
"[INFO][abstract_intensifier.py:565] Added config afc31e and rejected config 927cdc as incumbent because it is not better than the incumbents on 1 instances:\n", | |
"[INFO][configspace.py:175] --- x1: -0.9324859157204628 -> 0.5364124551415443\n", | |
"[INFO][configspace.py:175] --- x2: 0.48225878179073334 -> -1.1480059772729874\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[INFO][abstract_intensifier.py:565] Added config 61fdf6 and rejected config afc31e as incumbent because it is not better than the incumbents on 1 instances:\n", | |
"[INFO][configspace.py:175] --- x1: 0.5364124551415443 -> -1.0249349139630795\n", | |
"[INFO][configspace.py:175] --- x2: -1.1480059772729874 -> 1.7202088944613934\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[INFO][abstract_intensifier.py:565] Added config eedd49 and rejected config 61fdf6 as incumbent because it is not better than the incumbents on 1 instances:\n", | |
"[INFO][configspace.py:175] --- x1: -1.0249349139630795 -> -0.09224779448564924\n", | |
"[INFO][configspace.py:175] --- x2: 1.7202088944613934 -> 0.7154173919000537\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[INFO][abstract_intensifier.py:565] Added config d1eede and rejected config eedd49 as incumbent because it is not better than the incumbents on 1 instances:\n", | |
"[INFO][configspace.py:175] --- x1: -0.09224779448564924 -> 0.44838289088968564\n", | |
"[INFO][configspace.py:175] --- x2: 0.7154173919000537 -> 0.46773598749902767\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[WARNING][abstract_runner.py:122] Target function returned infinity or nothing at all. Result is treated as CRASHED and cost is set to inf.\n", | |
"[INFO][smbo.py:298] Finished 50 trials.\n", | |
"[INFO][smbo.py:306] Configuration budget is exhausted:\n", | |
"[INFO][smbo.py:307] --- Remaining wallclock time: inf\n", | |
"[INFO][smbo.py:308] --- Remaining cpu time: inf\n", | |
"[INFO][smbo.py:309] --- Remaining trials: 0\n" | |
] | |
} | |
], | |
"source": [ | |
"# now try with accounting for constraints\n", | |
"smac_const = HyperparameterOptimizationFacade(\n", | |
" scenario,\n", | |
" braninhoo_constrained,\n", | |
" overwrite=True,\n", | |
" initial_design=initial_design,\n", | |
" model=UnknownConstraintModel(\n", | |
" configspace,\n", | |
" GaussianProcess(\n", | |
" configspace,\n", | |
" kernel=BlackBoxFacade.get_kernel(scenario),\n", | |
" ),\n", | |
" ),\n", | |
" acquisition_function=EIConstrained(),\n", | |
" runhistory_encoder=runhistory_encoder,\n", | |
")\n", | |
"incumbent_const = smac_const.optimize()\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 15, | |
"id": "aafff61b", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"(Configuration(values={\n", | |
" 'x1': 0.44838289088968564,\n", | |
" 'x2': 0.46773598749902767,\n", | |
" }),\n", | |
" -0.9532908750183541)" | |
] | |
}, | |
"execution_count": 15, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"incumbent_const, z_constrained(incumbent_const)\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 16, | |
"id": "93886132", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"/tmp/ipykernel_56970/623996118.py:11: UserWarning: No contour levels were found within the data range.\n", | |
" plt.contour(x1, x2, ellipse_constraint(x1, x2), levels=0, colors=\"red\")\n" | |
] | |
}, | |
{ | |
"data": { | |
"text/plain": [ | |
"<matplotlib.collections.PathCollection at 0x7fb37d7528d0>" | |
] | |
}, | |
"execution_count": 16, | |
"metadata": {}, | |
"output_type": "execute_result" | |
}, | |
{ | |
"data": { | |
"image/png": "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SZLG/S3L8qRlIVwuFy7X5PrNrKyshLpBQmRmZorzTiDEeScW4rwTi0Q9b5vNpuj+ohadm2++mWuuuWbadSorK0f/39TUxHnnnce6det45JFHpt2uuLgYCEZ2SkpKRpe3tbVNivIIBAKBQCAQzETUopOfn09+fn5E6zY2NnLeeeexevVqHn/88RktraqqiuLiYjZu3MjKlSsB8Hg8bN68mR/84AfRJlUgEAgEAkGCo2x8aAxNTU2ce+65lJeXc//999Pe3k5LS8toO5wQixYt4plnngGCVVa33nor3/ve93jmmWd4//33ueGGG0hNTeUTn/hERMd1uVx861vfCludZWXEeYvzTgTEeYvzTgTEeSt73qp1L3/iiSf41Kc+Ffa7sYeUJInHH3+cG264YfS7e+65h1/+8pfjBgxcunSpGskUCAQCgUBgYTQdR0cgEAgEAoFAS1SruhIIBAKBQCDQGyE6AoFAIBAILIsQHYFAIBAIBJZFiI5AIBAIBALLYnrRqa2t5TOf+QxVVVWkpKQwd+5cvvWtb+HxTD/xnizL3H333ZSWlpKSksK5557L3r17NUq1Mtx7772cfvrppKamkp2dHdE2N9xwA5IkjfusXbtW3YQqTCznbYXr3d3dzbXXXktWVhZZWVlce+219PT0TLuNGa/3Qw89RFVVFcnJyaxevZrXX3992vU3b97M6tWrSU5OZs6cOTz88MMapVRZojnvTZs2TbqukiRx4MABDVMcP6+99hqXXXYZpaWlSJLEs88+O+M2Vrje0Z63Fa73hg0bOOWUU8jIyKCwsJArrriC6urqGbdT4nqbXnQOHDhAIBDgl7/8JXv37uUnP/kJDz/8MHfddde029133338+Mc/5sEHH2Tr1q0UFxdz4YUX0t/fr1HK48fj8XDVVVfxhS98IartLr74Ypqbm0c/L774okopVIdYztsK1/sTn/gEO3fu5KWXXuKll15i586dXHvttTNuZ6br/ac//Ylbb72Vr3/96+zYsYOzzjqLSy65hLq6urDr19TUcOmll3LWWWexY8cO7rrrLm655RaeeuopjVMeH9Ged4jq6upx13b+/PkapVgZBgcHWbFiBQ8++GBE61vlekd73iHMfL03b97Ml770Jd5++202btyIz+dj/fr1DA4OTrmNYtdbtiD33XefXFVVNeX3gUBALi4ulr///e+PLhsZGZGzsrLkhx9+WIskKsrjjz8uZ2VlRbTu9ddfL19++eWqpkcrIj1vK1zvffv2yYD89ttvjy7bsmWLDMgHDhyYcjuzXe9TTz1Vvummm8YtW7Rokfy1r30t7Ppf/epX5UWLFo1b9vnPf15eu3atamlUg2jP+9VXX5UBubu7W4PUaQMgP/PMM9OuY5XrPZZIztuK17utrU0G5M2bN0+5jlLX2/QRnXD09vZOO/tpTU0NLS0trF+/fnSZy+XinHPO4a233tIiibqyadMmCgsLWbBgATfeeCNtbW16J0lVrHC9t2zZQlZWFqeddtrosrVr15KVlTXjOZjlens8HrZv3z7uOgGsX79+ynPcsmXLpPUvuugitm3bhtfrVS2tShLLeYdYuXIlJSUlXHDBBbz66qtqJtMQWOF6x4OVrndvby/AtM9qpa635UTnyJEj/OxnP+Omm26acp3QNBQTJwotKiqaNEWF1bjkkkv4/e9/z7///W9+9KMfsXXrVs4//3zcbrfeSVMNK1zvlpYWCgsLJy0vLCyc9hzMdL07Ojrw+/1RXaeWlpaw6/t8Pjo6OlRLq5LEct4lJSU88sgjPPXUUzz99NMsXLiQCy64gNdee02LJOuGFa53LFjtesuyzO23386ZZ5457awHSl1vw4rO3XffHbbx1djPtm3bxm3T1NTExRdfzFVXXcVnP/vZGY8hSdK4v2VZnrRMa2I572i4+uqr+eAHP8jSpUu57LLL+Mc//sHBgwd54YUXFDyL6FH7vMH81ztcWmc6B6Ne7+mI9jqFWz/ccqMTzXkvXLiQG2+8kVWrVrFu3ToeeughPvjBD3L//fdrkVRdscr1jgarXe+bb76Z3bt383//938zrqvE9Y569nKtuPnmm7nmmmumXaeysnL0/01NTZx33nmsW7eORx55ZNrtiouLgaAtlpSUjC5va2ubZI9aE+15x0tJSQmzZ8/m0KFDiu0zFtQ8bytc7927d9Pa2jrpu/b29qjOwSjXOxz5+fnY7fZJUYzprlNxcXHY9R0OB3l5eaqlVUliOe9wrF27lieffFLp5BkKK1xvpTDr9f7yl7/Mc889x2uvvUZZWdm06yp1vQ0rOvn5+eTn50e0bmNjI+eddx6rV6/m8ccfx2abPlBVVVVFcXExGzduZOXKlUCwnnzz5s384Ac/iDvt8RDNeStBZ2cn9fX14wRAD9Q8bytc73Xr1tHb28u7777LqaeeCsA777xDb28vp59+esTHM8r1DkdSUhKrV69m48aNXHnllaPLN27cyOWXXx52m3Xr1vH888+PW/bKK6+wZs0anE6nqulViljOOxw7duww5HVVEitcb6Uw2/WWZZkvf/nLPPPMM2zatImqqqoZt1HsekfVdNmANDY2yvPmzZPPP/98uaGhQW5ubh79jGXhwoXy008/Pfr397//fTkrK0t++umn5T179sgf//jH5ZKSErmvr0/rU4iZY8eOyTt27JDvueceOT09Xd6xY4e8Y8cOub+/f3Sdsefd398v//d//7f81ltvyTU1NfKrr74qr1u3Tp41a5alz1uWrXG9L774Ynn58uXyli1b5C1btsjLli2TP/ShD41bx+zX+49//KPsdDrlRx99VN63b5986623ymlpaXJtba0sy7L8ta99Tb722mtH1z969Kicmpoq33bbbfK+ffvkRx99VHY6nfJf//pXvU4hJqI975/85CfyM888Ix88eFB+//335a997WsyID/11FN6nUJM9Pf3j+ZfQP7xj38s79ixQz527Jgsy9a93tGetxWu9xe+8AU5KytL3rRp07jn9NDQ0Og6al1v04vO448/LgNhP2MB5Mcff3z070AgIH/rW9+Si4uLZZfLJZ999tnynj17NE59fFx//fVhz/vVV18dXWfseQ8NDcnr16+XCwoKZKfTKVdUVMjXX3+9XFdXp88JxEi05y3L1rjenZ2d8ic/+Uk5IyNDzsjIkD/5yU9O6m5qhev985//XJ49e7aclJQkr1q1alz30+uvv14+55xzxq2/adMmeeXKlXJSUpJcWVkp/+IXv9A4xcoQzXn/4Ac/kOfOnSsnJyfLOTk58plnnim/8MILOqQ6PkLdpid+rr/+elmWrXu9oz1vK1zvqZ7TY8tpta63dDwBAoFAIBAIBJbDsL2uBAKBQCAQCOJFiI5AIBAIBALLIkRHIBAIBAKBZRGiIxAIBAKBwLII0REIBAKBQGBZhOgIBAKBQCCwLEJ0BAKBQCAQWBYhOgKBQCAQCCyLEB2BQCAQCASWRYiOQCAQCAQCyyJERyAQCAQCgWX5/4gZAMek2AH5AAAAAElFTkSuQmCC", | |
"text/plain": [ | |
"<Figure size 640x480 with 1 Axes>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"x1 = np.linspace(-2, 2, 1000)\n", | |
"x2 = np.linspace(-2, 2, 1000)\n", | |
"x1, x2 = np.meshgrid(x1, x2)\n", | |
"X = np.dstack([x1, x2]).reshape(-1, 2)\n", | |
"x1_config = [d[\"x1\"] for d in smac_const.runhistory.get_configs()]\n", | |
"x2_config = [d[\"x2\"] for d in smac_const.runhistory.get_configs()]\n", | |
"X_config = runhistory_encoder._build_matrix(smac_const.runhistory)[0]\n", | |
"prob_config = smac_const._model.predict_probability(X_config).ravel()\n", | |
"\n", | |
"plt.contourf(x1, x2, z(x1, x2), levels=10, cmap=\"plasma_r\")\n", | |
"plt.contour(x1, x2, ellipse_constraint(x1, x2), levels=0, colors=\"red\")\n", | |
"plt.scatter(x1_config, x2_config, c=prob_config, cmap=\"bone_r\", clim=(0, 1))\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"id": "03d0b861", | |
"metadata": {}, | |
"outputs": [], | |
"source": [] | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"display_name": "smac_test", | |
"language": "python", | |
"name": "python3" | |
}, | |
"language_info": { | |
"codemirror_mode": { | |
"name": "ipython", | |
"version": 3 | |
}, | |
"file_extension": ".py", | |
"mimetype": "text/x-python", | |
"name": "python", | |
"nbconvert_exporter": "python", | |
"pygments_lexer": "ipython3", | |
"version": "3.11.0" | |
}, | |
"vscode": { | |
"interpreter": { | |
"hash": "c145db57d1c86e83351151ef0520af6a7aa74865ecc6c1abcc903c17ea587f4b" | |
} | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 5 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment