首先,我只想说我是一名程序员,不是复杂算法方面的专家,可能无法应用复杂的伪代码或解决方案的其他描述。我已经在其中一个编程 SE 论坛上问过类似的问题,希望能找到代码示例,但没有人有解决方案。
我有一个每秒大约 10 个快照的数据流。我编写了一个(C#)控制器,它获取这些数据并根据与预期结果的距离调整一些数据收集参数。目前,我只是对我的数据进行线性缩放操作,这样我离预期结果越远,它纠正的越多。问题是传入的数据流延迟了 0.5 到 2 秒(我可以在运行时计算)。由于这种延迟,它正在纠正前一段时间的结果,并且不断地过度纠正,甚至有时纠正错误的方向。我正在寻找一种算法来执行以下操作:
- 实施一个校正算法(我更喜欢 PID),它将尝试
磨练最佳值 - 根据修正历史和结果,提前预测一定时间(或数据集数量);这些值不会完全是线性的,但它们可能会接近
在可以实现这一目标的算法方面,我有哪些选择?正如我之前所说,我是一名程序员,因此我将不胜感激代码示例;我不擅长将复杂的伪代码转换为有效的实现。
编辑: 为了解决评论中的一些问题......
- 我确实在我的问题中做了一个小抽象。实际发生的是我得到一个数据流,根据该数据计算 3 个(单独的)数字,并尝试分别优化它们;他们每个人都有自己的输出参数。我从这个算法中需要的是能够对单个数字进行操作并对其进行优化。我会给它历史和结果,它会修改它自己的输出参数。然后我可以为每个参数使用算法 3 次。
- 费率确实略有变化(通常速度很慢),但如果需要,我应该能够计算出变化。但是我不需要足够精确的数字来要求可变的预测时间;我可以选择任意数量的快照来提前预测,它应该让我足够接近我的结果。
- 这是一个物理过程,噪音很大,而且通常不是很准确。我正在获取我的数据流并进行大量估计和跟踪之类的事情,因此经常存在异常值。有许多因素使基本模型相对容易,但任何更准确的东西都将完全关闭。基本上,我无法真正将其建模到有用的程度。请注意,该算法必须控制的输出值是“漂移”或变化率。目前我只是缩放值,以便输入距离理想值越远,输出越高(非常简单)。
- 您是否要求我提供我的数据样本?我应该可以在某个时候做到,但我可能需要几天的时间才能获得机会。为了测试它,我(现在仍然)计划将算法放入带有滑块和噪声发生器的测试程序中,看看会发生什么。