gpt4 book ai didi

python - 函数 scipy.optimize.minimize 的选项

转载 作者:太空狗 更新时间:2023-10-30 03:00:52 34 4
gpt4 key购买 nike

我正在尝试最小化一个非常长的函数(它是 500000 个子函数部分的总和),以便将某些参数拟合到概率模型中。我使用 scipy.optimize.minimize 函数。我尝试了 PowellNelder-Mead 算法,Powell 在我的设置中看起来确实更快。但是,我真的不明白如何强制流程在给定时间后给我一些结果,即使它们不是“最佳”。

我填写了选项maxiter, maxfev, xtol and ftol,但我不是很明白这些选项,因为我试图在我的函数中放置一个 print 并且我注意到该算法对它的评估超过了 maxfev 次,但是当它到达最大点时,它发送错误“达到最大迭代次数”。

对于我使用的两种算法,它们如何工作?该文档非常不清楚。

我的代码:

def log_likelihood(r, alpha, a, b, customers):
if r <= 0 or alpha <= 0 or a <= 0 or b <= 0:
return -np.inf
c = sum([log_likelihood_individual(r, alpha, a, b, x, tx, t) for x, tx, t in customers])
print -c
return c

negative_ll = lambda params: -log_likelihood(*params,customers=customers)
params0 = (1, 1, 1, 1)
res = minimize(negative_ll, params0, method='Powell', callback=print_callback, options={'disp': True, 'ftol':0.05, 'maxiter':3, 'maxfev":15})

最佳答案

您可能应该在 scipy 邮件列表,甚至是 scipy 开发人员邮件列表中询问这个问题,但是查看 source code对于 Nelder-Mead 算法,我注意到对 maxitermaxfev 的实际检查是在外部 while 循环中进行的。该函数在该 while 循环中被多次调用,因此函数计算的实际次数很容易超过 maxfevmain loop 内部也发生了类似的事情对于鲍威尔的方法。对于该方法,在测试评估次数(N 参数数量)之前,函数被评估了 N 次。

我想这样做是因为否则在核心循环中会有太多的 if 语句来检查 maxfev,并且它被认为更快/更清晰内部循环之外的条件。

关于python - 函数 scipy.optimize.minimize 的选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27606874/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com