我正在为 Haskell 中的混合系统开发控制器。
FRP 库(现在我正在使用netwire,但有几个很好的库和许多关于未来库的有趣研究)为问题的连续时间方面提供了一个很好的解决方案。用信号名称、尺寸、首选单位等对它们进行扩充,可以让您的系统具有模块化、自我描述性,并且有一条直截了当的途径来确保正确性。
我正在寻找为离散时间方面提供类似属性的信息、民间传说或论文。从某种意义上说,问题要容易得多,状态机经过充分研究且简单。在其他意义上它更困难,我将简要解释如何。
正确性显然是最重要的,幸运的是它也很简单。
自我描述更成问题。您希望控制器不仅处于正确状态,而且能够告诉您它处于什么状态。以及它是如何到达那里的。以及它下一步可能去哪里。所以你可以给所有东西加上名字,它可以工作,但它与模块化有些冲突。您还希望能够从更简单的行为构建复杂的离散时间行为。但是当你问系统它处于什么状态时,一般来说,高层次的答案比低层次的答案更有趣(或者至少一样有趣)。你如何干净地得到这个?我尝试了一些幼稚的方法,并以几种不同的方式将自己包裹在意大利面条中,但似乎必须有优雅的解决方案?
我在自我描述方面遇到的另一个问题是我想要一个自我描述条件的列表(通常比较:已经 10 秒了吗?我在下一个航路点的 3 英尺内吗?电池电量是否下降低于 15%?等)正在被监控,这可能会触发下一个状态转换。这里有一些棘手的问题是什么是理想的语义,因为似乎这些事件中的一些事件“自下而上”处理得更好(例如,您正在执行的任何低级步骤的预期终止条件)和一些“从顶部down”(例如设备故障检测、地理围栏……)。即使您放松自我描述的目标,这也可能导致自己的意大利面。
除了诊断之外,这里准确的自我描述信息对于抽象解释也非常有用,通过猜测哪些事件可能在何时发生,将系统的状态投射到未来。许多事件条件导致它们自己进行相当简单的猜测(例如,使用良好的速度、燃料消耗率、计时器)。其他的则更复杂,但可能仍然值得为某些应用开发预测(例如,来自运营商的预期订单、天气预报、移动感兴趣物体的预计轨迹)。找到一个不仅用名称来注释条件的设计,而且还用这种东西的功能来注释条件会很好。
有没有人愿意分享这方面的经验?