Deal with overflow in exp using numpy

前端 未结 6 1901
你的背包
你的背包 2020-11-29 07:24

Using numpy, I have this definition of a function:

def powellBadlyScaled(X):
    f1 = 10**4 * X[0] * X[1] - 1
    f2 = numpy.exp(-numpy.float(X[0])) + numpy         


        
6条回答
  •  萌比男神i
    2020-11-29 07:47

    You can use the bigfloat package. It supports arbitrary precision floating point operations.

    http://packages.python.org/bigfloat/

    import bigfloat
    bigfloat.exp(5000,bigfloat.precision(100))
    # -> BigFloat.exact('2.9676283840236670689662968052896e+2171', precision=100)
    

    Are you using a function optimization framework? They usually implement value boundaries (using penalty terms). Try that. Are the relevant values really that extreme? In optimization it's not uncommon to minimize log(f). (approximate log likelihood etc etc). Are you sure you want to optimize on that exp value and not log(exp(f)) == f. ?

    Have a look at my answer to this question: logit and inverse logit functions for extreme values

    Btw, if all you do is minimize powellBadlyScaled(x,y) then the minimum is at x -> + inf and y -> + inf, so no need for numerics.

提交回复
热议问题