使用 numpy,我有一个函数的定义:
def powellBadlyScaled(X):
f1 = 10**4 * X[0] * X[1] - 1
f2 = numpy.exp(-numpy.float(X[0])) + numpy.exp(-numpy.float(X[1])) - 1.0001
return f1 + f2
该函数在优化例程中被评估多次。它经常引发异常:
RuntimeWarning: overflow encountered in exp
我知道操作数不能存储在为浮点数分配的空间中。但我怎样才能克服这个问题呢?
您可以使用 bigfloat 包。它支持任意精度浮点运算。
http://packages.python.org/bigfloat/ http://packages.python.org/bigfloat/
import bigfloat
bigfloat.exp(5000,bigfloat.precision(100))
# -> BigFloat.exact('2.9676283840236670689662968052896e+2171', precision=100)
您使用功能优化框架吗?他们通常实施价值边界(使用惩罚项)。尝试一下。相关数值真的那么极端吗?在优化中,最小化 log(f) 并不罕见。 (近似对数似然等)。您确定要优化该 exp 值而不是 log(exp(f)) == f. ?
看看我对这个问题的回答:极值的 logit 和逆 logit 函数 https://stackoverflow.com/questions/9478663/logit-and-inverse-logit-functions-for-extreme-values/9478781#9478781
顺便说一句,如果您所做的只是最小化 powellBadlyScaled(x,y),则最小值位于 x -> + inf 和 y -> + inf,因此不需要数字。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)