Convex Optimization
In finance and economics, convex optimization plays an important role. Examples are the
calibration of option pricing models to market data or the optimization of an agent’s
utility. As an example function that we want to minimize, we take fm, as defined in the
following:
In [ 54 ]: def fm((x, y)):
return (np.sin(x) + 0.05 * x ** 2
+ np.sin(y) + 0.05 * y ** 2 )
In [ 55 ]: x = np.linspace(- 10 , 10 , 50 )
y = np.linspace(- 10 , 10 , 50 )
X, Y = np.meshgrid(x, y)
Z = fm((X, Y))
Figure 9-14 shows the function graphically for the defined intervals for x and y. Visual
inspection already reveals that this function has multiple local minima. The existence of a
global minimum cannot really be confirmed by this particular graphical representation:
In [ 56 ]: fig = plt.figure(figsize=( 9 , 6 ))
ax = fig.gca(projection=‘3d’)
surf = ax.plot_surface(X, Y, Z, rstride= 2 , cstride= 2 ,
cmap=mpl.cm.coolwarm,
linewidth=0.5, antialiased=True)
ax.set_xlabel(‘x’)
ax.set_ylabel(‘y’)
ax.set_zlabel(‘f(x, y)’)
fig.colorbar(surf, shrink=0.5, aspect= 5 )
Figure 9-14. Function to minimize with two parameters
In what follows, we want to implement both a global minimization approach and a local
one. The functions brute and fmin that we want to use can be found in the sublibrary
scipy.optimize:
In [ 57 ]: import scipy.optimize as spo
Global Optimization
To have a closer look behind the scenes when we initiate the minimization procedures, we
amend the original function by an option to output current parameter values as well as the
function value: