nevergrad_opt.py 910 B

12345678910111213141516171819202122232425262728293031323334353637
  1. """Using nevergrad package to find
  2. the minimum of the 2-variable function:
  3. z = (x-1)**2 + (y-1)**2 + 9*sin(y-1)**2
  4. """
  5. from vedo import *
  6. from vedo.pyplot import plot
  7. import nevergrad as ng # install with: pip install nevergrad
  8. def f(x,y):
  9. z = (x-1)**2 + (y-1)**2 + 9*sin(y-1)**2 + 1
  10. return z/12
  11. def func(v):
  12. return f(v[0],v[1])
  13. def callbk(opti, v, value):
  14. global minv
  15. if value < minv:
  16. pts.append([v.value[0], v.value[1], value])
  17. minv = value
  18. optimizer = ng.optimizers.OnePlusOne(parametrization=2, budget=100)
  19. pts, minv = [], 1e30
  20. optimizer.register_callback("tell", callbk)
  21. # define a constraint on first variable of x:
  22. #optimizer.parametrization.register_cheap_constraint(lambda v: v[0]>-3)
  23. res = optimizer.minimize(func) # best value
  24. printc('Minimum at:', res.value)
  25. ln = Line(pts).lw(3).c("red5")
  26. fu = plot(f, xlim=[-3,4], ylim=[-3,4])
  27. show(fu, ln, __doc__)