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

Dou*_*ean 7 robotics haskell functional-programming state-machine control-theory

我正在为Haskell开发混合系统控制器.

FRP库(现在我正在使用netwire,但有几个好的和未来的很多有趣的研究)为问题的连续时间提供了一个很好的解决方案.使用信号名称,尺寸,首选单位等对它们进行扩充可以使您获得一个具有模块性,自我描述并且具有直接信任正确性的路径的系统.

我正在寻找为离散时间提供类似属性的信息,民间传说或论文.在某种意义上,问题更容易,状态机是经过充分研究和简单的.在其他方面,它更难,我将简要解释如何.

正确性显然是最重要的,谢天谢地,它也很简单.

自我描述更是一个问题.你不仅希望控制器处于正确的状态,而且能够告诉你它处于什么状态.它也是如何实现的.接下来可能会发生什么.因此,您可以将名称添加到所有内容中,并且它可以工作,但它与模块化有些冲突.您还希望能够从更简单的时间行为构建复杂的离散时间行为.但是当你问系统处于什么状态时,通常高级答案比低级答案更有趣(或者至少有趣).你怎么干净利落的呢?我尝试了一些天真的方法,并用几种不同的方式将自己包裹在意大利面中,但似乎必须有优雅的解决方案?

我自我描述的另一个问题是我想要一个自我描述条件的列表(通常比较:它是10秒?我在下一个航点的3英尺内吗?电池电量下降了吗?低于15%?等)可能会触发下一次状态转换.有一些棘手的问题,即使这里的理想语义是什么,因为看起来这些事件中的一些更好地"自下而上"处理(例如,你正在执行的任何低级步骤的预期终止条件)和一些"从顶部"(例如设备故障检测,地理围栏......).即使你放松了自我描述的目标,这也可能导致自己的意大利面.

除了诊断之外,这里准确的自我描述信息对抽象解释也非常有用,通过猜测哪些事件可能发生在未来时将系统状态投射到未来.许多事件条件导致相当简单的猜测(例如使用速度良好,燃料消耗率,计时器).其他更复杂,但可能仍然值得为某些应用开发预测(例如,运营商的预期订单,天气预报,移动感兴趣对象的预测轨道).很高兴找到一个不仅用名字来注释条件的设计,而且还有这种东西的函数.

有没有人有这方面的经验,他们愿意分享?

use*_*383 1

好的,所以我想说,对你的问题的“真正”答案是,你要求的一些东西是开放的研究领域——特别是我认为你想要的一些自我描述功能可能需要一定程度的“意大利面条”只是因为你试图解决的问题本质上很复杂。

话虽如此,您对模块化的关注正是正确的方法。我想说,看看Keymaera,因为我相信它具有您正在寻找的功能,尽管它是用 Java 编写的。我还建议您查看 Keymaera 网站上的出版物页面,因为这应该为您提供对一般问题的宝贵见解。

如果您不喜欢 Keymaera 的方法,您还可以考虑使用定时自动机,这是建模方面的另一个方向,应该足以满足您的问题描述。