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