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

时间:2019-04-02 12:03:32

标签: python

我有一个功能-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

2 个答案:

答案 0 :(得分:0)

目前,您将arg2加1,然后每次重试一次,这太慢了。那么,为什么不尝试在每个步骤上增加更多呢?例如。每次+5或+10000,那么一旦您知道例如它的范围是100-200,您可以使用二进制搜索来搜索该范围。

实际上,存在一个称为https://en.m.wikipedia.org/wiki/Exponential_search的已知模式,但是对于您而言,根据您的需要以及您的值的大小,这可能不是必需的。

答案 1 :(得分:0)

我用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)