Optimizing math functions

Beni Cherniavsky beni.cherniavsky at gmail.com
Sun May 31 11:41:14 CEST 2009


On May 23, 4:22 pm, Esmail <ebo... at hotmail.com> wrote:
>
> Is there some sort of simple Python module that would allow me to
> evaluate this type of function?
>
> In this particular instance I am interested in the minimum of
>
>    x * sin(4*x) + 1.1 * sin(2*y), where x,y in range 0-10
>
> though in other problems the range may not be identical for x and y.

Take a look at http://openopt.org (python-scikits-openopt on debian/
ubuntu) - a lot of optimization engines under one interface, so you
can try different engines easily and without learning many interfaces.

>>> import openopt
>>> from numpy import *
# openopt passes parameters as single vector.
>>> def f((x,y)):
	return x * sin(4*x) + 1.1 * sin(2*y)
# GLP finds global minimum - can be hard, but let's try.
# I'm not constraining the effort in hope it will converge quickly.
>>> opt = openopt.GLP(f, lb=array([0, 0]), ub=array([10, 10]))
# 'galileo' is one of the supported GLP solvers, included out of the
box.
>>> sol = opt.solve('galileo', plot=True)
-----------------------------------------------------
solver: galileo   problem: unnamed
 iter    objFunVal
    0  3.966e+00
   10  -6.190e+00
   20  -7.613e+00
   30  -7.613e+00
   35  -7.613e+00
istop:  11 (Non-Success Number > maxNonSuccess = 15)
Solver:   Time Elapsed = 0.78 	CPU Time Elapsed = 0.24
Plotting: Time Elapsed = 8.04 	CPU Time Elapsed = 2.21
objFunValue: -7.6132332 (feasible, max constraint =  0)
### here you need to close the runtime-value graph to continue ###
>>> sol.ff
-7.6132331733254421
>>> sol.xf
array([ 7.3418726 ,  5.44153445])

That is x=7.3418726, y=5.44153445 gives f=-7.6132331733254421.
Makes sense?



More information about the Python-list mailing list