查找给定函数值的参数的最佳值



我有一个函数 - wait_time(agr1, arg2, arg3( 和这个函数的目标 - target_waiting_time

如何从此函数中找到 target_waiting_time = 特定值的 arg2 的值?

现在我发现它有一个周期,但它太长了。

arg1 = some_value1
arg2 = some_value2
arg3 = some_value3
#find waiting time
def wait_time(agr1, arg2, arg3):
      wait_prob = another_function(agr1, arg2, arg3)
      x = wait_prob / arg2/(arg3*(40))
      return x
target_waiting_time = 100
while wait_time < target_wait_time:
            arg2 += 1
            wait_time = wait_time(agr1, arg2, arg3)
optimal_value = arg2

目前,您将arg2递增 1 并每次重试,这太慢了。那么,为什么不尝试在每一步都增加更多呢?例如。每次通过+5或+10000,然后一旦你知道例如。在 100-200 范围内,您可以使用二叉搜索搜索该范围。

实际上,存在一种称为 https://en.m.wikipedia.org/wiki/Exponential_search 的已知模式,但根据您的需求以及您的值有多大,您可能不需要它。

我用scipy.optimize.fsolve把它分开了

from scipy import optimize
arg1 = some_value1
arg2 = some_value2
arg3 = some_value3
#find waiting time
def wait_time(agr1, arg2, arg3):
    wait_prob = another_function(agr1, arg2, arg3)
    x = wait_prob / arg2/(arg3*(40))
    return x
target_waiting_time = 100
def func(x):
    return wait_time(agr1, x, arg3) - target_waiting_time 
optimal_value = optimize.fsolve(func, x0 = arg2)

最新更新