5

PyFuzzy (Python) または FFLL (C++) ライブラリに基づくファジー ロジック コントローラーの実装を検討しています。

私はPythonで作業したいと思いますが、動作する組み込み環境でパフォーマンスが許容できるかどうかはわかりません(ARMまたは組み込みx86 procの両方で〜64MbsのRAM)。

主な関心事は、応答時間が可能な限り高速であることです (5 Hz 以上の更新レートが理想的です > 2 Hz が必要です)。システムは、RS232 ポートから複数 (おそらく 5 つ) のセンサーから読み取り、ファジー評価の結果に基づいて 2/3 の出力を提供します。

Python がこのタスクに対して遅すぎることを心配する必要がありますか?

4

6 に答える 6

35

一般に、パフォーマンスが問題になるのを実際に目にするまでは、パフォーマンスにこだわるべきではありません。アプリの詳細がわからないため、Python で実装した場合にどのように機能するかはわかりません。そして、あなたはまだそれを実装していないので、あなたもできません。

最も快適で、最も速く実装できるバージョンを最初に実装します。次に、ベンチマークします。遅すぎる場合は、次の 3 つのオプションを順番に実行する必要があります

  • まず、Python コードを最適化します
  • それだけでは不十分な場合は、最もパフォーマンスが重要な関数を C/C++ で記述し、それを Python コードから呼び出します。
  • 最後に、本当に最高のパフォーマンスが必要な場合は、すべてを C++ で書き直す必要があるかもしれません。しかし、少なくとも Python で動作するプロトタイプが作成され、それをどのように実装する必要があるかについて、より明確なアイデアが得られます。どのような落とし穴を回避すべきかがわかります。また、テストして結果を比較するための正しい実装がすでに用意されています。
于 2009-09-30T13:44:01.413 に答える
12

Python は、大量の非文字列データの処理が非常に遅くなります。一部の操作では、C/C++ よりも 1000 倍遅いことがわかる場合があります。そのため、Python でタイム クリティカルなアルゴリズムを作成する前に、これを調査し、必要なベンチマークを実行する必要があります。

ただし、Python を C/C++ コードのモジュールで拡張できるため、メイン コードに Python を使用しながら、タイム クリティカルなものを高速に処理できます。

于 2009-09-30T13:36:28.360 に答える
5

機能させてから、すばやく機能させます。

于 2009-09-30T15:09:50.437 に答える
1

ランタイムの大部分がCライブラリで費やされている場合、これらのライブラリを呼び出すために使用する言語は重要ではありません。あなたの時間のかかる図書館はどの言語で書かれていますか?

于 2009-09-30T16:28:37.657 に答える
0

pyfuzzy のサンプルのパフォーマンスを実際に測定したことはありませんが、新しいバージョン 0.1.0 では FFLL と同様に FCL ファイルを読み取ることができます。ファジー システムをこの形式で記述し、いくつかのラッパーを記述し、両方のバリアントのパフォーマンスを確認するだけです。

pyfuzzy で FCL を読み取るには、antlr python ランタイムが必要ですが、読み取り後は読み取りオブジェクトをピクルできるはずなので、ターゲットでの antlr オーバーヘッドは必要ありません。

于 2009-10-23T10:55:21.840 に答える
0

あなたの説明から、速度はそれほど重要ではありません(C、cythonなど、高速にしたいものは何でも使用できます)が、メモリは重要です。最大 64 Mb の環境 (OS とすべてが適合するはずですよね?) の場合、python がターゲット展開に適したツールではない可能性が高いと思います。

ただし、処理する重要なロジックがある場合でも、Python でプロトタイプを作成します。

于 2009-10-01T06:33:58.407 に答える