我在scipy.minimize中使用SLSQP求解器来解决约束优化问题.解算器通常会尝试违反约束的参数值.当违反这些约束时,目标函数返回a nan.这似乎会带来问题,因为我的近似Jacobian nan几乎每次重新计算时都充满了.通常情况下,优化会终结exit mode 8: Positive directional derivative for linesearch.我怀疑nan近似的雅各比派中的人是这个的源头.我的问题是scipy.minimize如何处理nan?它们是良性的,还是应该转换为大的(甚至是无限的)数字?据我所知,Scipy文档中的任何地方都没有涉及此信息.
运行以下代码,在要评估的参数(x)的第7个输出中,尽管将初始步长设置为.1并将间隔设置为50,但是参数仍从约100跳至.01。跳得比步幅大这么大?
import multiprocessing as mp
from scipy.optimize import basinhopping
def runEnvironment(x):
return x**2
def func(x):
print "x:",x
pool = mp.Pool(processes=1)
results=pool.apply(runEnvironment,(x,))
pool.close()
return results
if __name__ == '__main__':
x0=100
ret=basinhopping(func, x0, niter=100, T=1.0, stepsize=.1, minimizer_kwargs=None, take_step=None, accept_test=None, callback=None, interval=50, disp=False, niter_success=None)
Run Code Online (Sandbox Code Playgroud)