功能设计离散部分的混合系统的方法

7

我正在开发Haskell中混合系统的控制器。

FRP库(目前我正在使用netwire,但有几个好的库和许多有趣的研究可以选择)为连续时间方面提供了一个很好的解决方案。通过添加信号名称、维度、首选单位等信息,您可以获得一个具有模块化、自描述和直观正确性路径的系统。

我正在寻找与离散时间方面具有类似属性的信息、民俗或论文。在某种意义上,这个问题要简单得多,状态机已经被广泛研究并且非常简单。在其他方面,它更加困难,我将简要解释一下。

正确性显然是最重要的事情,幸运的是它也是直接的。

自描述是一个更大的问题。你不仅想让控制器处于正确的状态,而且还希望它能告诉你它处于什么状态。还有它是如何到达那里的。以及它可能去哪里。所以你可以给每个东西加上名称,它可以工作,但它与模块化有些冲突。你也希望能够从简单的离散时间行为构建复杂的行为。但是当你询问系统处于什么状态时,通常高级别的答案比低级别的答案更有趣(或者至少与之同样有趣)。如何清洁地解决这个问题?我尝试了一些天真的方法,并以不同的方式包裹了自己,但似乎必须有优雅的解决方案。

我在自描述方面遇到的另一个问题是,我希望有一个自描述条件列表(通常是比较:已经过去10秒了吗?我是否在下一个航点的3英尺范围内?电池电量是否降至15%以下?等等),它们正在被监视,可能会触发下一个状态转换。由于似乎其中一些事件最好是“从底层向上”处理(例如您正在执行的任何低级步骤的预期终止条件),而另一些则是“从顶部向下”处理(例如设备故障检测、地理围栏等),因此存在一些棘手的问题。即使您放宽了自描述的目标,这也可能导致自己的意大利面条式代码。

除了诊断外,在这里准确的自描述信息也可以非常有用,通过猜测哪些事件可能在何时发生来将系统的状态投影到未来。许多事件条件都可以引导自己进行相当简单的猜测(例如使用速度制造、燃油消耗率、计时器)。其他一些更复杂,但对于某些应用程序开发投影仍然可能值得努力(例如预期操作员订单、天气预报、感兴趣的移动对象的预期轨迹)。找到一个设计,不仅用名称注释条件,而且还具有这种东西的函数,会很好。

有没有人有类似的经验愿意分享?


这是我在这里看到的最有趣的问题。我会非常关注它的发展。 - itsbruce
Atom 这样的东西,也许可以吗? - Cactus
是的和不是的,@Cactus。在实现方面,使用Atom或类似工具可能会更加理想,以提供除正确性保证之外的及时性保证,但在抽象层次上,我们如何构建系统,使其除了做正确的事情之外,还能告诉我们它们正在做什么,为什么要这样做,以及接下来计划做什么?我们如何模块化地支持预测未来? - Doug McClean
1个回答

1
好的,我认为你问题的“真正”答案是,你所询问的一些内容是开放性研究领域的一部分 --- 尤其是我认为你希望的一些自描述特征可能需要一定程度的“意大利面条式编程”,因为你试图解决的问题本质上非常复杂。
话虽如此,你关注模块化的方法确实是正确的。我建议看看 Keymaera,尽管它是用Java编写的,但我相信它具有你寻找的功能。我还建议查看Keymaera网站上的出版物页面,因为这应该为你提供有价值的问题见解。
如果你不喜欢Keymaera的方法,你也可以考虑使用时态自动机,这是另一个建模方向,对于你的问题描述应该足够了。

非常有趣。他们似乎在解决很多我曾认为不可能的验证问题。作为一个业余爱好者,这些问题并没有困扰我太多,但当我戴上产业控制帽子时,它们肯定是有趣的。我有很多新的阅读材料,并且有了学习定理证明器的新动力。谢谢。 :) - Doug McClean
还应该注意,这解决了更为困难的问题,即静态预测所有未来事物的某些方面。怀疑存在更简单的策略,可以通过粒子滤波器动态地预测一些未来事物的某些方面。同意自我描述问题在某种程度上本质上是复杂的,或者换句话说,可能需要程序结构,并非仅仅传达它们的动态语义而不是背后的原因时最自然的结构。至少需要具有某些必需“注释”的语法。 - Doug McClean

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接