找到离散函数的全局最小值

时间:2013-10-02 19:09:16

标签: python algorithm optimization numpy scipy

这是我的代码在简化时的样子:

# This function returns some value depending on the index (integer)
# with which it is called.
def funct(index):
    value <-- some_process[index]
    # Return value for this index.
    return value

允许的索引存储在列表中:

# List if indexes.
x = [0,1,2,3,...,1000]

我需要找到x索引,该索引返回funct最小值。我可以应用强制方法并遍历完整的x列表,将所有值存储在新列表中,然后只需找到np.argmin()的最小值:

list_of_values = []
for indx in x:
    f_x = funct(x)
    list_of_values.append(f_x)

min_value = np.argmin(list_of_values)

我已经尝试了这个并且它可以工作,但是当x包含太多元素时它变得相当昂贵。我正在寻找一种优化此过程的方法。

我知道scipy.optimize有一些优化函数可以找到全局最小值,例如annealbasin-hopping,但我无法将它们正确地应用到我的代码中。

当我只能使用整数(索引)调用函数或是否要求函数连续时,是否可以使用这些优化工具?

1 个答案:

答案 0 :(得分:4)

python内置min接受key函数:

min_idx = min(x, key=funct)
min_val = funct(min_idx)

这为你提供了一个O(n)解决方案,以及你将在python中实现的。