Optimization With Scipy
Optimization With Scipy
Harry Lee
January 17, 2018
CEE 696
Table of contents
1. Introduction
3. Constrained Optimization
1
Introduction
optimization problem
min f(x)
x
subject to gi (x) ≥ 0, i = 1, . . . , m
hj (x) = 0, i = 1, . . . , p
x∈X
Assume X be a subset of Rn
x : n × 1 vector of decision variables, i.e., x = [x1 , x2 , · · · , xn ]
f(x): objective function, Rn → R
g(x): m inequality constraints Rn → R
h(x): p equality constraints Rn → R
2
My first example
min x2 − 2x
x
3
my_first_optimization.py using scipy.optimize.minimize
import numpy as np
import scipy.optimize as opt
x0 = 3.0
results = opt.minimize(objective,x0)
print("Solution: x=%f" % results.x)
4
Objective function
5
Constraint set
6
Classification
7
Classification (1)
• Unconstrained optimization
• Constrained optimization
8
Classification (2)
• Discrete optimization
• Continuous optimization
9
Classification (3)
• Linear programming
• Nonlinear programming
• Quadratic programming
• Geometry programming
• Global optimization
programming = optimization
10
Classification (4)
• Deterministic optimization
• Stochastic optimization
11
Classification (5)
• singleobjective problem
• multiobjective problem
12
What information we have at hand
13
Topics we will cover
• 1D optimization/Line search
• Local optimization
• Steepest Descent
• Newton, Gauss-Newton
• Conjugate Gradient
• Linear Programming
• Global optimization
• convex optimization
• stochastic search/evolutionary algorithm
14
scipy.optimize for local
unconstrained optimization
scipy.optimize
help(scipy.optimize)
15
Inputs
• objective function
• constrain functions
• optimization method/solver
• additional parameters:
• solution accuracy (numerical precision)
• maximum number of function evaluations
• maximum number of iterations
16
How to use scipy.optimize.minimize
import numpy as np
import scipy.optimize as opt
import matplotlib.pylab as plt
x0 = 3.0
results = opt.minimize(objective,x0)
print("Solution: x=%f" % results.x)
x = np.linspace(-3,5,100)
plt.plot(x,objective(x))
plt.plot(results.x,objective(results.x),'ro')
plt.show() 18
Optimization result object
19
my_first_optimization.py - additional arg & option
def objective(x,coeffs):
return coeffs[0]*x**2 + coeffs[1]*x + coeffs[2]
x0 = 3.0
mycoeffs = [1.0,-2.0,0.0]
myoptions={'disp':True}
results = opt.minimize(objective,x0,args=mycoeffs,
options = myoptions)
print("Solution: x=%f" % results.x)
x = np.linspace(-3,5,100)
plt.plot(x,objective(x,mycoeffs))
plt.plot(results.x,objective(results.x,mycoeffs),'ro')
plt.show()
20
Constrained Optimization
my_second_constrained_optimization.py - inequality constraint
subject to x − 2 ≥ 0
subject to x − 2 ≥ 0
22