找到一个函数的最优解

问题描述

我有以下名为 df_cam_cb_days 的数据框:

            3m  6m  9m  1y  18m 24m  Effective
2021-03-30  49  49  49  49  49  49  2021-03-31
2021-05-13  40  44  44  44  44  44  2021-05-14
2021-06-08  0   26  26  26  26  26  2021-06-09
2021-07-14  0   36  36  36  36  36  2021-07-15
2021-08-31  0   26  48  48  48  48  2021-09-01
2021-10-13  0   0   43  43  43  43  2021-10-14
2021-12-14  0   0   27  62  62  62  2021-12-15
2022-01-26  0   0   0   43  43  43  2022-01-27
2022-03-30  0   0   0   14  63  63  2022-03-31
2022-05-11  0   0   0   0   42  42  2022-05-12
2022-06-08  0   0   0   0   28  28  2022-06-09
2022-07-13  0   0   0   0   35  35  2022-07-14
2022-08-31  0   0   0   0   27  49  2022-09-01
2022-10-12  0   0   0   0   0   42  2022-10-13
2022-12-14  0   0   0   0   0   63  2022-12-15
2023-01-25  0   0   0   0   0   42  2023-01-26
2023-02-10  0   0   0   0   0   15  2023-02-11  

我有以下接收数据帧和数组的函数

mon_policy =np.array([.5,.75,1,1])

#returns numpy array  with Breakeven info 
def cam_be_mon(mp,df):
    columns = ['3m','6m','9m','1y','18m','24m']
    days_array = np.array([0,0])
    days_array = df_cam_cb_days[columns].sum(axis=0).values
    data_array= df_cam_cb_days[columns].values.T
    c= np.log(mp/36000+1)
    be = np.dot(data_array,c)
    be = (np.exp(be[0:])-1)*36000/days_array
    return be
target = np.array([.3525,.415,.475,.56,.715,.916366])
cam_be_mon(mon_policy,df_cam_cb_days)

函数原样返回解决方案: array([0.61281788,0.76943154,0.84886388,0.88890188,0.92955637,0.95151633])

我需要找到将解决方案 = 返回到 target 的 集合,或者如果没有解决方案则是最接近的集合。

解决方法

我用 scipy.optimize 找到了答案