docstr: evaluates Michalewicz's function for a list of coeffs
  
  f(x) = -\sum_(i=0)^(N-1) \sin(x_i) * (\sin((i+1) * (x_i)^(2) / \pi))^(20)
  
  Inspect with mystic_model_plotter using::
      mystic.models.michal -b "0:3.14:.1, 0:3.14:.1, 1.28500168, 1.92305311, 1.72047194" -d
  
  For x=(2.20289811, 1.57078059, 1.28500168, 1.92305311, 1.72047194, ...)[:N]
  and c=(-0.801303, -1.0, -0.959092, -0.896699, -1.030564, ...)[:N],
  the minimum is f(x)=sum(c) for all x_i=(0,pi)
code: def function(self, coeffs):
      r"""evaluates Michalewicz's function for a list of coeffs
  
      f(x) = -\sum_(i=0)^(N-1) \sin(x_i) * (\sin((i+1) * (x_i)^(2) / \pi))^(20)
  
      Inspect with mystic_model_plotter using::
          mystic.models.michal -b "0:3.14:.1, 0:3.14:.1, 1.28500168, 1.92305311, 1.72047194" -d
  
      For x=(2.20289811, 1.57078059, 1.28500168, 1.92305311, 1.72047194, ...)[:N]
      and c=(-0.801303, -1.0, -0.959092, -0.896699, -1.030564, ...)[:N],
      the minimum is f(x)=sum(c) for all x_i=(0,pi)"""
      m = 20  # the larger the number the narrower the channel
      n = range(len(coeffs))
      r = -sum(
          sin(coeffs[i]) * (sin((i + 1) * coeffs[i] ** 2 / pi)) ** m
          for i in n
      )
      return r
  
imports: from .abstract_model import AbstractFunction
  from math import sin, cos, sqrt, pi, exp
label_desc: Use image node_id 2 for calling the Michalewicz obj's underlying member method code with example usage: obj.function(coeffs) and returns: r