CMA-ES Covariance Matrix Adaptation Evolution Strategy
======================================================
A stochastic numerical optimization algorithm for difficult (non-convex,
ill-conditioned, multi-modal, rugged, noisy) optimization problems in
continuous search spaces, implemented in Python.
Typical domain of application are bound-constrained or unconstrained
objective functions with:
* search space dimension between, say, 5 and (a few) 100,
* no gradients available,
* at least, say, 100 times dimension function evaluations needed to
get satisfactory solutions,
* non-separable, ill-conditioned, or rugged/multi-modal landscapes.
The CMA-ES is quite reliable, however for small budgets (fewer function
evaluations than, say, 100 times dimension) or in very small dimensions
better (i.e. faster) methods are available.
The ``pycma`` module provides two independent implementations of the
CMA-ES algorithm in the classes ``cma.CMAEvolutionStrategy`` and
``cma.purecma.CMAES``.
Installation
------------
There are several ways of installation:
* In the terminal command line type::
python -m pip install cma
Typing just ``pip`` instead of ``python -m pip`` may be sufficient. Or,
alternatively::
easy_install cma
The package will be downloaded and installed automatically. To
**upgrade** an existing installation, '``cma``' must be replaced by
'``-U cma``' in both cases. If you never heard of ``pip``, `see here`__.
__ http://www.pip-installer.org
* Download and unpack the ``cma-...tar.gz`` file and type::
pip install -e cma
or::
python setup.py install
in the ``cma-...`` folder (under Windows just
"``setup.py install``").
* Under Windows one may also download the MS Windows installer.
Installation **might require root privileges**. In this case, try
the ``--user`` option of pip or prepended with ``sudo``.
The folder ``cma`` from the ``tar`` archive can also be used without
any installation (just ``import`` needs to find it).
Usage Example
-------------
In a Python shell::
>>> import cma
>>> help(cma)
<output omitted>
>>> es = cma.CMAEvolutionStrategy(8 * [0], 0.5)
(5_w,10)-aCMA-ES (mu_w=3.2,w_1=45%) in dimension 8 (seed=468976, Tue May 6 19:14:06 2014)
>>> help(es) # the same as help(cma.CMAEvolutionStrategy)
<output omitted>
>>> es.optimize(cma.ff.rosen)
Iterat #Fevals function value axis ratio sigma minstd maxstd min:sec
1 10 1.042661803766204e+02 1.0e+00 4.50e-01 4e-01 5e-01 0:0.0
2 20 7.322331708590002e+01 1.2e+00 3.89e-01 4e-01 4e-01 0:0.0
3 30 6.048150359372417e+01 1.2e+00 3.47e-01 3e-01 3e-01 0:0.0
100 1000 3.165939452385367e+00 1.1e+01 7.08e-02 2e-02 7e-02 0:0.2
200 2000 4.157333035296804e-01 1.9e+01 8.10e-02 9e-03 5e-02 0:0.4
300 3000 2.413696640005903e-04 4.3e+01 9.57e-03 3e-04 7e-03 0:0.5
400 4000 1.271582136805314e-11 7.6e+01 9.70e-06 8e-08 3e-06 0:0.7
439 4390 1.062554035878040e-14 9.4e+01 5.31e-07 3e-09 8e-08 0:0.8
>>> es.result_pretty() # pretty print result
termination on tolfun=1e-11
final/bestever f-value = 3.729752e-15 3.729752e-15
mean solution: [ 1. 1. 1. 1. 0.99999999 0.99999998
0.99999995 0.99999991]
std deviation: [ 2.84303359e-09 2.74700402e-09 3.28154576e-09 5.92961588e-09
1.07700123e-08 2.12590385e-08 4.09374304e-08 8.16649754e-08]
optimizes the 8-dimensional Rosenbrock function with initial solution all
zeros and initial ``sigma = 0.5``.
Pretty much the same can be achieved a little less "elaborate" with::
>>> import cma
>>> xopt, es = cma.fmin2(cma.ff.rosen, 8 * [0], 0.5)
<output omitted>
And a little more elaborate exposing the **ask-and-tell interface**::
>>> import cma
>>> es = cma.CMAEvolutionStrategy(12 * [0], 0.5)
>>> while not es.stop():
... solutions = es.ask()
... es.tell(solutions, [cma.ff.rosen(x) for x in solutions])
... es.logger.add() # write data to disc to be plotted
... es.disp()
<output omitted>
>>> es.result_pretty()
<output omitted>
>>> cma.plot() # shortcut for es.logger.plot()
.. figure:: http://www.cmap.polytechnique.fr/~nikolaus.hansen/rosen12.png
:alt: CMA-ES on Rosenbrock function in dimension 8
:target: https://cma-es.github.io/cmaes_sourcecode_page.html#example
:align: center
A single run on the 12-dimensional Rosenbrock function.
The ``CMAOptions`` class manages options for ``CMAEvolutionStrategy``,
e.g. verbosity options can be found like::
>>> import cma
>>> cma.s.pprint(cma.CMAOptions('erb'))
{'verb_log': '1 #v verbosity: write data to files every verb_log iteration, writing can be time critical on fast to evaluate functions'
'verbose': '1 #v verbosity e.v. of initial/final message, -1 is very quiet, not yet implemented'
'verb_plot': '0 #v in fmin(): plot() is called every verb_plot iteration'
'verb_disp': '100 #v verbosity: display console output every verb_disp iteration'
'verb_filenameprefix': 'outcmaes # output filenames prefix'
'verb_append': '0 # initial evaluation counter, if append, do not overwrite output files'
'verb_time': 'True #v output timings on console'}
Options are passed like::
>>> import cma
>>> es = cma.CMAEvolutionStrategy(8 * [0], 0.5,
{'verb_disp': 1}) # display each iteration
Documentations
--------------
The full package API documentation:
* `version 3+`_ (recent)
* `version 1.x`_
.. _`version 3+`: https://cma-es.github.io/apidocs-pycma/
.. _`version 1.x`: http://www.cmap.polytechnique.fr/~nikolaus.hansen/html-pythoncma/
See also
* `Github page hosting this code`_ and its `FAQ`_ (under development)
* `General CMA-ES source code page`_ with practical hints
* `CMA-ES on Wikipedia`_
.. _`Github page hosting this code`: https://github.com/CMA-ES/pycma
.. _`FAQ`: https://github.com/CMA-ES/pycma/issues?q=is:issue+label:FAQ
.. _`General CMA-ES source code page`: https://cma-es.github.io/cmaes_sourcecode_page.html
.. _`CMA-ES on Wikipedia`: http://en.wikipedia.org/wiki/CMA-ES
Dependencies
------------
* required (unless for `cma.purecma`): ``numpy`` -- array processing for numbers, strings, records, and objects
* optional (highly recommended): ``matplotlib`` -- Python plotting package (includes ``pylab``)
Use ``pip install numpy`` etc. for installation. The `cma.purecma` submodule can be used without any dependencies installed.
License: BSD
Raw data
{
"_id": null,
"home_page": "https://github.com/CMA-ES/pycma",
"name": "cma",
"maintainer": "Nikolaus Hansen",
"docs_url": null,
"requires_python": "",
"maintainer_email": "authors_firstname.lastname@inria.fr",
"keywords": "optimization,CMA-ES,cmaes",
"author": "Nikolaus Hansen",
"author_email": "authors_firstname.lastname@inria.fr",
"download_url": "https://files.pythonhosted.org/packages/46/b8/dc832cf0881641355c5121b390942de858079de08720bc2a6030c6c85153/cma-3.3.0.tar.gz",
"platform": null,
"description": "CMA-ES Covariance Matrix Adaptation Evolution Strategy\n======================================================\n\nA stochastic numerical optimization algorithm for difficult (non-convex,\nill-conditioned, multi-modal, rugged, noisy) optimization problems in\ncontinuous search spaces, implemented in Python.\n\nTypical domain of application are bound-constrained or unconstrained\nobjective functions with:\n\n* search space dimension between, say, 5 and (a few) 100,\n* no gradients available,\n* at least, say, 100 times dimension function evaluations needed to\n get satisfactory solutions,\n* non-separable, ill-conditioned, or rugged/multi-modal landscapes.\n\nThe CMA-ES is quite reliable, however for small budgets (fewer function\nevaluations than, say, 100 times dimension) or in very small dimensions\nbetter (i.e. faster) methods are available.\n\nThe ``pycma`` module provides two independent implementations of the \nCMA-ES algorithm in the classes ``cma.CMAEvolutionStrategy`` and \n``cma.purecma.CMAES``. \n\nInstallation\n------------\nThere are several ways of installation:\n\n* In the terminal command line type::\n\n python -m pip install cma\n\n Typing just ``pip`` instead of ``python -m pip`` may be sufficient. Or, \n alternatively::\n\n easy_install cma\n\n The package will be downloaded and installed automatically. To\n **upgrade** an existing installation, '``cma``' must be replaced by \n '``-U cma``' in both cases. If you never heard of ``pip``, `see here`__.\n\n __ http://www.pip-installer.org\n\n* Download and unpack the ``cma-...tar.gz`` file and type::\n\n pip install -e cma\n \n or::\n\n python setup.py install\n\n in the ``cma-...`` folder (under Windows just\n \"``setup.py install``\").\n\n* Under Windows one may also download the MS Windows installer.\n\n\nInstallation **might require root privileges**. In this case, try \nthe ``--user`` option of pip or prepended with ``sudo``.\n\nThe folder ``cma`` from the ``tar`` archive can also be used without\nany installation (just ``import`` needs to find it).\n\nUsage Example\n-------------\nIn a Python shell::\n\n >>> import cma\n >>> help(cma)\n <output omitted>\n >>> es = cma.CMAEvolutionStrategy(8 * [0], 0.5)\n (5_w,10)-aCMA-ES (mu_w=3.2,w_1=45%) in dimension 8 (seed=468976, Tue May 6 19:14:06 2014)\n >>> help(es) # the same as help(cma.CMAEvolutionStrategy)\n <output omitted>\n >>> es.optimize(cma.ff.rosen)\n Iterat #Fevals function value axis ratio sigma minstd maxstd min:sec\n 1 10 1.042661803766204e+02 1.0e+00 4.50e-01 4e-01 5e-01 0:0.0\n 2 20 7.322331708590002e+01 1.2e+00 3.89e-01 4e-01 4e-01 0:0.0\n 3 30 6.048150359372417e+01 1.2e+00 3.47e-01 3e-01 3e-01 0:0.0\n 100 1000 3.165939452385367e+00 1.1e+01 7.08e-02 2e-02 7e-02 0:0.2\n 200 2000 4.157333035296804e-01 1.9e+01 8.10e-02 9e-03 5e-02 0:0.4\n 300 3000 2.413696640005903e-04 4.3e+01 9.57e-03 3e-04 7e-03 0:0.5\n 400 4000 1.271582136805314e-11 7.6e+01 9.70e-06 8e-08 3e-06 0:0.7\n 439 4390 1.062554035878040e-14 9.4e+01 5.31e-07 3e-09 8e-08 0:0.8\n >>> es.result_pretty() # pretty print result\n termination on tolfun=1e-11\n final/bestever f-value = 3.729752e-15 3.729752e-15\n mean solution: [ 1. 1. 1. 1. 0.99999999 0.99999998\n 0.99999995 0.99999991]\n std deviation: [ 2.84303359e-09 2.74700402e-09 3.28154576e-09 5.92961588e-09\n 1.07700123e-08 2.12590385e-08 4.09374304e-08 8.16649754e-08]\n\noptimizes the 8-dimensional Rosenbrock function with initial solution all\nzeros and initial ``sigma = 0.5``.\n\nPretty much the same can be achieved a little less \"elaborate\" with::\n\n >>> import cma\n >>> xopt, es = cma.fmin2(cma.ff.rosen, 8 * [0], 0.5)\n <output omitted>\n\nAnd a little more elaborate exposing the **ask-and-tell interface**::\n\n >>> import cma\n >>> es = cma.CMAEvolutionStrategy(12 * [0], 0.5)\n >>> while not es.stop():\n ... solutions = es.ask()\n ... es.tell(solutions, [cma.ff.rosen(x) for x in solutions])\n ... es.logger.add() # write data to disc to be plotted\n ... es.disp()\n <output omitted>\n >>> es.result_pretty()\n <output omitted>\n >>> cma.plot() # shortcut for es.logger.plot()\n\n.. figure:: http://www.cmap.polytechnique.fr/~nikolaus.hansen/rosen12.png\n :alt: CMA-ES on Rosenbrock function in dimension 8\n :target: https://cma-es.github.io/cmaes_sourcecode_page.html#example\n :align: center \n \n A single run on the 12-dimensional Rosenbrock function. \n\n\nThe ``CMAOptions`` class manages options for ``CMAEvolutionStrategy``,\ne.g. verbosity options can be found like::\n\n >>> import cma\n >>> cma.s.pprint(cma.CMAOptions('erb'))\n {'verb_log': '1 #v verbosity: write data to files every verb_log iteration, writing can be time critical on fast to evaluate functions'\n 'verbose': '1 #v verbosity e.v. of initial/final message, -1 is very quiet, not yet implemented'\n 'verb_plot': '0 #v in fmin(): plot() is called every verb_plot iteration'\n 'verb_disp': '100 #v verbosity: display console output every verb_disp iteration'\n 'verb_filenameprefix': 'outcmaes # output filenames prefix'\n 'verb_append': '0 # initial evaluation counter, if append, do not overwrite output files'\n 'verb_time': 'True #v output timings on console'}\n\nOptions are passed like::\n\n >>> import cma\n >>> es = cma.CMAEvolutionStrategy(8 * [0], 0.5,\n {'verb_disp': 1}) # display each iteration\n\n\nDocumentations\n--------------\nThe full package API documentation:\n\n* `version 3+`_ (recent)\n* `version 1.x`_\n\n.. _`version 3+`: https://cma-es.github.io/apidocs-pycma/\n.. _`version 1.x`: http://www.cmap.polytechnique.fr/~nikolaus.hansen/html-pythoncma/\n\nSee also\n\n* `Github page hosting this code`_ and its `FAQ`_ (under development)\n* `General CMA-ES source code page`_ with practical hints\n* `CMA-ES on Wikipedia`_\n\n.. _`Github page hosting this code`: https://github.com/CMA-ES/pycma\n.. _`FAQ`: https://github.com/CMA-ES/pycma/issues?q=is:issue+label:FAQ\n.. _`General CMA-ES source code page`: https://cma-es.github.io/cmaes_sourcecode_page.html\n.. _`CMA-ES on Wikipedia`: http://en.wikipedia.org/wiki/CMA-ES\n\nDependencies\n------------\n\n* required (unless for `cma.purecma`): ``numpy`` -- array processing for numbers, strings, records, and objects\n* optional (highly recommended): ``matplotlib`` -- Python plotting package (includes ``pylab``)\n\nUse ``pip install numpy`` etc. for installation. The `cma.purecma` submodule can be used without any dependencies installed.\n\nLicense: BSD\n",
"bugtrack_url": null,
"license": "BSD",
"summary": "CMA-ES, Covariance Matrix Adaptation Evolution Strategy for non-linear numerical optimization in Python",
"version": "3.3.0",
"split_keywords": [
"optimization",
"cma-es",
"cmaes"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "7770da60edd6a12a8b4af07e583076c8f039f2a2792a0f0d9219d84522d23493",
"md5": "bce35c4b21fff0f592534cd2ae5234c6",
"sha256": "5cc571b1e2068fcf1c538be36f8f3a870107456fed22ce81c1345a96329e61db"
},
"downloads": -1,
"filename": "cma-3.3.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "bce35c4b21fff0f592534cd2ae5234c6",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 260728,
"upload_time": "2023-01-25T19:45:33",
"upload_time_iso_8601": "2023-01-25T19:45:33.114450Z",
"url": "https://files.pythonhosted.org/packages/77/70/da60edd6a12a8b4af07e583076c8f039f2a2792a0f0d9219d84522d23493/cma-3.3.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "46b8dc832cf0881641355c5121b390942de858079de08720bc2a6030c6c85153",
"md5": "d9ddd1c7485f2c833c3aa2c5781c6e76",
"sha256": "b748b8e03f4e7ae816157d7b9bb2fc6b1fb2fee1d5fd3399329b646bb75861ec"
},
"downloads": -1,
"filename": "cma-3.3.0.tar.gz",
"has_sig": false,
"md5_digest": "d9ddd1c7485f2c833c3aa2c5781c6e76",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 253708,
"upload_time": "2023-01-25T19:45:40",
"upload_time_iso_8601": "2023-01-25T19:45:40.544976Z",
"url": "https://files.pythonhosted.org/packages/46/b8/dc832cf0881641355c5121b390942de858079de08720bc2a6030c6c85153/cma-3.3.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-01-25 19:45:40",
"github": true,
"gitlab": false,
"bitbucket": false,
"github_user": "CMA-ES",
"github_project": "pycma",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"circle": true,
"appveyor": true,
"lcname": "cma"
}