4.4. pyopus.optimizer.coordinate — Box constrained coordinate search optimizer

Inheritance diagram of pyopus.optimizer.coordinate

Box constrained coordinate search optimizer (PyOPUS subsystem name: CSOPT)

The algorithm (asymptotically) converges to a point where the projection of the cost function gradient is normal to the active constraint (i.e. stationary point in the sense of constrained optimization) if the following holds

  • the cost function is continuously differentiable,

  • the step size is a rational multiple of \(n_s\) (see BoxConstrainedOptimizer),

  • the step scaling factors stepup and stepdn are rational.

If the above conditions hold the algorithm can be classified as a pattern search algorithm. For a proof see

Lewis R. M., Torczon V.: Pattern search algorithms for bound constrained minimization. SIAM Journal on Optimization, vol. 9, pp. 1082-1099, 1999.

class pyopus.optimizer.coordinate.CoordinateSearch(function, xlo=None, xhi=None, debug=0, fstop=None, maxiter=None, stepup=1.0, stepdn=0.5, step0=None, minstep=None)[source]

Coordinate search optimizer class

stepup is the factor by which the step size is increased after a successfull step.

stepdn is the factor by which the step size is decreased after steps in all directions fail.

step0 is the initial vector of ndim step sizes corresponding to coordinate directions. It can also be a scalar in which case it is applied to all directions.

minstep is a vector of step sizes used in the stopping condition. After all step sizes fall below the corresponding values in minstep the algorithm is stopped. minstep can also be a scalar in which case it applies to step sizes in all directions.

If step0 and minstep are not given they are set to \(n_s / 10\) and \(n_s / 1000\) when the reset() method is called.

Box constraints are handled by setting the components of a vector that violate a bound to the bound.

Infinite bounds are allowed. This means that the algorithm behaves as an unconstrained algorithm if lower bounds are \(-\infty\) and upper bounds are \(+\infty\).

See the BoxConstrainedOptimizer class for more information.

check()[source]

Checks the optimization algorithm’s settings and raises an exception if something is wrong.

reset(x0)[source]

Puts the optimizer in its initial state and sets the initial point to be the 1-dimensional array x0. The length of the array becomes the dimension of the optimization problem (ndim member). The shape of x must match that of xlo and xhi.

run()[source]

Runs the optimization algorithm.

Example file coordinate.py in folder demo/optimizer/

# Optimize Rosenbrock function with coordinate search optimizer. 

from pyopus.optimizer.coordinate import CoordinateSearch
from pyopus.problems.mgh import Rosenbrock

if __name__=='__main__':
	prob=Rosenbrock()
	opt=CoordinateSearch(prob.f, debug=1, maxiter=100000, 
			step0=1e-1, minstep=1e-6) 
	opt.reset(prob.initial)
	opt.run()
	
	print("x=%s f=%e" % (str(opt.x), opt.f))