class_docstr: Policy Gradient with Parameter-based Exploration (PGPE) algorithm.
  
  Ref: https://people.idsia.ch/~juergen/icann2008sehnke.pdf
code: def tell(self, fitness: Union[np.ndarray, jnp.ndarray]) -> None:
      fitness_scores = process_scores(fitness, self._solution_ranking)
      grad_center, grad_stdev = compute_reinforce_update(
          fitness_scores=fitness_scores,
          scaled_noises=self._scaled_noises,
          stdev=self._stdev,
      )
      self._opt_state = self._opt_update(
          self._t // self._lr_decay_steps, -grad_center, self._opt_state
      )
      self._t += 1
      self._center = self._get_params(self._opt_state)
      self._stdev = update_stdev(
          stdev=self._stdev,
          lr=self._stdev_lr,
          max_change=self._stdev_max_change,
          grad=grad_stdev,
      )
  
imports: import numpy
  import logging
  from typing import Optional
  from typing import Union
  from typing import Tuple
  from functools import partial
  import jax
  import jax.numpy
  from jax import random
  from evojax.algo.base import NEAlgorithm
  from evojax.util import create_logger
label_desc: Use image node_id 3 for calling the PGPE obj's underlying member method code with example usage: obj.tell(fitness) without return types