壁虎的最佳时间间隔,熊猫移位的问题

Posted

技术标签:

【中文标题】壁虎的最佳时间间隔,熊猫移位的问题【英文标题】:Optimal time gap with gekko, problem with pandas shift 【发布时间】:2021-11-13 16:10:09 【问题描述】:

我正在尝试使用 gekko 获得最佳时间间隔(在下面的示例中为 10)

from gekko import GEKKO
from random import random

n = 100000
arr = [random() for i 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"]

model = GEKKO(remote=False)
shift = model.Var(lb=0, ub=30, integer=True)

def f(shift):
    global weight1, weight2
    print(shift.value)
    temp_weight2 = weight2.shift(periods=-shift.value, freq="T")
    return weight1.corr(temp_weight2)

model.Maximize(f(shift))
model.options.SOLVER=1
model.solve()
print(shift)

但我在移动数据框时遇到错误“TypeError:'int' 类型的对象没有 len()”。 我猜那是因为 gekko 给这个函数 gekko 对象,而不是整数 但是如何解决这个问题?

完全错误: Screenshot

【问题讨论】:

您能否编辑您的问题以包含 完整 堆栈跟踪(错误消息),包括自动生成的代码摘录和行号? @PeterLeimbigler 刚刚添加 @PeterLeimbigler 错误截图在帖子底部 如果将periods=-shift 更改为periods=-int(shift.value[0]) 会怎样? @PeterLeimbigler 从这个问题听起来好像使用 x.value 不是一个好主意***.com/questions/58659995/… 【参考方案1】:

Gekko 中基于梯度的优化器不适用于此问题,因为 (1) 存在多个局部最小值(非凸)和 (2) APOPT 分支定界 MINLP(混合整数非线性规划)方法要求整数变量可以临时评估为非整数值以确定搜索方向。

简单的详尽搜索怎么样?目标函数的评价只有31个,最大值的指标可以用np.argmax()标识。

from random import random
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

n = 100000
arr = [random() for i 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"]

def f(shift):
    global weight1, weight2
    temp_weight2 = weight2.shift(periods=shift, freq="T")
    return weight1.corr(temp_weight2)

s = np.linspace(0,30,31).astype(int)
fs = np.array([f(si) for si in s])
fi = np.argmax(fs)
plt.plot(s,fs)
plt.plot(s[fi],fs[fi],'o')
plt.show()

免费提供的online course 和book 提供了有关优化方法的更多信息。我推荐关于无梯度优化的第 5 章和第 6 章。

【讨论】:

以上是关于壁虎的最佳时间间隔,熊猫移位的问题的主要内容,如果未能解决你的问题,请参考以下文章

如何使用熊猫计算最大点击间隔?

如何按定义的时间间隔对熊猫数据框进行分组?

按间隔合并两个熊猫数据帧

如何从熊猫数据框列中选择日期间隔? [复制]

只保留熊猫坐标行中的最大间隔

如何根据熊猫时间序列中的 5 分钟间隔创建组 ID?