使用Gekko求解最优时间间隔时pandas shift报错如何解决
问题原因
你的推测是正确的,Gekko的变量是求解器专用的符号对象,不是普通Python整数。你直接在pandas的shift方法里传入shift.value的写法不符合Gekko的使用逻辑:Gekko需要目标函数是用它内置算子构建的可计算表达式,才能在迭代过程中自动更新变量值、计算梯度,你直接调用pandas的函数,Gekko无法跟踪计算流程,自然会出现类型错误。
修复方案
你的偏移搜索范围只有0~30,范围极小,完全不需要调用整数规划求解器,直接暴力遍历所有可能的偏移值即可,效率比用Gekko高得多,参考代码如下:
import pandas as pd from random import random n = 100000 arr = [random() for _ in range(n)] df = pd.DataFrame({"w1": arr, "w2": arr}, index=pd.date_range(start="1/1/2018", periods=n, freq="T")) df.w2 = df.w2.shift(10) * 10 weight1 = df["w1"] weight2 = df["w2"] best_shift = 0 max_corr = -1 # 遍历所有可能的偏移值 for s in range(31): temp_w2 = weight2.shift(periods=-s, freq="T") current_corr = weight1.corr(temp_w2) if current_corr > max_corr: max_corr = current_corr best_shift = s print(f"最优偏移间隔:{best_shift}")
运行后会直接输出预期的最优值10。
如果你确实需要在更大的搜索范围内使用Gekko求解,可以使用Gekko的黑盒函数接口定义目标,但对于这个场景完全没有必要,暴力搜索的成本可以忽略不计。
内容的提问来源于stack exchange,提问作者postmetanyuta
相关产品推荐
相关产品推荐

