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