我有一个(辅助)功能F,
def F(P, t, r, param):
'''Parameters of my problem are stored in "param" list. Other inputs of
F:
- P: an input vector
- t: current observation index
- r: a fixed scalar parameter.'''
... #Some operations using the data list Y
return f, P_updated
给出数据列表Y = [y_t],t = 1、2,... T的可以迭代地用于计算目标函数obj_fun,如下所示:
给出一组参数值和P的初始值P_0,该函数迭代地计算输出值f,并更新P的值:
P = P_0
obj_fun = 1
for t in range(1,T):
f, P = F(P, t, r, param)
obj_fun *= f
不用说obj_fun的最终值取决于param中的特定参数值。我的目的是针对(多维)参数优化obj_fun的最终值。
我认为在使用任何优化程序包或方法之前,最好通过定义另一个函数来将问题转换为更简单且非迭代的形式,该函数将F和上述循环嵌入到程序中,并最终生成目标函数;像这样的东西:
def Obj_Fun(P_0, param):
P = P_0
obj_fun = 1
for t in range(1,T):
f, P = F(P, t, r, param)
obj_fun *= f
return obj_fun
由于维数的诅咒,在多维参数网格上搜索效率很低。我没有Obj_Fun的函数形式,因此没有基于解析导数的算法是可行的。我想知道是否有适合这种优化的Python包?