壁虎的最佳时间间隔,熊猫移位的问题
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 章。
【讨论】:
以上是关于壁虎的最佳时间间隔,熊猫移位的问题的主要内容,如果未能解决你的问题,请参考以下文章