code: def michalewicz_function(config, reporter):
      
      import numpy as np
      x = np.array(
          [config["x1"], config["x2"], config["x3"], config["x4"], config["x5"]])
      sin_x = np.sin(x)
      z = (np.arange(1, 6) / np.pi * (x * x))
      sin_z = np.power(np.sin(z), 20)  # let m = 20
      y = np.dot(sin_x, sin_z)
  
      # Negate y since we want to minimize y value
      reporter(timesteps_total=1, neg_mean_loss=-y)
docs: f(x) = -sum{sin(xi) * [sin(i*xi^2 / pi)]^(2m)}