我正在考虑基于 PyFuzzy (Python) 或 FFLL (C++) 库实现模糊逻辑控制器。

我更喜欢使用 python,但不确定其性能在它所工作的嵌入式环境中是否可以接受(ARM 或嵌入式 x86 处理器都具有约 64Mbs 的 RAM)。

主要关注的是响应时间尽可能快(理想的更新速率为 5hz+,需要 >2Hz)。该系统将从 RS232 端口的多个(可能是 5 个)传感器读取数据,并根据模糊评估的结果提供 2/3 输出。

我是否应该担心 Python 执行此任务会太慢?

有帮助吗?

解决方案

一般来说,在你真正看到性能成为一个问题之前,你不应该过分关注它。由于我们不知道您的应用程序的详细信息,因此我们无法说明如果用 Python 实现它会如何执行。既然你还没有实现它,你也不能。

首先实施您最熟悉并且可以最快实施的版本。然后对其进行基准测试。和 如果 它太慢了,你有三个选项应该按顺序完成:

  • 首先,优化你的Python代码
  • 如果这还不够,请用 C/C++ 编写对性能最关键的函数,然后从 Python 代码中调用它
  • 最后,如果你 真的 需要顶级性能,您可能必须用 C++ 重写整个过程。但至少你会有一个 Python 的工作原型,并且你会对如何实现它有一个更清晰的想法。您将知道要避免哪些陷阱,并且您将拥有一个已经正确的实现来进行测试和比较结果。

其他提示

Python是在处理大量非字符串数据的速度很慢。对于某些操作,您可能会看到,它比C / C ++慢1000倍,所以是的,你应该调查这个,做必要的基准你在Python腾出时间关键算法之前。

但是,可以用C / C ++代码模块延伸蟒,使得时间关键的事情是速度快,同时仍然能够使用Python主代码。

请它的工作,然后使它工作速度快。

如果你的大部分运行时在C库是花,你用它来调用这些库中的语言并不重要。是你的时间,吃库写成什么语言?

从你的描述,速度应该不会有太大关注的(你可以用C,用Cython,不管你想要,使其更快),但记忆会。对于具有64 MB最大(其中操作系统和所有应符合为好,对吧?)的环境中,我认为这是一个很好的机会,蟒蛇可能不是目标部署的工具。

如果你有不平凡的逻辑来处理,我仍然会在原型蟒蛇,虽然。

我从来没有真正测量pyfuzzy的例子表现,但随着新版本0.1.0可以读取FCL文件作为FFLL一样。只是描述你的模糊系统在这种格式,写一些包装,并检查这两个变种的性能。

对于pyfuzzy您需要的ANTLR Python运行,但是读你应该能够酸洗读取的对象,所以你并不需要在目标上ANTLR开销后读取FCL。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top