diff --git a/optimizer.py b/optimizer.py index 4dd4cd5..d392cd1 100644 --- a/optimizer.py +++ b/optimizer.py @@ -1,33 +1,63 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on Wed Oct 10 12:31:42 2018 @author: alessia """ import numpy as np import scipy.optimize as sopt +from mpl_toolkits.mplot3d import Axes3D +import matplotlib.pyplot as plt +from matplotlib import cm +from matplotlib.ticker import LinearLocator, FormatStrFormatter + def S(x): x1 = x[0] x2 = x[1] - return 2. * x1 ** 2 + 3. / 2. * x2 ** 2 + x1 * x2 - x1 - 2 * x2 + 6 + return 2. * (x1 ** 2) + 3. / 2. * (x2 ** 2) + x1 * x2 - x1 - 2 * x2 + 6 path = [] - def getIterationSteps(x): path.append(x) - + +def plotFunc(S,path): + + fig = plt.figure() + ax = fig.gca(projection='3d') + + # Plot the surface. + X1 = np.arange(-3, 3, 0.1) + X2 = np.arange(-3, 3, 0.1) + X1, X2 = np.meshgrid(X1,X2) + X3 = S((X1,X2)) + surf = ax.plot_surface(X1, X2, X3, cmap=cm.coolwarm,linewidth=0, antialiased=False) + + # Plot the path. + path=np.array(path) + x1 = path[:,0] + x2 = path[:,1] + x3 = S((x1,x2)) + ax.plot(x1,x2,x3,'--k') + + fig.colorbar(surf, shrink=0.5, aspect=5) + plt.show() + + +#------------------------------------------------------------------------------------------------------------------- method1 = 'BFGS' method2 = 'CG' x = np.random.rand(2) path.append(x) + minimum = sopt.minimize(S,x,method=method2, tol=1e-14, callback=getIterationSteps) -print (path[:]) print ("starting point = ", path[0]) print ("minimum = ", path[-1] ) -print ("# iterations = ", len(path)) \ No newline at end of file +print ("# iterations = ", len(path)) + +plotFunc(S,path) \ No newline at end of file