Frage

Ich suche einen Fuzzy-Logik-Controller bei der Umsetzung auf der Basis entweder PyFuzzy (Python) oder FFLL (C ++) Bibliotheken.

Ich würde es vorziehen, mit Python zu arbeiten, aber bin nicht sicher, ob die Leistung im Embedded-Umfeld akzeptabel sein, wird es funktioniert in wird (entweder ARM oder Embedded x86 proc beide ~ 64Mbs RAM).

Die größte Sorge ist, dass die Reaktionszeiten so schnell wie möglich (eine Aktualisierungsrate von 5 Hz + wäre ideal> 2 Hz erforderlich). Das System würde aus mehreren (wahrscheinlich 5) Sensoren von einer RS232-Schnittstelle liest und bieten 2/3 Ausgänge basierend auf den Ergebnissen der Fuzzy-Auswertung.

Soll ich besorgt sein, dass Python für diese Aufgabe zu langsam sein?

War es hilfreich?

Lösung

In der Regel sollten Sie nicht über die Leistung besessen, bis Sie es tatsächlich zu einem Problem geworden gesehen habe. Da wir die Details Ihrer App nicht wissen, können wir nicht sagen, wie es in Python implementiert, wenn durchführen würde. Und da Sie haben es noch nicht implementiert, weder Sie können.

Implementieren Sie die Version, die Sie am bequemsten sind mit, und am schnellsten umsetzen können, zuerst. Dann Benchmark es. Und , wenn es ist zu langsam, haben Sie drei Möglichkeiten, die getan werden, um sollte:

  • Erste, optimieren Sie Ihre Python-Code
  • Wenn das nicht genug ist, schreiben die meisten leistungskritische Funktionen in C / C ++, und rufen Sie das von Ihrem Python-Code
  • Und schließlich, wenn Sie wirklich Top-Leistung benötigt, haben Sie vielleicht die ganze Sache in C ++ neu zu schreiben. Aber dann mindestens Sie einen funktionierenden Prototyp in Python haben, und Sie haben eine viel klarere Vorstellung davon, wie sollte es umgesetzt werden. Sie werden wissen, welche Fehler zu vermeiden, und Sie werden eine bereits korrekte Umsetzung gegen testen und vergleichen Sie die Ergebnisse auf.

Andere Tipps

Python ist sehr langsam bei großen Mengen an nicht-String Datenhandling. Für einige Operationen, können Sie sehen, dass es 1000-mal langsamer als C / C ++ ist, also ja, dann sollten Sie in diese untersuchen und notwendige Benchmarks tun, bevor Sie zeitkritische Algorithmen in Python zu machen.

Sie können jedoch Python mit Modulen in C / C ++ Code erweitern, so dass zeitkritische Dinge schnell sind, während noch in der Lage zu seinem Python für den Haupt-Code zu verwenden.

Machen Sie es funktioniert, dann ist es schnell arbeiten.

Wenn die meisten Ihrer Laufzeit in C-Bibliotheken ausgegeben wird, können Sie die Sprache diese Bibliotheken verwenden Anruf ist nicht wichtig. Welche Sprache sind Ihre Zeit fress Bibliotheken geschrieben?

Aus Ihrer Beschreibung, Geschwindigkeit sollte nicht viel von einer Besorgnis sein (und Sie können dann mit C, cython, was Sie wollen es schneller machen), aber Speicher wäre. Für Umgebungen mit 64 Mb max (wo das Betriebssystem und alle soll so gut passen, oder?), Ich glaube, es gibt eine gute Chance, dass Python nicht das richtige Werkzeug für das Ziel Einsatz sein kann.

Wenn Sie nicht triviale Logik zu behandeln, würde ich immer noch in Python Prototyp, though.

ich nie wirklich die Leistung von pyfuzzy der Beispiele gemessen, sondern als die neue Version 0.1.0 können FCL-Dateien als FFLL liest. Genau beschreiben Sie Ihre Fuzzy-System in diesem Format schreiben Sie einige Wrapper, und überprüfen Sie die Leistung der beiden Varianten.

Für das Lesen FCL mit pyfuzzy Sie die antlr Python-Laufzeit benötigen, aber nach der Lektüre sollten Sie das Lese-Objekt beizen der Lage sein, damit Sie sich auf das Ziel, die antlr Kopf nicht brauchen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top