File: useful_utilities.rst

package info (click to toggle)
python-cogent 1.4.1-1.2
  • links: PTS, VCS
  • area: non-free
  • in suites: squeeze
  • size: 13,260 kB
  • ctags: 20,087
  • sloc: python: 116,163; ansic: 732; makefile: 74; sh: 9
file content (47 lines) | stat: -rw-r--r-- 1,826 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
****************
Useful Utilities
****************

Using PyCogent's optimisers for your own functions
==================================================

You have a function that you want to maximise/minimise. The parameters in your function may be bounded (must lie in a specific interval) or not. The cogent optimisers can be applied to these cases. The ``Powell`` (a local optimiser) and ``SimulatedAnnealing`` (a global optimiser) classes in particular have had their interfaces standardised for such use cases. We demonstrate for a very simple function below.

We write a simple factory function that uses a provided value for omega to compute the squared deviation from an estimate.

.. doctest::
    
    >>> import numpy
    >>> def DiffOmega(omega):
    ...     def omega_from_S(S):
    ...         omega_est = S/(1-numpy.e**(-1*S))
    ...         return abs(omega-omega_est)**2
    ...     return omega_from_S

We then import the ``Powell`` optimiser, create our optimisable function with a value of omega to solve for S and instantiate an optimiser instance. Note that we provide lower and upper bounds and an initial guess for our parameter of interest (``S``).

.. doctest::
    
    >>> from cogent.maths.optimisers import Powell
    >>> omega = 0.1
    >>> opt = Powell(DiffOmega(omega),
    ...     xinit=[1.0], # the vector of initial values
    ...     bounds=([-100], [100]), # [(lower),(upper)] bounds for the params
    ...     direction=-1) # -1 is minimise func, 1 is maximise

We then optimise the function, obtaining the fit statistic and the associated estimate of S.

.. doctest::
    
    >>> fit, vec = opt.run(show_progress=False)
    >>> assert 0.0 <= fit < 1e-6
    >>> print 'S=%.4f' % vec[0]
    S=-3.6150

Cartesian products
==================

*To be written.*

.. cogent.util.transform