我正在为Haskell开发混合系统控制器。
FRP图书馆(现在我正在使用netwire,但有几个好的和未来的很多有趣的研究)为问题的连续时间提供了一个很好的解决方案。使用信号名称,尺寸,首选单位等对它们进行扩充可以使您获得一个具有模块性,自我描述并且具有直接信任正确性的系统。
我正在寻找为离散时间方面提供类似属性的信息,民间传说或论文。在某种意义上,问题更容易,状态机是经过充分研究和简单的。在其他方面,它更难,我将简要解释如何。
正确性显然是最重要的,谢天谢地它也很简单。
自我描述更是一个问题。你不仅希望控制器处于正确的状态,而且能够告诉你它处于什么样的状态。它也是如何实现的。接下来可能会发生什么。因此,您可以将名称添加到所有内容中,并且它可以工作,但它与模块化有些冲突。您还希望能够从更简单的行为中构建复杂的离散时间行为。但是当你向系统询问它处于什么状态时,通常高级答案比低级答案更有趣(或者至少有趣)。你怎么干净利落的呢?我已经尝试了一些天真的方法,并用几种不同的方式将自己包裹在意大利面中,但似乎必须有优雅的解决方案?
我自我描述的另一个问题是,我想要一个自我描述条件列表(通常比较:它是10秒?我在下一个3英尺内航路点?电池电量低于15%?等正在被监控,可能触发下一次状态转换。有一些棘手的问题,即使这里的理想语义是什么,因为看起来这些事件中的一些更好地处理了#34;从下往上" (例如,您正在执行的任何低级步骤的预期终止条件)和从上到下的某些"" (例如设备故障检测,地理围栏,......)。即使你放松了自我描述的目标,这也可能导致意大利面。
除了诊断之外,这里准确的自我描述信息对于抽象解释也非常有用,通过猜测哪些事件可能发生时将系统状态投射到未来。许多事件条件导致相当简单的猜测(例如使用速度良好,燃料消耗率,计时器)。其他更复杂但仍可能值得努力为某些应用开发预测(例如,来自运营商的预期订单,天气预报,用于移动感兴趣对象的预计轨道)。很高兴找到一个不仅用名字来注释条件的设计,而且还有这种东西的函数。
有没有人有这方面的经验,他们愿意分享?
答案 0 :(得分:1)
好的,所以我会说你的问题的“真实”答案是你要求的一些事情是开放的研究领域 - 特别是我认为你想要的一些自我描述的功能可能需要某种程度的“意大利面”只是因为你试图解决的问题本质上是复杂的。
话虽如此,您对模块化的关注恰恰是正确的方法。我会说,看看Keymaera,因为我相信它具有你正在寻找的功能,尽管是在Java中。我还建议您查看Keymaera网站上的出版物页面,因为这可以为您提供有关该问题的宝贵见解。
如果您不喜欢Keymaera的方法,您还可以考虑使用Timed Automata,这是建模方面的另一个方向,应该足以满足您的问题描述。