class_docstr: Defines a configuration class from which a SimpleQ Algorithm can be built.
  
  Example:
      >>> from rllib_simple_q.simple_q import SimpleQConfig
      >>> config = SimpleQConfig()
      >>> print(config.replay_buffer_config)  # doctest: +SKIP
      >>> replay_config = config.replay_buffer_config.update(
      >>>     {
      >>>         "capacity":  40000,
      >>>     }
      >>> )
      >>> config.training(replay_buffer_config=replay_config)        ...       .resources(num_gpus=1)        ...       .rollouts(num_rollout_workers=3)
  
  Example:
      >>> from rllib_simple_q.simple_q import SimpleQConfig
      >>> from ray import air
      >>> from ray import tune
      >>> config = SimpleQConfig()
      >>> config.training(adam_epsilon=tune.grid_search([1e-8, 5e-8, 1e-7])
      >>> config.environment(env="CartPole-v1")
      >>> tune.Tuner(  # doctest: +SKIP
      ...     "SimpleQ",
      ...     run_config=air.RunConfig(stop={"episode_reward_mean": 200}),
      ...     param_space=config.to_dict()
      ... ).fit()
  
  Example:
      >>> from rllib_simple_q.simple_q import SimpleQConfig
      >>> config = SimpleQConfig()
      >>> print(config.exploration_config)  # doctest: +SKIP
      >>> explore_config = config.exploration_config.update(
      >>>     {
      >>>         "initial_epsilon": 1.5,
      >>>         "final_epsilon": 0.01,
      >>>         "epsilon_timesteps": 5000,
      >>>     })
      >>> config = SimpleQConfig().rollouts(rollout_fragment_length=32)        >>>                         .exploration(exploration_config=explore_config)
  Example:
      >>> from rllib_simple_q.simple_q import SimpleQConfig
      >>> config = SimpleQConfig()
      >>> print(config.exploration_config)  # doctest: +SKIP
      >>> explore_config = config.exploration_config.update(
      >>>     {
      >>>         "type": "softq",
      >>>         "temperature": [1.0],
      >>>     })
      >>> config = SimpleQConfig().training(lr_schedule=[[1, 1e-3], [500, 5e-3]])        >>>                         .exploration(exploration_config=explore_config)
code: def validate(self) -> None:
      # Call super's validation method.
      super().validate()
  
      if self.exploration_config["type"] == "ParameterNoise":
          if self.batch_mode != "complete_episodes":
              raise ValueError(
                  "ParameterNoise Exploration requires `batch_mode` to be "
                  "'complete_episodes'. Try setting `config.rollouts("
                  "batch_mode='complete_episodes')`."
              )
  
      if not self.in_evaluation:
          validate_buffer_config(self)
  
imports: import logging
  from typing import List, Optional, Type, Union
  from rllib_simple_q.simple_q.simple_q_tf_policy import SimpleQTF1Policy, SimpleQTF2Policy
  from rllib_simple_q.simple_q.simple_q_torch_policy import SimpleQTorchPolicy
  from ray.rllib.algorithms.algorithm import Algorithm
  from ray.rllib.algorithms.algorithm_config import AlgorithmConfig, NotProvided
  from ray.rllib.execution.rollout_ops import synchronous_parallel_sample
  from ray.rllib.execution.train_ops import multi_gpu_train_one_step, train_one_step
  from ray.rllib.policy.policy import Policy
  from ray.rllib.utils import deep_update
  from ray.rllib.utils.annotations import override
  from ray.rllib.utils.deprecation import DEPRECATED_VALUE
  from ray.rllib.utils.metrics import LAST_TARGET_UPDATE_TS, NUM_AGENT_STEPS_SAMPLED, NUM_ENV_STEPS_SAMPLED, NUM_TARGET_UPDATES, SAMPLE_TIMER, SYNCH_WORKER_WEIGHTS_TIMER, TARGET_NET_UPDATE_TIMER
  from ray.rllib.utils.replay_buffers.utils import update_priorities_in_replay_buffer, validate_buffer_config
  from ray.rllib.utils.typing import ResultDict
label_desc: Use image node_id 3 for calling the SimpleQConfig obj's underlying member method code with example usage: obj.validate() without return types