diff --git a/tutorials/turbo_1/turbo_1.ipynb b/tutorials/turbo_1/turbo_1.ipynb index c72d39fcbb..134f67ec8f 100644 --- a/tutorials/turbo_1/turbo_1.ipynb +++ b/tutorials/turbo_1/turbo_1.ipynb @@ -26,15 +26,15 @@ "source": [ "# Install dependencies if we are running in colab\n", "import sys\n", - "if 'google.colab' in sys.modules:\n", + "\n", + "if \"google.colab\" in sys.modules:\n", " %pip install botorch" ] }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": { - "collapsed": false, "executionStartTime": 1674921563794, "executionStopTime": 1674921566438, "jupyter": { @@ -43,25 +43,22 @@ "originalKey": "c11881c9-13f5-4e35-bdc8-b8f817089713", "requestMsgId": "b21eda64-89d8-461f-a9d1-57117892e0c9" }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[KeOps] Warning : omp.h header is not in the path, disabling OpenMP. To fix this, you can set the environment\n", - " variable OMP_PATH to the location of the header before importing keopscore or pykeops,\n", - " e.g. using os.environ: import os; os.environ['OMP_PATH'] = '/path/to/omp/header'\n", - "[KeOps] Warning : Cuda libraries were not detected on the system or could not be loaded ; using cpu only mode\n" - ] - } - ], + "outputs": [], "source": [ - "import os\n", "import math\n", + "import os\n", "import warnings\n", "from dataclasses import dataclass\n", + "from typing import Optional\n", "\n", + "import gpytorch\n", "import torch\n", + "from gpytorch.constraints import Interval\n", + "from gpytorch.kernels import MaternKernel, ScaleKernel\n", + "from gpytorch.likelihoods import GaussianLikelihood\n", + "from gpytorch.mlls import ExactMarginalLogLikelihood\n", + "from torch.quasirandom import SobolEngine\n", + "\n", "from botorch.acquisition import qExpectedImprovement, qLogExpectedImprovement\n", "from botorch.exceptions import BadInitialCandidatesWarning\n", "from botorch.fit import fit_gpytorch_mll\n", @@ -70,13 +67,6 @@ "from botorch.optim import optimize_acqf\n", "from botorch.test_functions import Ackley\n", "from botorch.utils.transforms import unnormalize\n", - "from torch.quasirandom import SobolEngine\n", - "\n", - "import gpytorch\n", - "from gpytorch.constraints import Interval\n", - "from gpytorch.kernels import MaternKernel, ScaleKernel\n", - "from gpytorch.likelihoods import GaussianLikelihood\n", - "from gpytorch.mlls import ExactMarginalLogLikelihood\n", "\n", "\n", "warnings.filterwarnings(\"ignore\", category=BadInitialCandidatesWarning)\n", @@ -107,9 +97,8 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": { - "collapsed": false, "executionStartTime": 1674921566576, "executionStopTime": 1674921566582, "jupyter": { @@ -131,8 +120,8 @@ "max_cholesky_size = float(\"inf\") # Always use Cholesky\n", "\n", "\n", - "def eval_objective(x):\n", - " \"\"\"This is a helper function we use to unnormalize and evalaute a point\"\"\"\n", + "def eval_objective(x: torch.Tensor) -> torch.Tensor:\n", + " \"\"\"This is a helper function we use to unnormalize and evalaute a point.\"\"\"\n", " return fun(unnormalize(x, fun.bounds))" ] }, @@ -153,9 +142,8 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": { - "collapsed": false, "executionStartTime": 1674921566718, "executionStopTime": 1674921566731, "jupyter": { @@ -168,6 +156,7 @@ "source": [ "@dataclass\n", "class TurboState:\n", + " \"\"\"Turbo state used to track the recent history of the trust region.\"\"\"\n", " dim: int\n", " batch_size: int\n", " length: float = 0.8\n", @@ -181,12 +170,14 @@ " restart_triggered: bool = False\n", "\n", " def __post_init__(self):\n", + " \"\"\"Post-initialize the state of the trust region.\"\"\"\n", " self.failure_tolerance = math.ceil(\n", " max([4.0 / self.batch_size, float(self.dim) / self.batch_size])\n", " )\n", "\n", "\n", - "def update_state(state, Y_next):\n", + "def update_state(state: TurboState, Y_next: torch.Tensor) -> TurboState:\n", + " \"\"\"Update the state of the trust region based on the new function values.\"\"\"\n", " if max(Y_next) > state.best_value + 1e-3 * math.fabs(state.best_value):\n", " state.success_counter += 1\n", " state.failure_counter = 0\n", @@ -219,9 +210,8 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "metadata": { - "collapsed": false, "executionStartTime": 1674921566859, "executionStopTime": 1674921566868, "jupyter": { @@ -257,9 +247,8 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "metadata": { - "collapsed": false, "executionStartTime": 1674921567266, "executionStopTime": 1674921567271, "jupyter": { @@ -270,10 +259,10 @@ }, "outputs": [], "source": [ - "def get_initial_points(dim, n_pts, seed=0):\n", + "def get_initial_points(dim: int, n_pts: int, seed: int = 0) -> torch.Tensor:\n", + " \"\"\"Generate initial points using Sobol sequence.\"\"\"\n", " sobol = SobolEngine(dimension=dim, scramble=True, seed=seed)\n", - " X_init = sobol.draw(n=n_pts).to(dtype=dtype, device=device)\n", - " return X_init" + " return sobol.draw(n=n_pts).to(dtype=dtype, device=device)" ] }, { @@ -293,9 +282,8 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "metadata": { - "collapsed": false, "executionStartTime": 1674921567409, "executionStopTime": 1674921567429, "jupyter": { @@ -307,18 +295,21 @@ "outputs": [], "source": [ "def generate_batch(\n", - " state,\n", - " model, # GP model\n", - " X, # Evaluated points on the domain [0, 1]^d\n", - " Y, # Function values\n", - " batch_size,\n", - " n_candidates=None, # Number of candidates for Thompson sampling\n", - " num_restarts=10,\n", - " raw_samples=512,\n", - " acqf=\"ts\", # \"ei\" or \"ts\"\n", - "):\n", + " state: TurboState,\n", + " model: SingleTaskGP, # GP model\n", + " X: torch.Tensor, # Evaluated points on the domain [0, 1]^d\n", + " Y: torch.Tensor, # Function values\n", + " batch_size: int,\n", + " n_candidates: Optional[int] = None, # Number of candidates for Thompson sampling\n", + " num_restarts: int = 10,\n", + " raw_samples: int = 512,\n", + " acqf: str = \"ts\", # \"ei\" or \"ts\"\n", + ") -> torch.Tensor:\n", + " \"\"\"Generate a new batch of points.\"\"\"\n", " assert acqf in (\"ts\", \"ei\")\n", - " assert X.min() >= 0.0 and X.max() <= 1.0 and torch.all(torch.isfinite(Y))\n", + " assert X.min() >= 0.0\n", + " assert X.max() <= 1.0\n", + " assert torch.all(torch.isfinite(Y))\n", " if n_candidates is None:\n", " n_candidates = min(5000, max(2000, 200 * X.shape[-1]))\n", "\n", @@ -352,7 +343,7 @@ " X_next = thompson_sampling(X_cand, num_samples=batch_size)\n", "\n", " elif acqf == \"ei\":\n", - " ei = qExpectedImprovement(model, train_Y.max())\n", + " ei = qExpectedImprovement(model, Y.max())\n", " X_next, acq_value = optimize_acqf(\n", " ei,\n", " bounds=torch.stack([tr_lb, tr_ub]),\n", @@ -381,9 +372,8 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "metadata": { - "collapsed": false, "executionStartTime": 1674921567583, "executionStopTime": 1674921663734, "jupyter": { @@ -402,127 +392,107 @@ "52) Best value: -1.12e+01, TR length: 8.00e-01\n", "56) Best value: -1.04e+01, TR length: 8.00e-01\n", "60) Best value: -1.04e+01, TR length: 8.00e-01\n", - "64) Best value: -9.42e+00, TR length: 8.00e-01\n", - "68) Best value: -9.42e+00, TR length: 8.00e-01\n", - "72) Best value: -9.42e+00, TR length: 8.00e-01\n", - "76) Best value: -9.42e+00, TR length: 8.00e-01\n", + "64) Best value: -9.41e+00, TR length: 8.00e-01\n", + "68) Best value: -9.41e+00, TR length: 8.00e-01\n", + "72) Best value: -9.41e+00, TR length: 8.00e-01\n", + "76) Best value: -9.41e+00, TR length: 8.00e-01\n", "80) Best value: -8.75e+00, TR length: 8.00e-01\n", "84) Best value: -8.75e+00, TR length: 8.00e-01\n", "88) Best value: -8.75e+00, TR length: 8.00e-01\n", "92) Best value: -8.75e+00, TR length: 8.00e-01\n", - "96) Best value: -8.27e+00, TR length: 8.00e-01\n", - "100) Best value: -8.27e+00, TR length: 8.00e-01\n", - "104) Best value: -8.27e+00, TR length: 8.00e-01\n", - "108) Best value: -8.27e+00, TR length: 8.00e-01\n", - "112) Best value: -8.27e+00, TR length: 8.00e-01\n", - "116) Best value: -8.27e+00, TR length: 4.00e-01\n", - "120) Best value: -6.45e+00, TR length: 4.00e-01\n", - "124) Best value: -6.45e+00, TR length: 4.00e-01\n", - "128) Best value: -6.45e+00, TR length: 4.00e-01\n", - "132) Best value: -6.45e+00, TR length: 4.00e-01\n", - "136) Best value: -5.85e+00, TR length: 4.00e-01\n", - "140) Best value: -5.85e+00, TR length: 4.00e-01\n", - "144) Best value: -5.85e+00, TR length: 4.00e-01\n", - "148) Best value: -5.70e+00, TR length: 4.00e-01\n", - "152) Best value: -5.70e+00, TR length: 4.00e-01\n", - "156) Best value: -5.70e+00, TR length: 4.00e-01\n", - "160) Best value: -5.70e+00, TR length: 4.00e-01\n", - "164) Best value: -5.70e+00, TR length: 4.00e-01\n", - "168) Best value: -5.70e+00, TR length: 2.00e-01\n", - "172) Best value: -4.70e+00, TR length: 2.00e-01\n", - "176) Best value: -4.45e+00, TR length: 2.00e-01\n", - "180) Best value: -4.03e+00, TR length: 2.00e-01\n", - "184) Best value: -4.03e+00, TR length: 2.00e-01\n", - "188) Best value: -4.03e+00, TR length: 2.00e-01\n", - "192) Best value: -4.03e+00, TR length: 2.00e-01\n", - "196) Best value: -4.03e+00, TR length: 2.00e-01\n", - "200) Best value: -3.97e+00, TR length: 2.00e-01\n", - "204) Best value: -3.97e+00, TR length: 2.00e-01\n", - "208) Best value: -3.97e+00, TR length: 2.00e-01\n", - "212) Best value: -3.97e+00, TR length: 2.00e-01\n", - "216) Best value: -3.77e+00, TR length: 2.00e-01\n", - "220) Best value: -3.77e+00, TR length: 2.00e-01\n", - "224) Best value: -3.71e+00, TR length: 2.00e-01\n", - "228) Best value: -3.67e+00, TR length: 2.00e-01\n", - "232) Best value: -3.67e+00, TR length: 2.00e-01\n", - "236) Best value: -3.67e+00, TR length: 2.00e-01\n", - "240) Best value: -3.67e+00, TR length: 2.00e-01\n", - "244) Best value: -3.67e+00, TR length: 2.00e-01\n", - "248) Best value: -3.67e+00, TR length: 1.00e-01\n", - "252) Best value: -3.23e+00, TR length: 1.00e-01\n", - "256) Best value: -3.23e+00, TR length: 1.00e-01\n", - "260) Best value: -3.23e+00, TR length: 1.00e-01\n", - "264) Best value: -2.73e+00, TR length: 1.00e-01\n", - "268) Best value: -2.73e+00, TR length: 1.00e-01\n", - "272) Best value: -2.39e+00, TR length: 1.00e-01\n", - "276) Best value: -2.39e+00, TR length: 1.00e-01\n", - "280) Best value: -2.39e+00, TR length: 1.00e-01\n", - "284) Best value: -2.39e+00, TR length: 1.00e-01\n", - "288) Best value: -2.39e+00, TR length: 1.00e-01\n", - "292) Best value: -2.39e+00, TR length: 5.00e-02\n", - "296) Best value: -2.15e+00, TR length: 5.00e-02\n", - "300) Best value: -2.15e+00, TR length: 5.00e-02\n", - "304) Best value: -1.83e+00, TR length: 5.00e-02\n", - "308) Best value: -1.83e+00, TR length: 5.00e-02\n", - "312) Best value: -1.83e+00, TR length: 5.00e-02\n", - "316) Best value: -1.83e+00, TR length: 5.00e-02\n", - "320) Best value: -1.83e+00, TR length: 5.00e-02\n", - "324) Best value: -1.73e+00, TR length: 5.00e-02\n", - "328) Best value: -1.73e+00, TR length: 5.00e-02\n", - "332) Best value: -1.73e+00, TR length: 5.00e-02\n", - "336) Best value: -1.73e+00, TR length: 5.00e-02\n", - "340) Best value: -1.66e+00, TR length: 5.00e-02\n", - "344) Best value: -1.66e+00, TR length: 5.00e-02\n", - "348) Best value: -1.66e+00, TR length: 5.00e-02\n", - "352) Best value: -1.66e+00, TR length: 5.00e-02\n", - "356) Best value: -1.62e+00, TR length: 5.00e-02\n", - "360) Best value: -1.28e+00, TR length: 5.00e-02\n", - "364) Best value: -1.28e+00, TR length: 5.00e-02\n", - "368) Best value: -1.28e+00, TR length: 5.00e-02\n", - "372) Best value: -1.28e+00, TR length: 5.00e-02\n", - "376) Best value: -1.28e+00, TR length: 5.00e-02\n", - "380) Best value: -1.28e+00, TR length: 2.50e-02\n", - "384) Best value: -1.05e+00, TR length: 2.50e-02\n", - "388) Best value: -1.05e+00, TR length: 2.50e-02\n", - "392) Best value: -1.05e+00, TR length: 2.50e-02\n", - "396) Best value: -1.05e+00, TR length: 2.50e-02\n", - "400) Best value: -1.04e+00, TR length: 2.50e-02\n", - "404) Best value: -1.04e+00, TR length: 2.50e-02\n", - "408) Best value: -1.04e+00, TR length: 2.50e-02\n", - "412) Best value: -1.04e+00, TR length: 2.50e-02\n", - "416) Best value: -9.62e-01, TR length: 2.50e-02\n", - "420) Best value: -9.62e-01, TR length: 2.50e-02\n", - "424) Best value: -9.62e-01, TR length: 2.50e-02\n", - "428) Best value: -9.62e-01, TR length: 2.50e-02\n", - "432) Best value: -9.62e-01, TR length: 2.50e-02\n", - "436) Best value: -8.91e-01, TR length: 2.50e-02\n", - "440) Best value: -8.91e-01, TR length: 2.50e-02\n", - "444) Best value: -7.98e-01, TR length: 2.50e-02\n", - "448) Best value: -7.98e-01, TR length: 2.50e-02\n", - "452) Best value: -7.98e-01, TR length: 2.50e-02\n", - "456) Best value: -7.98e-01, TR length: 2.50e-02\n", - "460) Best value: -7.98e-01, TR length: 2.50e-02\n", - "464) Best value: -6.43e-01, TR length: 2.50e-02\n", - "468) Best value: -6.43e-01, TR length: 2.50e-02\n", - "472) Best value: -6.43e-01, TR length: 2.50e-02\n", - "476) Best value: -6.43e-01, TR length: 2.50e-02\n", - "480) Best value: -6.43e-01, TR length: 2.50e-02\n", - "484) Best value: -6.43e-01, TR length: 1.25e-02\n", - "488) Best value: -6.43e-01, TR length: 1.25e-02\n", - "492) Best value: -6.06e-01, TR length: 1.25e-02\n", - "496) Best value: -5.59e-01, TR length: 1.25e-02\n", - "500) Best value: -3.93e-01, TR length: 1.25e-02\n", - "504) Best value: -3.53e-01, TR length: 1.25e-02\n", - "508) Best value: -3.53e-01, TR length: 1.25e-02\n", - "512) Best value: -3.02e-01, TR length: 1.25e-02\n", - "516) Best value: -2.70e-01, TR length: 1.25e-02\n", - "520) Best value: -2.27e-01, TR length: 1.25e-02\n", - "524) Best value: -1.81e-01, TR length: 1.25e-02\n", - "528) Best value: -1.81e-01, TR length: 1.25e-02\n", - "532) Best value: -1.81e-01, TR length: 1.25e-02\n", - "536) Best value: -1.81e-01, TR length: 1.25e-02\n", - "540) Best value: -1.81e-01, TR length: 1.25e-02\n", - "544) Best value: -1.81e-01, TR length: 6.25e-03\n" + "96) Best value: -8.39e+00, TR length: 8.00e-01\n", + "100) Best value: -8.39e+00, TR length: 8.00e-01\n", + "104) Best value: -8.39e+00, TR length: 8.00e-01\n", + "108) Best value: -8.29e+00, TR length: 8.00e-01\n", + "112) Best value: -8.29e+00, TR length: 8.00e-01\n", + "116) Best value: -8.13e+00, TR length: 8.00e-01\n", + "120) Best value: -8.13e+00, TR length: 8.00e-01\n", + "124) Best value: -7.88e+00, TR length: 8.00e-01\n", + "128) Best value: -7.88e+00, TR length: 8.00e-01\n", + "132) Best value: -7.29e+00, TR length: 8.00e-01\n", + "136) Best value: -7.29e+00, TR length: 8.00e-01\n", + "140) Best value: -7.29e+00, TR length: 8.00e-01\n", + "144) Best value: -7.29e+00, TR length: 8.00e-01\n", + "148) Best value: -7.29e+00, TR length: 8.00e-01\n", + "152) Best value: -7.29e+00, TR length: 4.00e-01\n", + "156) Best value: -6.54e+00, TR length: 4.00e-01\n", + "160) Best value: -6.00e+00, TR length: 4.00e-01\n", + "164) Best value: -5.49e+00, TR length: 4.00e-01\n", + "168) Best value: -5.38e+00, TR length: 4.00e-01\n", + "172) Best value: -5.38e+00, TR length: 4.00e-01\n", + "176) Best value: -5.38e+00, TR length: 4.00e-01\n", + "180) Best value: -5.38e+00, TR length: 4.00e-01\n", + "184) Best value: -5.38e+00, TR length: 4.00e-01\n", + "188) Best value: -4.92e+00, TR length: 4.00e-01\n", + "192) Best value: -4.92e+00, TR length: 4.00e-01\n", + "196) Best value: -4.92e+00, TR length: 4.00e-01\n", + "200) Best value: -4.92e+00, TR length: 4.00e-01\n", + "204) Best value: -4.92e+00, TR length: 4.00e-01\n", + "208) Best value: -4.92e+00, TR length: 2.00e-01\n", + "212) Best value: -4.31e+00, TR length: 2.00e-01\n", + "216) Best value: -3.96e+00, TR length: 2.00e-01\n", + "220) Best value: -3.88e+00, TR length: 2.00e-01\n", + "224) Best value: -3.88e+00, TR length: 2.00e-01\n", + "228) Best value: -3.86e+00, TR length: 2.00e-01\n", + "232) Best value: -3.66e+00, TR length: 2.00e-01\n", + "236) Best value: -3.66e+00, TR length: 2.00e-01\n", + "240) Best value: -3.53e+00, TR length: 2.00e-01\n", + "244) Best value: -3.53e+00, TR length: 2.00e-01\n", + "248) Best value: -3.53e+00, TR length: 2.00e-01\n", + "252) Best value: -3.53e+00, TR length: 2.00e-01\n", + "256) Best value: -3.53e+00, TR length: 2.00e-01\n", + "260) Best value: -3.53e+00, TR length: 1.00e-01\n", + "264) Best value: -3.08e+00, TR length: 1.00e-01\n", + "268) Best value: -2.51e+00, TR length: 1.00e-01\n", + "272) Best value: -2.51e+00, TR length: 1.00e-01\n", + "276) Best value: -2.30e+00, TR length: 1.00e-01\n", + "280) Best value: -2.30e+00, TR length: 1.00e-01\n", + "284) Best value: -2.30e+00, TR length: 1.00e-01\n", + "288) Best value: -2.30e+00, TR length: 1.00e-01\n", + "292) Best value: -2.30e+00, TR length: 1.00e-01\n", + "296) Best value: -2.30e+00, TR length: 5.00e-02\n", + "300) Best value: -2.20e+00, TR length: 5.00e-02\n", + "304) Best value: -2.08e+00, TR length: 5.00e-02\n", + "308) Best value: -1.77e+00, TR length: 5.00e-02\n", + "312) Best value: -1.77e+00, TR length: 5.00e-02\n", + "316) Best value: -1.77e+00, TR length: 5.00e-02\n", + "320) Best value: -1.77e+00, TR length: 5.00e-02\n", + "324) Best value: -1.77e+00, TR length: 5.00e-02\n", + "328) Best value: -1.77e+00, TR length: 2.50e-02\n", + "332) Best value: -1.68e+00, TR length: 2.50e-02\n", + "336) Best value: -1.68e+00, TR length: 2.50e-02\n", + "340) Best value: -1.55e+00, TR length: 2.50e-02\n", + "344) Best value: -1.55e+00, TR length: 2.50e-02\n", + "348) Best value: -1.55e+00, TR length: 2.50e-02\n", + "352) Best value: -1.55e+00, TR length: 2.50e-02\n", + "356) Best value: -1.50e+00, TR length: 2.50e-02\n", + "360) Best value: -1.50e+00, TR length: 2.50e-02\n", + "364) Best value: -1.47e+00, TR length: 2.50e-02\n", + "368) Best value: -1.47e+00, TR length: 2.50e-02\n", + "372) Best value: -1.47e+00, TR length: 2.50e-02\n", + "376) Best value: -1.39e+00, TR length: 2.50e-02\n", + "380) Best value: -1.39e+00, TR length: 2.50e-02\n", + "384) Best value: -1.39e+00, TR length: 2.50e-02\n", + "388) Best value: -1.36e+00, TR length: 2.50e-02\n", + "392) Best value: -1.36e+00, TR length: 2.50e-02\n", + "396) Best value: -1.36e+00, TR length: 2.50e-02\n", + "400) Best value: -1.30e+00, TR length: 2.50e-02\n", + "404) Best value: -1.24e+00, TR length: 2.50e-02\n", + "408) Best value: -1.24e+00, TR length: 2.50e-02\n", + "412) Best value: -9.89e-01, TR length: 2.50e-02\n", + "416) Best value: -9.89e-01, TR length: 2.50e-02\n", + "420) Best value: -9.89e-01, TR length: 2.50e-02\n", + "424) Best value: -9.89e-01, TR length: 2.50e-02\n", + "428) Best value: -9.89e-01, TR length: 2.50e-02\n", + "432) Best value: -9.89e-01, TR length: 1.25e-02\n", + "436) Best value: -9.89e-01, TR length: 1.25e-02\n", + "440) Best value: -9.88e-01, TR length: 1.25e-02\n", + "444) Best value: -9.87e-01, TR length: 1.25e-02\n", + "448) Best value: -9.87e-01, TR length: 1.25e-02\n", + "452) Best value: -9.87e-01, TR length: 1.25e-02\n", + "456) Best value: -9.87e-01, TR length: 1.25e-02\n", + "460) Best value: -9.87e-01, TR length: 1.25e-02\n", + "464) Best value: -9.87e-01, TR length: 6.25e-03\n" ] } ], @@ -545,13 +515,9 @@ " train_Y = (Y_turbo - Y_turbo.mean()) / Y_turbo.std()\n", " likelihood = GaussianLikelihood(noise_constraint=Interval(1e-8, 1e-3))\n", " covar_module = ScaleKernel( # Use the same lengthscale prior as in the TuRBO paper\n", - " MaternKernel(\n", - " nu=2.5, ard_num_dims=dim, lengthscale_constraint=Interval(0.005, 4.0)\n", - " )\n", - " )\n", - " model = SingleTaskGP(\n", - " X_turbo, train_Y, covar_module=covar_module, likelihood=likelihood\n", + " MaternKernel(nu=2.5, ard_num_dims=dim, lengthscale_constraint=Interval(0.005, 4.0))\n", " )\n", + " model = SingleTaskGP(X_turbo, train_Y, covar_module=covar_module, likelihood=likelihood)\n", " mll = ExactMarginalLogLikelihood(model.likelihood, model)\n", "\n", " # Do the fitting and acquisition function optimization inside the Cholesky context\n", @@ -584,9 +550,7 @@ " Y_turbo = torch.cat((Y_turbo, Y_next), dim=0)\n", "\n", " # Print current status\n", - " print(\n", - " f\"{len(X_turbo)}) Best value: {state.best_value:.2e}, TR length: {state.length:.2e}\"\n", - " )" + " print(f\"{len(X_turbo)}) Best value: {state.best_value:.2e}, TR length: {state.length:.2e}\")" ] }, { @@ -605,9 +569,8 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "metadata": { - "collapsed": false, "executionStartTime": 1674921663896, "executionStopTime": 1674921754833, "jupyter": { @@ -621,132 +584,112 @@ "name": "stdout", "output_type": "stream", "text": [ - "44) Best value: -1.15e+01\n", - "48) Best value: -1.04e+01\n", - "52) Best value: -1.02e+01\n", - "56) Best value: -9.98e+00\n", - "60) Best value: -9.62e+00\n", - "64) Best value: -9.10e+00\n", - "68) Best value: -9.10e+00\n", - "72) Best value: -8.87e+00\n", - "76) Best value: -8.87e+00\n", - "80) Best value: -8.75e+00\n", - "84) Best value: -8.18e+00\n", - "88) Best value: -7.58e+00\n", - "92) Best value: -7.24e+00\n", - "96) Best value: -6.86e+00\n", - "100) Best value: -6.75e+00\n", - "104) Best value: -6.35e+00\n", - "108) Best value: -5.74e+00\n", - "112) Best value: -5.43e+00\n", - "116) Best value: -5.25e+00\n", - "120) Best value: -4.66e+00\n", - "124) Best value: -4.66e+00\n", - "128) Best value: -4.66e+00\n", - "132) Best value: -4.66e+00\n", - "136) Best value: -4.55e+00\n", - "140) Best value: -4.36e+00\n", - "144) Best value: -4.24e+00\n", - "148) Best value: -4.22e+00\n", - "152) Best value: -4.22e+00\n", - "156) Best value: -3.97e+00\n", - "160) Best value: -3.86e+00\n", - "164) Best value: -3.63e+00\n", - "168) Best value: -3.63e+00\n", - "172) Best value: -3.59e+00\n", - "176) Best value: -3.59e+00\n", - "180) Best value: -3.59e+00\n", - "184) Best value: -3.59e+00\n", - "188) Best value: -3.20e+00\n", - "192) Best value: -3.20e+00\n", - "196) Best value: -3.20e+00\n", - "200) Best value: -3.20e+00\n", - "204) Best value: -3.20e+00\n", - "208) Best value: -3.20e+00\n", - "212) Best value: -2.64e+00\n", - "216) Best value: -2.64e+00\n", - "220) Best value: -2.64e+00\n", - "224) Best value: -2.62e+00\n", - "228) Best value: -2.62e+00\n", - "232) Best value: -2.62e+00\n", - "236) Best value: -2.62e+00\n", - "240) Best value: -2.49e+00\n", - "244) Best value: -2.49e+00\n", - "248) Best value: -2.49e+00\n", - "252) Best value: -2.49e+00\n", - "256) Best value: -2.49e+00\n", - "260) Best value: -2.49e+00\n", - "264) Best value: -2.49e+00\n", - "268) Best value: -2.49e+00\n", - "272) Best value: -2.12e+00\n", - "276) Best value: -2.12e+00\n", - "280) Best value: -2.11e+00\n", - "284) Best value: -2.11e+00\n", - "288) Best value: -2.11e+00\n", - "292) Best value: -2.11e+00\n", - "296) Best value: -2.11e+00\n", - "300) Best value: -2.11e+00\n", - "304) Best value: -2.11e+00\n", - "308) Best value: -2.11e+00\n", - "312) Best value: -2.11e+00\n", - "316) Best value: -2.11e+00\n", - "320) Best value: -2.11e+00\n", - "324) Best value: -2.11e+00\n", - "328) Best value: -2.11e+00\n", - "332) Best value: -2.11e+00\n", - "336) Best value: -2.11e+00\n", - "340) Best value: -2.11e+00\n", - "344) Best value: -2.11e+00\n", - "348) Best value: -2.11e+00\n", - "352) Best value: -2.11e+00\n", - "356) Best value: -2.11e+00\n", - "360) Best value: -2.11e+00\n", - "364) Best value: -2.11e+00\n", - "368) Best value: -2.11e+00\n", - "372) Best value: -2.11e+00\n", - "376) Best value: -2.11e+00\n", - "380) Best value: -2.11e+00\n", - "384) Best value: -2.11e+00\n", - "388) Best value: -2.11e+00\n", - "392) Best value: -2.11e+00\n", - "396) Best value: -2.11e+00\n", - "400) Best value: -2.11e+00\n", - "404) Best value: -2.11e+00\n", - "408) Best value: -2.11e+00\n", - "412) Best value: -2.11e+00\n", - "416) Best value: -2.11e+00\n", - "420) Best value: -2.11e+00\n", - "424) Best value: -2.11e+00\n", - "428) Best value: -2.11e+00\n", - "432) Best value: -2.11e+00\n", - "436) Best value: -2.11e+00\n", - "440) Best value: -2.11e+00\n", - "444) Best value: -2.11e+00\n", - "448) Best value: -2.11e+00\n", - "452) Best value: -2.11e+00\n", - "456) Best value: -2.11e+00\n", - "460) Best value: -2.11e+00\n", - "464) Best value: -2.11e+00\n", - "468) Best value: -2.11e+00\n", - "472) Best value: -2.11e+00\n", - "476) Best value: -2.11e+00\n", - "480) Best value: -2.11e+00\n", - "484) Best value: -2.11e+00\n", - "488) Best value: -2.11e+00\n", - "492) Best value: -2.11e+00\n", - "496) Best value: -2.11e+00\n", - "500) Best value: -2.11e+00\n", - "504) Best value: -2.11e+00\n", - "508) Best value: -2.11e+00\n", - "512) Best value: -2.11e+00\n", - "516) Best value: -2.11e+00\n", - "520) Best value: -2.11e+00\n", - "524) Best value: -2.11e+00\n", - "528) Best value: -2.11e+00\n", - "532) Best value: -2.11e+00\n", - "536) Best value: -2.11e+00\n", - "540) Best value: -2.11e+00\n", - "544) Best value: -2.11e+00\n" + "44) Best value: -1.12e+01\n", + "48) Best value: -1.12e+01\n", + "52) Best value: -1.12e+01\n", + "56) Best value: -1.11e+01\n", + "60) Best value: -1.02e+01\n", + "64) Best value: -1.02e+01\n", + "68) Best value: -1.02e+01\n", + "72) Best value: -9.35e+00\n", + "76) Best value: -9.35e+00\n", + "80) Best value: -9.35e+00\n", + "84) Best value: -9.13e+00\n", + "88) Best value: -7.98e+00\n", + "92) Best value: -7.98e+00\n", + "96) Best value: -7.98e+00\n", + "100) Best value: -7.41e+00\n", + "104) Best value: -7.41e+00\n", + "108) Best value: -7.19e+00\n", + "112) Best value: -7.19e+00\n", + "116) Best value: -7.19e+00\n", + "120) Best value: -6.38e+00\n", + "124) Best value: -6.38e+00\n", + "128) Best value: -6.38e+00\n", + "132) Best value: -6.38e+00\n", + "136) Best value: -6.38e+00\n", + "140) Best value: -6.38e+00\n", + "144) Best value: -6.38e+00\n", + "148) Best value: -6.38e+00\n", + "152) Best value: -6.38e+00\n", + "156) Best value: -6.38e+00\n", + "160) Best value: -6.38e+00\n", + "164) Best value: -6.38e+00\n", + "168) Best value: -6.38e+00\n", + "172) Best value: -6.38e+00\n", + "176) Best value: -6.38e+00\n", + "180) Best value: -6.38e+00\n", + "184) Best value: -6.38e+00\n", + "188) Best value: -6.38e+00\n", + "192) Best value: -6.38e+00\n", + "196) Best value: -3.82e+00\n", + "200) Best value: -3.82e+00\n", + "204) Best value: -3.82e+00\n", + "208) Best value: -3.82e+00\n", + "212) Best value: -3.82e+00\n", + "216) Best value: -3.82e+00\n", + "220) Best value: -3.82e+00\n", + "224) Best value: -3.82e+00\n", + "228) Best value: -3.82e+00\n", + "232) Best value: -3.82e+00\n", + "236) Best value: -3.82e+00\n", + "240) Best value: -3.82e+00\n", + "244) Best value: -3.82e+00\n", + "248) Best value: -3.82e+00\n", + "252) Best value: -3.82e+00\n", + "256) Best value: -3.82e+00\n", + "260) Best value: -3.82e+00\n", + "264) Best value: -3.82e+00\n", + "268) Best value: -3.82e+00\n", + "272) Best value: -3.82e+00\n", + "276) Best value: -3.82e+00\n", + "280) Best value: -3.82e+00\n", + "284) Best value: -3.82e+00\n", + "288) Best value: -3.82e+00\n", + "292) Best value: -3.82e+00\n", + "296) Best value: -3.82e+00\n", + "300) Best value: -3.82e+00\n", + "304) Best value: -3.82e+00\n", + "308) Best value: -3.82e+00\n", + "312) Best value: -3.82e+00\n", + "316) Best value: -3.82e+00\n", + "320) Best value: -3.82e+00\n", + "324) Best value: -3.82e+00\n", + "328) Best value: -3.82e+00\n", + "332) Best value: -3.82e+00\n", + "336) Best value: -3.82e+00\n", + "340) Best value: -3.82e+00\n", + "344) Best value: -3.82e+00\n", + "348) Best value: -3.82e+00\n", + "352) Best value: -3.82e+00\n", + "356) Best value: -3.82e+00\n", + "360) Best value: -3.82e+00\n", + "364) Best value: -3.82e+00\n", + "368) Best value: -3.82e+00\n", + "372) Best value: -3.17e+00\n", + "376) Best value: -3.17e+00\n", + "380) Best value: -3.17e+00\n", + "384) Best value: -3.17e+00\n", + "388) Best value: -3.17e+00\n", + "392) Best value: -3.17e+00\n", + "396) Best value: -3.17e+00\n", + "400) Best value: -3.17e+00\n", + "404) Best value: -3.17e+00\n", + "408) Best value: -3.17e+00\n", + "412) Best value: -3.17e+00\n", + "416) Best value: -3.17e+00\n", + "420) Best value: -3.17e+00\n", + "424) Best value: -3.17e+00\n", + "428) Best value: -3.17e+00\n", + "432) Best value: -3.17e+00\n", + "436) Best value: -3.17e+00\n", + "440) Best value: -3.17e+00\n", + "444) Best value: -3.17e+00\n", + "448) Best value: -3.17e+00\n", + "452) Best value: -3.17e+00\n", + "456) Best value: -3.17e+00\n", + "460) Best value: -3.17e+00\n", + "464) Best value: -3.17e+00\n" ] } ], @@ -802,139 +745,119 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "44) Best value: -1.13e+01\n", - "48) Best value: -1.04e+01\n", - "52) Best value: -9.96e+00\n", - "56) Best value: -8.97e+00\n", - "60) Best value: -8.73e+00\n", - "64) Best value: -8.73e+00\n", - "68) Best value: -8.73e+00\n", - "72) Best value: -8.68e+00\n", - "76) Best value: -8.68e+00\n", - "80) Best value: -8.68e+00\n", - "84) Best value: -8.68e+00\n", - "88) Best value: -8.68e+00\n", - "92) Best value: -8.68e+00\n", - "96) Best value: -8.68e+00\n", - "100) Best value: -8.68e+00\n", - "104) Best value: -8.68e+00\n", - "108) Best value: -8.68e+00\n", - "112) Best value: -8.68e+00\n", - "116) Best value: -8.68e+00\n", - "120) Best value: -8.68e+00\n", - "124) Best value: -8.68e+00\n", - "128) Best value: -8.68e+00\n", - "132) Best value: -8.68e+00\n", - "136) Best value: -8.68e+00\n", - "140) Best value: -8.68e+00\n", - "144) Best value: -8.68e+00\n", - "148) Best value: -8.68e+00\n", - "152) Best value: -8.68e+00\n", - "156) Best value: -8.68e+00\n", - "160) Best value: -8.68e+00\n", - "164) Best value: -8.68e+00\n", - "168) Best value: -8.68e+00\n", - "172) Best value: -8.68e+00\n", - "176) Best value: -8.68e+00\n", - "180) Best value: -8.68e+00\n", - "184) Best value: -8.68e+00\n", - "188) Best value: -8.68e+00\n", - "192) Best value: -8.68e+00\n", - "196) Best value: -8.68e+00\n", - "200) Best value: -8.68e+00\n", - "204) Best value: -8.68e+00\n", - "208) Best value: -8.68e+00\n", - "212) Best value: -8.68e+00\n", - "216) Best value: -8.68e+00\n", - "220) Best value: -8.68e+00\n", - "224) Best value: -8.68e+00\n", - "228) Best value: -8.68e+00\n", - "232) Best value: -8.68e+00\n", - "236) Best value: -8.68e+00\n", - "240) Best value: -8.68e+00\n", - "244) Best value: -8.68e+00\n", - "248) Best value: -8.68e+00\n", - "252) Best value: -8.68e+00\n", - "256) Best value: -8.68e+00\n", - "260) Best value: -8.68e+00\n", - "264) Best value: -8.68e+00\n", - "268) Best value: -8.68e+00\n", - "272) Best value: -8.68e+00\n", - "276) Best value: -8.68e+00\n", - "280) Best value: -8.68e+00\n", - "284) Best value: -8.68e+00\n", - "288) Best value: -8.68e+00\n", - "292) Best value: -8.68e+00\n", - "296) Best value: -8.68e+00\n", - "300) Best value: -8.68e+00\n", - "304) Best value: -8.68e+00\n", - "308) Best value: -8.68e+00\n", - "312) Best value: -8.68e+00\n", - "316) Best value: -8.68e+00\n", - "320) Best value: -8.68e+00\n", - "324) Best value: -8.68e+00\n", - "328) Best value: -8.68e+00\n", - "332) Best value: -8.68e+00\n", - "336) Best value: -8.68e+00\n", - "340) Best value: -8.68e+00\n", - "344) Best value: -8.68e+00\n", - "348) Best value: -8.68e+00\n", - "352) Best value: -8.68e+00\n", - "356) Best value: -8.68e+00\n", - "360) Best value: -8.68e+00\n", - "364) Best value: -8.68e+00\n", - "368) Best value: -8.68e+00\n", - "372) Best value: -8.68e+00\n", - "376) Best value: -8.68e+00\n", - "380) Best value: -8.68e+00\n", - "384) Best value: -8.68e+00\n", - "388) Best value: -8.68e+00\n", - "392) Best value: -8.68e+00\n", - "396) Best value: -8.68e+00\n", - "400) Best value: -8.68e+00\n", - "404) Best value: -8.68e+00\n", - "408) Best value: -8.68e+00\n", - "412) Best value: -8.68e+00\n", - "416) Best value: -8.68e+00\n", - "420) Best value: -8.68e+00\n", - "424) Best value: -8.68e+00\n", - "428) Best value: -8.68e+00\n", - "432) Best value: -8.68e+00\n", - "436) Best value: -8.68e+00\n", - "440) Best value: -8.68e+00\n", - "444) Best value: -8.68e+00\n", - "448) Best value: -8.68e+00\n", - "452) Best value: -8.68e+00\n", - "456) Best value: -8.68e+00\n", - "460) Best value: -8.68e+00\n", - "464) Best value: -8.68e+00\n", - "468) Best value: -8.68e+00\n", - "472) Best value: -8.68e+00\n", - "476) Best value: -8.68e+00\n", - "480) Best value: -8.68e+00\n", - "484) Best value: -8.68e+00\n", - "488) Best value: -8.68e+00\n", - "492) Best value: -8.68e+00\n", - "496) Best value: -8.68e+00\n", - "500) Best value: -8.68e+00\n", - "504) Best value: -8.68e+00\n", - "508) Best value: -8.68e+00\n", - "512) Best value: -8.68e+00\n", - "516) Best value: -8.68e+00\n", - "520) Best value: -8.68e+00\n", - "524) Best value: -8.68e+00\n", - "528) Best value: -8.68e+00\n", - "532) Best value: -8.68e+00\n", - "536) Best value: -8.68e+00\n", - "540) Best value: -8.68e+00\n", - "544) Best value: -8.68e+00\n" + "44) Best value: -1.06e+01\n", + "48) Best value: -1.06e+01\n", + "52) Best value: -1.06e+01\n", + "56) Best value: -1.06e+01\n", + "60) Best value: -1.01e+01\n", + "64) Best value: -9.93e+00\n", + "68) Best value: -9.93e+00\n", + "72) Best value: -9.93e+00\n", + "76) Best value: -9.79e+00\n", + "80) Best value: -9.79e+00\n", + "84) Best value: -9.79e+00\n", + "88) Best value: -9.79e+00\n", + "92) Best value: -9.79e+00\n", + "96) Best value: -9.79e+00\n", + "100) Best value: -9.79e+00\n", + "104) Best value: -9.79e+00\n", + "108) Best value: -9.79e+00\n", + "112) Best value: -9.79e+00\n", + "116) Best value: -9.79e+00\n", + "120) Best value: -9.79e+00\n", + "124) Best value: -8.07e+00\n", + "128) Best value: -8.07e+00\n", + "132) Best value: -8.07e+00\n", + "136) Best value: -8.07e+00\n", + "140) Best value: -8.07e+00\n", + "144) Best value: -8.07e+00\n", + "148) Best value: -8.07e+00\n", + "152) Best value: -8.07e+00\n", + "156) Best value: -8.07e+00\n", + "160) Best value: -8.07e+00\n", + "164) Best value: -8.07e+00\n", + "168) Best value: -8.07e+00\n", + "172) Best value: -8.07e+00\n", + "176) Best value: -8.07e+00\n", + "180) Best value: -8.07e+00\n", + "184) Best value: -8.07e+00\n", + "188) Best value: -8.07e+00\n", + "192) Best value: -8.07e+00\n", + "196) Best value: -8.07e+00\n", + "200) Best value: -8.07e+00\n", + "204) Best value: -8.07e+00\n", + "208) Best value: -8.07e+00\n", + "212) Best value: -8.07e+00\n", + "216) Best value: -8.07e+00\n", + "220) Best value: -8.07e+00\n", + "224) Best value: -8.07e+00\n", + "228) Best value: -8.07e+00\n", + "232) Best value: -8.07e+00\n", + "236) Best value: -8.07e+00\n", + "240) Best value: -8.07e+00\n", + "244) Best value: -8.07e+00\n", + "248) Best value: -8.07e+00\n", + "252) Best value: -8.07e+00\n", + "256) Best value: -8.07e+00\n", + "260) Best value: -8.07e+00\n", + "264) Best value: -8.07e+00\n", + "268) Best value: -8.07e+00\n", + "272) Best value: -8.07e+00\n", + "276) Best value: -8.07e+00\n", + "280) Best value: -8.07e+00\n", + "284) Best value: -8.07e+00\n", + "288) Best value: -8.07e+00\n", + "292) Best value: -8.07e+00\n", + "296) Best value: -8.07e+00\n", + "300) Best value: -8.07e+00\n", + "304) Best value: -8.07e+00\n", + "308) Best value: -8.07e+00\n", + "312) Best value: -8.07e+00\n", + "316) Best value: -8.07e+00\n", + "320) Best value: -8.07e+00\n", + "324) Best value: -8.07e+00\n", + "328) Best value: -8.07e+00\n", + "332) Best value: -8.07e+00\n", + "336) Best value: -8.07e+00\n", + "340) Best value: -8.07e+00\n", + "344) Best value: -8.07e+00\n", + "348) Best value: -8.07e+00\n", + "352) Best value: -8.07e+00\n", + "356) Best value: -8.07e+00\n", + "360) Best value: -8.07e+00\n", + "364) Best value: -8.07e+00\n", + "368) Best value: -8.07e+00\n", + "372) Best value: -8.07e+00\n", + "376) Best value: -8.07e+00\n", + "380) Best value: -8.07e+00\n", + "384) Best value: -8.07e+00\n", + "388) Best value: -8.07e+00\n", + "392) Best value: -8.07e+00\n", + "396) Best value: -8.07e+00\n", + "400) Best value: -8.07e+00\n", + "404) Best value: -8.07e+00\n", + "408) Best value: -8.07e+00\n", + "412) Best value: -8.07e+00\n", + "416) Best value: -8.07e+00\n", + "420) Best value: -8.07e+00\n", + "424) Best value: -8.07e+00\n", + "428) Best value: -8.07e+00\n", + "432) Best value: -8.07e+00\n", + "436) Best value: -8.07e+00\n", + "440) Best value: -8.07e+00\n", + "444) Best value: -8.07e+00\n", + "448) Best value: -8.07e+00\n", + "452) Best value: -8.07e+00\n", + "456) Best value: -8.07e+00\n", + "460) Best value: -8.07e+00\n", + "464) Best value: -8.07e+00\n" ] } ], @@ -942,41 +865,44 @@ "torch.manual_seed(0)\n", "\n", "X_ei = get_initial_points(dim, n_init)\n", - "Y_ei = torch.tensor(\n", - " [eval_objective(x) for x in X_ei], dtype=dtype, device=device\n", - ").unsqueeze(-1)\n", + "Y_ei = torch.tensor([eval_objective(x) for x in X_ei], dtype=dtype, device=device).unsqueeze(-1)\n", "\n", - "while len(Y_ei) < len(Y_turbo):\n", - " train_Y = (Y_ei - Y_ei.mean()) / Y_ei.std()\n", - " likelihood = GaussianLikelihood(noise_constraint=Interval(1e-8, 1e-3))\n", - " model = SingleTaskGP(X_ei, train_Y, likelihood=likelihood)\n", - " mll = ExactMarginalLogLikelihood(model.likelihood, model)\n", - " fit_gpytorch_mll(mll)\n", - "\n", - " # Create a batch\n", - " ei = qExpectedImprovement(model, train_Y.max())\n", - " candidate, acq_value = optimize_acqf(\n", - " ei,\n", - " bounds=torch.stack(\n", - " [\n", - " torch.zeros(dim, dtype=dtype, device=device),\n", - " torch.ones(dim, dtype=dtype, device=device),\n", - " ]\n", - " ),\n", - " q=batch_size,\n", - " num_restarts=NUM_RESTARTS,\n", - " raw_samples=RAW_SAMPLES,\n", + "with warnings.catch_warnings():\n", + " warnings.filterwarnings(\n", + " \"ignore\",\n", + " message=\"qExpectedImprovement has known numerical issues\"\n", " )\n", - " Y_next = torch.tensor(\n", - " [eval_objective(x) for x in candidate], dtype=dtype, device=device\n", - " ).unsqueeze(-1)\n", + " while len(Y_ei) < len(Y_turbo):\n", + " train_Y = (Y_ei - Y_ei.mean()) / Y_ei.std()\n", + " likelihood = GaussianLikelihood(noise_constraint=Interval(1e-8, 1e-3))\n", + " model = SingleTaskGP(X_ei, train_Y, likelihood=likelihood)\n", + " mll = ExactMarginalLogLikelihood(model.likelihood, model)\n", + " fit_gpytorch_mll(mll)\n", "\n", - " # Append data\n", - " X_ei = torch.cat((X_ei, candidate), axis=0)\n", - " Y_ei = torch.cat((Y_ei, Y_next), axis=0)\n", + " # Create a batch\n", + " ei = qExpectedImprovement(model, train_Y.max())\n", + " candidate, acq_value = optimize_acqf(\n", + " ei,\n", + " bounds=torch.stack(\n", + " [\n", + " torch.zeros(dim, dtype=dtype, device=device),\n", + " torch.ones(dim, dtype=dtype, device=device),\n", + " ]\n", + " ),\n", + " q=batch_size,\n", + " num_restarts=NUM_RESTARTS,\n", + " raw_samples=RAW_SAMPLES,\n", + " )\n", + " Y_next = torch.tensor(\n", + " [eval_objective(x) for x in candidate], dtype=dtype, device=device\n", + " ).unsqueeze(-1)\n", "\n", - " # Print current status\n", - " print(f\"{len(X_ei)}) Best value: {Y_ei.max().item():.2e}\")" + " # Append data\n", + " X_ei = torch.cat((X_ei, candidate), axis=0)\n", + " Y_ei = torch.cat((Y_ei, Y_next), axis=0)\n", + "\n", + " # Print current status\n", + " print(f\"{len(X_ei)}) Best value: {Y_ei.max().item():.2e}\")" ] }, { @@ -991,9 +917,8 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "metadata": { - "collapsed": false, "executionStartTime": 1674921754972, "executionStopTime": 1674921755010, "jupyter": { @@ -1004,14 +929,10 @@ }, "outputs": [], "source": [ - "X_Sobol = (\n", - " SobolEngine(dim, scramble=True, seed=0)\n", - " .draw(len(X_turbo))\n", - " .to(dtype=dtype, device=device)\n", - ")\n", - "Y_Sobol = torch.tensor(\n", - " [eval_objective(x) for x in X_Sobol], dtype=dtype, device=device\n", - ").unsqueeze(-1)" + "X_Sobol = SobolEngine(dim, scramble=True, seed=0).draw(len(X_turbo)).to(dtype=dtype, device=device)\n", + "Y_Sobol = torch.tensor([eval_objective(x) for x in X_Sobol], dtype=dtype, device=device).unsqueeze(\n", + " -1\n", + ")" ] }, { @@ -1026,9 +947,8 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "metadata": { - "collapsed": false, "executionStartTime": 1674921755158, "executionStopTime": 1674921757156, "jupyter": { @@ -1040,7 +960,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA+IAAAKBCAYAAADTDRELAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy80BEi2AAAACXBIWXMAAA9hAAAPYQGoP6dpAACk+UlEQVR4nOzdd5hU1f3H8c/M7mxn+7K0pQlSBZEmEgNIsUeNBREFrFE00aBG/GlEEhWNJcZuEgU7tphEbCDFiihN6Yj0snS2lyn398dmx71Tts5O2Xm/nmcf55577rnfGc5e57vn3HMthmEYAgAAAAAAQWENdQAAAAAAAEQTEnEAAAAAAIKIRBwAAAAAgCAiEQcAAAAAIIhIxAEAAAAACCIScQAAAAAAgohEHAAAAACAICIRBwAAAAAgiEjEAQAAAAAIIhJxAAAQEnPmzJHFYpHFYtGUKVOa3F51WxaLpenBAQDQjEjEAQBhb/v27frHP/6hyy+/XP3791dGRoZsNpsyMzPVr18//eY3v9Fnn33W6Pa/++47TZ06Vb1791ZqaqpSU1PVu3dvTZ06Vd999129Y6yZCNb8sVqtatWqlTp06KA+ffro3HPP1b333qt58+apvLy80XE31uWXX26K76GHHgp6DAAARDOLYRhGqIMAAMCXVatW6frrr9e3335br/ojR47USy+9pI4dO9arfmVlpW6//XY9+eST8ve/Q4vFoptvvll/+ctfZLPZ/La1fft2denSpV7nrSkzM1OTJk3StGnTlJeX1+DjG6qoqEht2rRRaWmpu6xXr15av359s5/b05w5c3TllVdKkiZPnqw5c+Y0qb2aI+F8vQEAhLPYUAcAAIA/mzZt8krCjz/+ePXt21fZ2dk6duyYvv76a+3evVuStGTJEg0bNkxffPGFunbtWmf71157rV5++WX3dteuXXXyySdLkr755htt3bpVhmHo8ccfV2FhoV544YV6xz5p0iS1atXKvV1ZWamjR4/qwIEDWrVqlYqKiiRJR44c0eOPP67Zs2fr6aef1sSJE+t9jsZ4++23TUm4JG3YsEHfffedBg8e3KznBgAAVUjEAQBhr1u3brrmmmt0+eWXq3379qZ9LpdLc+bM0W9/+1uVlpZq7969mjhxor7++uta7xV+8cUX3Um41WrVo48+qt/97neyWq3udp944gndeuutcrlcevHFFzVixAhNmjSpXjHPnDlTnTt39rnP5XJp5cqVeuqpp/T666/LbreroKBAl19+ufbt26fbbrutXudojJdeesn9OjExUWVlZe5yEnEAAIKDe8QBAGGrbdu2mj17tjZu3Kg77rjDKwmXqpLoq666Sq+++qq77JtvvtH8+fP9tltRUaF7773Xvf2HP/xBt9xyizsJr273lltu0e233+4uu+eee1RZWdnEd1XV9qBBgzRnzhx99dVXpqn0d9xxhz744IMmn8OXbdu26YsvvpBUNY37kUcece974403AvLeAABA3UjEAQBha8SIEZoyZYpiYmLqrHvBBRdoyJAh7u3aktn//ve/2rVrlyQpLS1Nf/zjH/3Wveeee5SamipJ2rFjR8CT5MGDB2vRokXuc7hcLt1yyy1yOp0BPY8kvfzyy+57p0eMGKHrrrtOOTk5kqqmyM+bNy/g5wQAAN5IxAEALcbw4cPdr7dv3+633r///W/36/HjxyspKclv3aSkJF1yySXu7ffee69JMfpy3HHHmUant2zZorfeeiug5zAMw3Q//BVXXKHY2Fhdeuml7rKa09bry+l06q233tKkSZPUo0cP94r2WVlZGjp0qG6++WYtXLiwyYun7dy5Uz179nSv9D506FAdPny4SW2WlJTo2Wef1bnnnqtOnTopKSlJrVq1Uvfu3XXVVVdp0aJFfo9dtWqVO5aMjIx6r35fVFSklJQU97E//PBDk94DACAykYgDAFqMmveE1zaivHjxYvfrkSNH1tnuqFGj3K9rS86aYtKkSe7RaUmaO3duQNv/8ssvtXXrVklSQkKCLrroIklVCXm1jz76SAcPHqx3m1988YV69+6t8ePH65VXXtHmzZt17NgxORwOHTlyRN9++62eeOIJjRkzRnfeeWejY1+3bp1OOeUUbdq0SZI0duxYLVq0SFlZWY1u8+2331a3bt00depUzZs3Tzt37lRZWZmKi4u1ZcsWzZ49W6NHj9a5556rgoICr+MHDBiggQMHSpKOHTumd999t17nffPNN1VSUiKpajZEv379Gv0eAACRi0QcANBirFmzxv3a36PACgoKtG/fPvf2SSedVGe7Nevs2bNHhYWFTYjSt/j4eJ177rnu7S+//DKgj+CqOdp93nnnuafCDx48WD179pQk2e12vf766/Vqb+7cuRo9erQ2b97sLjv+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XrRoUZNi9FSdjP/mN7+RVDUVPJDJeM17zqv7USD5GhWvOTp+5ZVXNuk56ACAFsQAACDMVVZWGmeddZYhyZBkxMfHGwsWLGh0e2+99Za7rfT0dKO0tNRv3dLSUiM9Pd1d/9133/VZb9u2be46koxt27bVO54tW7YYqamp7mN79eplOJ3Ohr4tk1/96lfu9s4999wGHdu3b1/3sXfddZdp37Jly9z7LBaLsX79+kbHOHv2bHdbkydPdpe7XC7jN7/5jXtfbGys8dZbb9XZXs3P35c333zTvb9t27ZGWVlZo2P35ejRo0ZiYqIhyUhJSTF27dplJCQkGJIMq9Vq7Ny5M6DnAwBELv4sCwAIa9X3C1c/Azo2NlZvvfVWk6b4/upXv1KHDh0kSceOHdP999/vt+6f//xn96JlnTp1Mt1HHQjLly/XaaedpsLCQklSTEyMHn/88SaNnB48eFAfffSRe/vyyy9v0PE167/yyisyDMO9PWTIEA0fPlxS1f3PkyZNCui94lLVyPizzz6r6667TlLVyPhll12mt99+u0ntXnjhherWrZukqlX3p06danpvtSkuLlZJSUmtddLT03XJJZe461900UXuxQDHjRunvLy8JkQPAGhJSMQBAGHLMAxdffXVeueddyRJVqtVr7zyin71q181qd34+HjNnDnTvT1r1iw98cQT7pWtJcnlcumJJ57QQw895C7705/+pLi4uCadu7rt5cuX68orr9Tw4cNNi8H99a9/1bhx45rU/uuvvy673S6panG1c889t0HHT5gwQRaLRVLVQnWLFy827X/iiScUHx8vqeoPCb/85S9NC83VlJ+fr0ceeUQPP/xwg2KwWCx67rnnApqMx8TE6Nlnn1VMTIwkafbs2Tr77LPdK8v7snr1at1xxx3Ky8ur1z3xNaen1/xMWKQNAFCTxajvn4IBAAiyZ555RjfeeKN7u3v37g1KUp966qla90+aNEmvvPKKe/u4445z3wP9zTffuB+PJlXd3/viiy/6bWv79u2mldsnTZpkWmG8srJSx44d08GDB7Vy5Ur3CHi1jIwMPfvss+7HYDXFSSed5F6EbvLkyZozZ06D2xgxYoQ+//xzSVXvxXPhttdee01TpkwxPdKrR48eGjBggNLS0lRQUKD169dr7dq1crlcuvnmm/X444+b2pgzZ46uvPLKWuM0DEO/+c1v9I9//ENS1YyIN954QxdddJFX3eo/HlQf588//vEP3XDDDXI6ne7jevfurX79+ik1NVWlpaXat2+fvv/+ex08eNB93Jo1a9S3b1+/7Vbr27eve1V/SWrdurV2795tekQbACDKhW5WPAAAtZsxY4bpvt+G/tSloqLCuOmmmwyLxeK3DYvFYvzud78zKisra23L8x7x+v5kZWUZ06ZNM3bv3h2Qz+yHH34wtd/Ye+n//ve/u9tITk42ioqKvOosXLjQ6NKlS73ep+e95obh/x5xTy6Xy7j22mtN94y//fbbXvUa8m+/aNEio3v37vX+d+rTp4+xZ8+eOts1DMN4/PHHTcfedttt9ToOABA9YpuWxgMAELni4uL05JNP6oorrtCLL76oJUuWaM+ePZKqHlM2cuRIXX311aaVxBsrOTlZaWlpSktLU9euXTVo0CANGTJEo0ePdk/zDoSaI9dt27Zt9CrvF110kX7729+qoqJCJSUleueddzRlyhRTndNOO02bNm3S3LlzNW/ePC1fvlwHDhxQRUWF0tLS1K1bNw0bNkwXXHBBkx7HZrFY9Pzzz0uqGs12OByaMGGCO87GGDVqlDZs2KB///vf+uCDD/TNN98oPz9fhYWFSkpKUm5urnr27KlTTjlFZ555pk488cR6t/3rX/9at9xyi3ubaekAAE9MTQcAAAigl156yf1Hi1/84hf64osvQhsQACDssFgbAABAANV8dnjNxdsAAKjGiDgAAECArFq1SieddJIkKTMzU3v27FFCQkKIowIAhBtGxAEAAAKgvLxcv/3tb93b119/PUk4AMAnRsQBAAAa6amnntKWLVt07NgxLVy4ULt375YkZWdna9OmTcrMzAxxhACAcMSq6QAAAI30zjvv6LPPPjOVxcTE6IUXXiAJBwD4RSKOZuFyubR37161atVKFosl1OEAANAsnE6n+3V6erqGDh2qadOm6eSTT1ZhYWEIIwPQkhmGoaKiIrVr105WK3cbRyKmpqNZ7N69W3l5eaEOAwAAAGixdu3apQ4dOoQ6DDQCI+JoFq1atZIkbdu2jal5MLHb7Zo/f77GjRsnm80W6nAQJugX8IV+AX/oG/AlmvpFYWGh8vLy3N+5EXlIxNEsqqejt2rVSqmpqSGOBuHEbrcrKSlJqampLf5/kqg/+gV8oV/AH/oGfInGfsEtoJGL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ajzxxBPuxOLuu+820tLSjPHjx7uTvaKiIuOuu+5yt7FgwQKvc1cnXGlpaUZ8fLzx3HPPGWVlZYZhVCVGF110kfv4//znP17H//Of/3Qnnffff7+xb98+wzAMw+FwGMuXLzdOO+00Q5LRoUMHo6ioyOfnXJ2k3HHHHcaBAwcMwzCM8vJyr6TVH4fDYQwdOtT9Pl599VWjoqLCMAzD+Omnn4xzzjnHnYx9+OGHXsfPnj3b9O/dGHfffbchyWjdurXx9NNPG4cPHzYMwzAqKyuNxYsXGwMGDDAkGSeddJLhdDrdxy1btsz9+W7YsMFn2zt27HAngIsWLTLt+/Of/2w8/PDDxpo1awy73W4YRtUfBdauXWtMnDjRkGQkJycbe/bs8Wq3ORPx559/3pgxY4axfPly97+Fy+Uytm7datx8882GxWIxYmJi6vwDTW1qS8SffPJJ9+d63XXXuftlcXGx8de//tX9xwpff6CqPn96erphtVqNO++80zh48KBhGIZRUFBg3HPPPe62X3jhBdOx27dvd/9Ratq0aabP/dixY8YXX3xhTJ061Vi+fHmt7w0A4B+JOAC0UJ6JuGEYxgUXXGBIMk488UTD5XK5y4OViPfp08coLy/3OvaKK65w1xk7dqwptmrVI91XX321177qhMtXUmEYVUndL3/5S3cMNRUWFrpHzj/++GOf781utxsDBw40JBl//etfTftqjppOmzbN5/H1MXfuXHc7n3zyic8YqhP1vn37eu1vaiK+bds2IyYmxkhMTDRWr17ts05hYaHRoUMHQ5Lx3nvvmfb16NHDPSvBlwceeMCQZHTs2NHnv29tzj77bEOS8ec//9lrX3Mm4nWpngngq082NREvLS01MjMzDUnGhAkTfB77xBNPuPuMZ1Jcs1/6e/+//vWvDUnGmDFjTOVvvvmmIck4/vjja40dANB43CMOAFHkgQceUExMjFavXq033ngj6Of//e9/r/j4eK/y008/3f16+vTpslgsfuv88MMPftvPy8vTlVde6VVutVp19913S5LWrVvnXmFcqrqn+9ixYxowYIApjppiY2M1YcIESVX3zfpitVp1xx13+I2tLm+++aYkadiwYRo3bpzPGGbMmCGp6l72mu8hEObMmSOn06kzzjhD/fv391mnVatWOv/88yV5fw5XXHGFJOm1116TYRhex77yyiuSpIkTJ/r8963N2WefLUn68ssvG3Rcc2vOuBYsWOC+B9vfPe5Tp051P/bs9ddf91knPj5et912m8995513niTv36n09HRJUlFRkWntBgBA4JCIA0AU6dmzpztR/eMf/1ivxc8CaciQIT7Lc3Nz3a8HDx5ca52jR4/6bb96cS5fTj31VMXGxkqSli9f7i7/6quvJEkbNmxQmzZt/P786U9/klS1GJov3bp1U+vWrf3GVpfqmMaMGeO3zqhRoxQTE+P1HgKh+nOYP39+rZ/D7NmzJXl/DldccYUsFot27typzz77zLRvxYoV2rBhgyRp0qRJPs///fffa+rUqerXr59SU1NltVrdi5tNnTpVkrR79+6Avuf62Lp1q2677TYNHDhQ6enpiomJccd11llnNVtc1f++eXl5Ov74433WiYmJ0WmnnWaq76lPnz5+V9Jv166dJHktujZkyBBlZ2dr3759Gjp0qJ566ilt3LjR5x9YAACNExvqAAAAwXXvvffqtdde09atW/Xcc8/pt7/9bdDO3apVK5/l1QlyferU9seD9u3b+92XkJCgrKws7d+/XwcOHHCX7927V1LVauW1rSBdreZq3zU1JQmX5I6prveQnZ3t9R4CofpzKCkpqdcoqOfn0LFjR40YMUJLlizRK6+8YlqFvHo0fPDgwerZs6dXW0899ZRuvvlmuVwuSZLFYlFaWpp79kRZWZkKCwuDPjr73nvvacKECaqoqHCXpaamKiEhQRaLRZWVlTp69GizxFWf/iBJHTp0MNX35O/3Sfr5d8rhcJjK09PT9cYbb+iyyy7TunXr3NeItLQ0/fKXv9Qll1yi8ePHy2az1e/NAAC8MCIOAFGmffv27i/W9913n9fjqKJN9eOfxo8fL6Nq7ZRaf/w9wq16pDpSVX8Od9xxR70+hyVLlni1UT3a/c4776isrExSVZJXfRtE9fT1mjZs2KBbbrlFLpdLF198sb799luVl5fr6NGjys/PV35+vh577DFJCuqI7OHDhzVlyhRVVFTotNNO05IlS1RaWqqCggLt379f+fn5evvtt4MWT7CNGTNG27Zt08svv6zJkyere/fuKigo0Pvvv68rrrhCAwYM0J49e0IdJgBELBJxAIhC06dPV0ZGhg4cOKBHH3201ro1R6trGzEuKCgIWHyNVVtiUFFRocOHD0syj163adNGkv8p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", + "image/png": "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wf/5558l1oLNB94a1oWCYBcxdDo0ayz4k08+6bdex45bvRL0Ykd5eXmbygEASH0E4gCAlKLBs3ZXXrhwobmsQY0G4X379o0qM3kkAZ9OjRZuH7GiidAs2qLav3//mLWG65jrPn36mAF5qNuRRx7p3V4vUARrNfbN9B3LpHUnnHCCd6y/dlPXMdzBkqO1he/c4zo9mb4nrbmtWLEi5L59k7b5dkPXx+mUaBaStAEAFIE4ACBlaNdf7S791Vdfebswa3f01iQM08f4tpzrdF0t0aDN0r1795iM3Q6kge/rr7/uXd5///3btD8d/65zebdFsOzp1nRe1hj9WNELAX/729/8gnFtwY9lMO5bdmtIQ6zss88+Zo4Cpb0QrPHoc+fO9c4vrtnpQ81vDwDILATiAICUoIHqr3/9a+/UWTr38xtvvCEjR45s9b58k4y99957LW7vm9TLN4t2LGl35s2bN3uXTz755DbtT4N6a75zna5Mx1tHctMs4BYNJpctW9Ys4LTMmTNHYskKxs8991xvV/BYBuO+Y86tehRLwVrFfVvHzzjjjDbNgw4ASCMGAABJrqGhwZg0aZKhP1t6y83NNWbPnh31/l544QXvvkpLS42ampqQ2+o63cba/uWXXw663fLly73b6E2XI/XDDz8YxcXF3scOGTLEcLvdRlv8+te/9u7vV7/6VaseO2zYMO9jr732Wr91n332mXedw+EwFi1aFHUZH3vsMe++Jk+e7L3f4/EY5557rndddna2+Zm1xPf9D+b555/3ru/atatRW1trxNK2bduM/Px8c/9FRUXGqlWrjLy8PHPZ6XQaK1eujOnzAQBSF5dlAQBJzRovbM0Bra272kLali6+2rLeo0cP8/+akOyWW24Jue3NN9/sTVqmXYt9x1HHah50bWXXse8qKytL7r333ja1nGrW7lmzZnmXTzvttFY93nf7f/3rX+Y4Z8vee+8t++67r/l/vV8zgMdyrLjVMv7ggw+a04JZLeNaB1588cU27fe4446TAQMGeLPu65Rjvq8tHH2NOjQinNLSUjnxxBO92+uUcFYywEMOOUR69uzZpvIDANIHgTgAIGlpkKRzLr/00kvmsganGhhqIN0Wubm5Mm3aNO/y9OnT5b777vNmtlb6f71vxowZ3vv+9Kc/mdNPtZXuWwNw7aqsQa1vMrh77rnHDNra4pln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fXpV7uCDD5ZPPvkk6FU/vVnacgVQ6RXlaK/+RrvfaK+OWy0Cid5vND0NfMuU6P1G20pgSfR+tfWorfsNtu947bet3xctVyL321YcI1reL8eI+O6XY0R899tWHCNa3i/HiMw8RiB5EIgjZLctPTB17tzZ735dXrJkSbPtp0+fLtOmTYvZ8y9cuFBmzpwZdF20XS3V999/H3K/bemW9PPPP4fcb1u67K1fvz7kfnVdtLRMofarryVa+h6G2q++99HSzzzUfrWutEWo/X799ddt2u8777wTtDvgggUL2rTfDz/8MOhntHLlyjbt99NPPzW7/QVqSzd6633ULoyxxjFiJ44RO3GM+AXHiJ04RuzEMWInjhFIRgTiiAltOdfx5L4t4j179ox6f7vuuqtMmjQp6LpgY9QiNXDgwJD79W39b63evXuH3O/dd98d9X67dOkScr9PPvlkm8Ydhdrvm2++2aYxeaH2++WXX0a9X/3MQ+23LT/4KtR+ox2HZtHeI8HGjYUaWxip/fff3/x+xPpEYp999pFx48bFdIymGjFiRMj3uC04RuzEMWInjhG/4BixE8eInThG7MQxAsnIof3T7S4Eko9eOdQr1C+99JIcffTR3vsnT55sJg157bXXwj5eA3G9iqet56GSboRDkpWdSMTU+mRtegVZf7xI1tY6JGKKPllbJHWOY0RyHCOikYzHiHD1jmNEch0jIpUKxwjfekeytuRI1ta/f3/z//o9QuohEEdImil97733lvvvv9/7Y9urVy+56KKL5Oqrr44oENcfOz2QAImgJwnaRUyvTkcaiANtQZ2DHah3sAP1LrlY59oE4qmLrukISbuaawv4qFGjzIBcpy/Tq5FnnHGG3UUDAAAAgJRFII6QTjrpJLNb2A033GAm9Bg+fLg57icwgRsAAAAAIHIE4ghLu6HrDQAAAAAQG80zAAAAAAAAgLghEAcAAAAAIIEIxAEAAAAASCACcQAAAAAAEohAHAAAAACABCIQBwAAAAAggQjEAQAAAABIIAJxAAAAAAASiEAcAAAAAIAEIhAHAAAAACCBCMQBAAAAAEggAnEAAAAAABKIQBwAAAAAgAQiEAcAAAAAIIEIxAEAAAAASCACcQAAAAAAEohAHAAAAACABCIQBwAAAAAggQjEAQAAAABIIAJxAAAAAAASKDuRTwYAAAAgczQ0eeTR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sbHF8jY0NMhtt91mXnwoLCyU9u3by8SJE2XWrFktPlaf95xzzjGfT8fVa1Cr+7n22mtl8+bNESUL0/f4kEMOkU6dOpnvfWsTyNXV1cm9994rY8eONcuur793797y29/+NmjSNev5rWRf+v5a73e0ScD++9//mu+/Pq8+f0lJiey9994yY8YMqa6u9ttWP5Py8nLzue67774We2XodsXFxd4LB0q7z99///1y1FFHmYnm9Pk02dyAAQPkd7/7nSxcuFDilcQvXLK3bdu2yaOPPmr2MNhtt92krKzM+3n85je/kU8//bTZY6z6bg0Fef/99/0+j8DvSCTJ2rSb+wknnCDdu3eX3Nxc8/0+6KCD5LHHHhO32x3R63r33XfliCOOkI4dO5qvQd9nLaPWt1DeeustOfbYY6VHjx6Sk5Njfm79+vUz6/edd94pW7duDflYAEALDABAWrrxxhsNPcz37t3bXB43bpy5PGHChGbbLl++3Fynt7lz54Zcp/8PRZ9Ht3nsscdCPv7ll182SktLzf8XFxcbWVlZ3nX777+/0dDQYLz++utGQUGBeV9JSYnhcDi825x00klBn9t6bddcc425H/1/dna297msm74nocyYMcNwOp3ebbUMOTk53uWuXbsa8+bNC/k+axmmTp1q/l/L3L59e/P1hXvOQKtXrzaGDRvmfU6Xy2W+B9aylu++++7ze8wdd9xhdO7c2Xw/rW102bpdfPHFET+/2+02t/d9z4qKivw+p0GDBhkrVqzwe9yFF15orhs1alTY/Y8fP97cbsqUKX73T5482bt//dzKysrMv9Z9ubm5xksvvRR0n77vf6h6Ee4zCPd4a53e9D3Qz1TLYt2nn/Nf/vIXv8esXLnSfN8LCwu9n6Hv56G35557rtlr17/BXHbZZX7Pp3Xa9/M48MADjcrKyrCv6/bbbzcfaz3e9zulx4OmpqZmj582bZpfPdDvg9YF3/sCjxUAgMgRiANAhgTin3zyifcEetasWbYE4hoEHHTQQcbChQvNdTU1NWZgaQUW1113nRl4asBtBXtVVVXGtdde693H7NmzQwZc+lgNlB566CGjtrbWGxgdf/zx3se/9tprzR7/j3/8wxt03nLLLca6devM+zVA+fLLL81gR9f36NHDLE+w99kKUq666ipj48aN5rq6urpmQWso+lyjR4/2vo6nnnrK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6JRJWgdieayyjn2J+t2zjr+pzDpf0PcumcW6rsTaTTfdZJZP/6a6bLsLkA4mT57c7L7169fLW2+9FXL94MGDo34+PUE4/vjjzf/rtHI///yzfPLJJzJ//nx57LHH5MMPP5SBAweGfPyhhx4qXbp0Mf/f1NQkq1atko8//li+/PJLeeqpp8zHl5WVNXvcf//7X/N59bXl5ubKvvvuawbjGzduNNd98MEHcscdd5gnK7ouGg8++KD85S9/ieqxQKwcd9xxUlRUFHJ9uHVIfXr8GjBgQMj14dYhNf373/+W3/zmN1JfX28GNVoHOnbsKNu2bTN/Wx944AF57rnnzGMDYIfNmzfLqaeeKm+//ba53L17d7OeamNKRUWFfPfdd2Y91Zs2zsybN8/uImccDbD1nHz58uVJH2wjORCIx0CwK0Z6xdIKxGN9Ram8vLzZPhcuXGi2Sm/YsEEuvfRSeeONN0I+/uqrr252NX7ZsmXmAX3RokVy6623yp133um3/rPPPpODDjrIPEk55ZRTzFZrPVmx6MnKxRdfbAbyup0G5Xp1trWGDRsmV1xxhfkjsueee5pl+de//tXq/QBtofWfH9HM9bvf/Y4WxAyiv5t6wVx/3y6//HKzB5a2hvv66quv5KWXXrKtjMhs27dvl/3228/sNagNOX/7299kwoQJzbbTYPyee+4xLxoh+ejFk8WLF5u9GABFIJ4mdt11V5k6dapce+21Mnv2bPOEQlutI7XLLrvIueeeK7fccou8++67fusaGhrk5JNPNvd57LHHytNPP92se5B2j3ryySfNbV588UVze/3BaO3BRk+AfWnXeQAA4uX11183h1V169at2UVoy8iRI80bYIff//735jlVv379zB6Mes4VqjHj0UcfNc/nkHz0nLgtPWKRftoc5Xg8hmyprk/pm76GRNLWaA1ktdU8lmMfdt99d/NvY2OjbN26tdXl8u2u7uvZZ581x7XoAUS7PIUao6P3a0u5jhvXbjnPPPNMq8uQtjwekR2bU/umr8EGq1evNk9CdLiFtlJpNzztvfHwww+bQzOC0fFx//znP2XUqFFSUFBg9t44/PDDzROYRI/RTHYewyNb67am9E1fA1rP8HikaevWlL7pa4hFi7jSruitpb+1f/zjH82L4XqsadeunRmw33777VJbWxv2sZqTRR+rQx302KYXAs46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", "text/plain": [ "
" ] @@ -1050,19 +970,17 @@ } ], "source": [ - "import matplotlib\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", - "from matplotlib import rc\n", "\n", - "%matplotlib inline\n", "\n", + "%matplotlib inline\n", "\n", "names = [\"TuRBO-1\", \"LogEI\", \"EI\", \"Sobol\"]\n", "runs = [Y_turbo, Y_logei, Y_ei, Y_Sobol]\n", "fig, ax = plt.subplots(figsize=(8, 6))\n", "\n", - "for name, run in zip(names, runs):\n", + "for _name, run in zip(names, runs, strict=True):\n", " fx = np.maximum.accumulate(run.cpu())\n", " plt.plot(fx, marker=\"\", lw=3)\n", "\n", @@ -1073,10 +991,10 @@ "plt.xlim([0, len(Y_turbo)])\n", "plt.ylim([-15, 1])\n", "\n", - "plt.grid(True)\n", + "plt.grid(visible=True)\n", "plt.tight_layout()\n", "plt.legend(\n", - " names + [\"Global optimal value\"],\n", + " [*names, \"Global optimal value\"],\n", " loc=\"lower center\",\n", " bbox_to_anchor=(0, -0.08, 1, 1),\n", " bbox_transform=plt.gcf().transFigure,\n", @@ -1085,27 +1003,11 @@ ")\n", "plt.show()" ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false, - "executionStartTime": 1674921757397, - "executionStopTime": 1674921757407, - "jupyter": { - "outputs_hidden": false - }, - "originalKey": "81817f68-6383-4446-abc2-7ac698325684", - "requestMsgId": "f058303d-23d4-4c3a-b5e5-0042b9f1cc05" - }, - "outputs": [], - "source": [] } ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "base", "language": "python", "name": "python3" }, @@ -1119,7 +1021,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.9" + "version": "3.12.9" } }, "nbformat": 4,