class_docstr: Has the same attributes/properties as a `MultiObjectiveBenchmarkProblem`,
  but its runner is not constructed until needed, to allow for deferring
  constructing the surrogate.
  
  Simple aspects of the problem problem such as its search space
  are defined immediately, while the surrogate is only defined when [TODO]
  in order to avoid expensive operations like downloading files and fitting
  a model.
class_docstr_tok: ["Has","the","same","attributes\/properties","as","a","`","MultiObjectiveBenchmarkProblem","`",",","but","its","runner","is","not","constructed","until","needed",",","to","allow","for","deferring","constructing","the","surrogate",".","Simple","aspects","of","the","problem","problem","such","as","its","search","space","are","defined","immediately",",","while","the","surrogate","is","only","defined","when","[","TODO","]","in","order","to","avoid","expensive","operations","like","downloading","files","and","fitting","a","model","."]
code: def __init__(
      self,
      *,
      name: str,
      search_space: SearchSpace,
      optimization_config: MultiObjectiveOptimizationConfig,
      num_trials: int,
      infer_noise: bool,
      maximum_hypervolume: float,
      reference_point: List[float],
      metric_names: List[str],
      get_surrogate_and_datasets: Optional[
          Callable[[], Tuple[Surrogate, List[SupervisedDataset]]]
      ] = None,
      tracking_metrics: Optional[List[Metric]] = None,
      _runner: Optional[Runner] = None,
  ) -> None:
      super().__init__(
          name=name,
          search_space=search_space,
          optimization_config=optimization_config,
          num_trials=num_trials,
          infer_noise=infer_noise,
          metric_names=metric_names,
          get_surrogate_and_datasets=get_surrogate_and_datasets,
          tracking_metrics=tracking_metrics,
          _runner=_runner,
      )
      self.reference_point = reference_point
      self.maximum_hypervolume = maximum_hypervolume
  
imports: from typing import Any, Callable, Dict, Iterable, List, Optional, Set, Tuple
  import pandas
  import torch
  from ax.benchmark.benchmark_problem import BenchmarkProblemBase
  from ax.core.base_trial import BaseTrial, TrialStatus
  from ax.core.data import Data
  from ax.core.metric import Metric, MetricFetchE, MetricFetchResult
  from ax.core.observation import ObservationFeatures
  from ax.core.optimization_config import MultiObjectiveOptimizationConfig, OptimizationConfig
  from ax.core.parameter import RangeParameter
  from ax.core.runner import Runner
  from ax.core.search_space import SearchSpace
  from ax.core.types import TParameterization
  from ax.modelbridge.transforms.int_to_float import IntToFloat
  from ax.modelbridge.transforms.log import Log
  from ax.models.torch.botorch_modular.surrogate import Surrogate
  from ax.utils.common.base import Base
  from ax.utils.common.equality import equality_typechecker
  from ax.utils.common.result import Err, Ok
  from ax.utils.common.serialization import TClassDecoderRegistry, TDecoderRegistry
  from ax.utils.common.typeutils import not_none
  from botorch.utils.datasets import SupervisedDataset
label_desc: Use image node_id 1 to create a new MOOSurrogateBenchmarkProblem object from inherited base classes: SurrogateBenchmarkProblemBase with example: obj = MOOSurrogateBenchmarkProblem()