Page 167 - 6734
P. 167
якщо x більше рівне мінімуму
return tmax and tmin # якщо False (за
границями), то мінімум не приймається
def print_fun(x, f, accepted): # викликається, коли
знайдено лок. мінімум
print "Loc. min.", x, f, accepted # координати,
значення функції, чи мінімум приймається
ret = basinhopping(func=f, x0=[0.0, 0.0], niter=5,
stepsize=0.1, minimizer_kwargs = {"method": "L-BFGS-
B"}, accept_test=MyBounds(), callback=print_fun) #
знайти мінімум
print ret['x'], ret['fun']
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
ax=Axes3D(plt.figure()) # система координат
X, Y = np.meshgrid(np.linspace(-1,1), np.linspace(-
1,1)); Z=f([X,Y])
ax.plot_wireframe(X, Y, Z) # каркасна поверхня
ax.scatter(ret['x'][0], ret['x'][1], ret['fun'],
c='k') # мінімум
ax.set_xlabel('X0'),ax.set_ylabel('X1'),ax.set_zlabel
('Y');plt.show()
[-0.19506755 -0.10000001] -1.01087618444
Loc. min. [-1.05352142 -0.09999747] -0.102110348616
True
Loc. min. [-0.19506756 -0.1 ] -1.01087618444
True
Loc. min. [-0.19506756 -0.1 ] -1.01087618444
True
Loc. min. [ 0.23417127 -0.10000023] -0.907266719691
True
166