gpt4 book ai didi

python - scipy.optimize.basinhopping 不调用 accept_test。为什么?

转载 作者:太空宇宙 更新时间:2023-11-04 03:04:19 27 4
gpt4 key购买 nike

我正在尝试使用 scipy basinhopping 优化函数的输出算法。

def acceptance_criteria(self,**kwargs): 
print "kwargs "
print kwargs

x = kwargs["x_new"]
beta = x[0]
alpha = [x[1],x[2],x[3],x[4],x[5],x[6]]
print x
inputnow= raw_input()
beta_gamma_pass = beta != self.gamma
beta_zero_pass = beta >= 0.0
alpha1_pass = alpha[0] > 0.0
alpha2_pass = alpha[1] > 0.0
alpha3_pass = alpha[2] > 0.0
alpha4_pass= alpha[3] > 0.0
alpha5_pass= alpha[4] > 0.0
alpha6_pass= alpha[5] > 0.0
return beta_gamma_pass,beta_zero_pass,alpha1_pass,alpha2_pass,alpha3_pass,alpha4_pass,alpha5_pass,alpha6_pass

def variational_calculation(self):
minimizer_kwargs = {"method": "BFGS"}

initial_paramater_guesses = [2,1.0,1.0/2.0,1.0/3.0,1.0/4.0,1.0/5.0,1.0/6.0]
ret = basinhopping(self.Calculate, initial_paramater_guesses, minimizer_kwargs=minimizer_kwargs, niter=200, accept_test=self.acceptance_criteria)

我在计算函数中遇到了 Nans 和 infs 的问题。这是由于使用了无效的参数值。我试图通过使用验收标准来防止这种情况。但是 basinhopping 例程不会调用 accept_test 函数。因此,标准仍未实现。

谁能帮我解释为什么 basinhopping 没有调用 accept_test 函数?

谢谢

编辑:回应@sascha 的评论,函数中有参数的分数次幂和 1/参数项。在这种情况下,不限制允许参数值的范围会给出 complex 和 inf 值。这实际上是一个特征值问题,我试图在其中最小化一组 18*18 矩阵的特征值的迹。矩阵元素以复杂的方式依赖于 7 个参数,具有数十个非线性项。

我以前从未研究过比多项式回归更复杂的东西,所以我根本不熟悉这些算法或它们的适用性。但是,只要避免参数值靠近极点,我试图最小化的函数就是平滑的;由 1/parameter 和 1/(paramter^n -constant) 项引起。

编辑2:问题澄清这里的问题与basinhopping算法的适用性无关。

就是为什么它的具体实现,在2.7版本的python和scipy中,没有调用accept_test函数?

最佳答案

我不能说为什么你的例子不起作用,但这是一个类似但最小的例子,它确实调用了 accept_test,也许你可以找出区别

import scipy
import numpy as np
from scipy.optimize import basinhopping

class MyClass:
def Calculate(self, x):
return np.dot(x, x)

def acceptance_criteria(self, **kwargs):
print("in accept test")
return True

def run(self):
minimizer_kwargs = {"method": "BFGS"}

initial_paramater_guesses = [2,1.0,1.0/2.0,1.0/3.0,1.0/4.0,1.0/5.0,1.0/6.0]
ret = basinhopping(self.Calculate,
initial_paramater_guesses,
minimizer_kwargs=minimizer_kwargs,
niter=200,
accept_test=self.acceptance_criteria)

my_class = MyClass()
my_class = my_class.run()

关于python - scipy.optimize.basinhopping 不调用 accept_test。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39963601/

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