Skip to content
/ ZOOpt Public
forked from eyounx/ZOOpt

A python package of Zeroth-Order Optimization (ZOOpt)

License

Notifications You must be signed in to change notification settings

snowfeet/ZOOpt

 
 

Repository files navigation

ZOOpt

license

A python package of Zeroth-Order Optimization (ZOOpt).

Zeroth-order optimization (a.k.a. derivative-free optimization/black-box optimization) does not rely on the gradient of the objective function, but instead, learns from samples of the search space. It is suitable for optimizing functions that are nondifferentiable, with many local minima, or even unknown but only testable.

Install: pip install zoopt

A quick example

We define the Ackley function for minimization using Theano

import math, theano, theano.tensor as T
x = T.dvector('x')
f = theano.function([x], -20 * T.exp(-0.2 * T.sqrt((T.dot(x - 0.2, x - 0.2)).mean())) - T.exp(
    (T.cos(2 * math.pi * (x - 0.2))).mean()) + math.e + 20)

Ackley function is a classical function with many local minima. In 2-dimension, it looks like (from wikipedia)

Expeirment results

Then, use ZOOpt to optimize a 100-dimension Ackley function

from zoopt import Dimension, Objective, Parameter, Opt, Solution
dim = 100 # dimension
obj = Objective(lambda s: f(s.get_x()), Dimension(dim, [[-1, 1]] * dim, [True] * dim)) # setup objective
# perform optimization
solution = Opt.min(obj, Parameter(budget=100 * dim))
# print result
solution.print_solution()

For a few seconds, the optimization is done. Then, we can visualize the optimization progress

from matplotlib import pyplot
pyplot.plot(obj.get_history_bestsofar())
pyplot.savefig('figure.png')

which looks like

Expeirment results

More examples are available in the example fold.

release 0.1

  • Include the general optimization method RACOS (AAAI'16) and Sequential RACOS (AAAI'17), and the subset selection method POSS (NIPS'15).
  • The algorithm selection is automatic. See examples in the example fold.
  • Default parameters work well on many problems, while parameters are fully controllable
  • Running speed optmized for Python

About

A python package of Zeroth-Order Optimization (ZOOpt)

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 100.0%