Question

Je cherche à mettre en œuvre un contrôleur logique floue basée soit sur PyFuzzy (Python) ou FFLL (C ++) bibliothèques.

Je préfère travailler avec python, mais je suis pas sûr que la performance sera acceptable dans l'environnement intégré, il fonctionnera dans (ARM ou soit intégré x86 proc ~ tant 64Mbs de RAM).

La principale préoccupation est que les temps de réponse sont aussi rapides que possible (un taux de mise à jour 5hz + serait idéal> 2Hz est nécessaire). Le système serait en train de lire à partir de plusieurs (probablement 5) des capteurs à partir d'un port RS232 et fournir des sorties 2/3 sur la base des résultats de l'évaluation floue.

Suis-je concerné que Python sera trop lent pour cette tâche?

Était-ce utile?

La solution

En général, vous ne devriez pas obsédés par la performance jusqu'à ce que vous avez réellement vu devenir un problème. Étant donné que nous ne connaissons pas les détails de votre application, nous ne pouvons pas dire comment il serait mis en œuvre en effectuer si Python. Et puisque vous ne l'avez pas encore mis en œuvre, ni pouvez-vous.

Mettre en œuvre la version que vous êtes le plus à l'aise avec, et peut mettre en œuvre la plus rapide, tout d'abord. Ensuite, le benchmark. Et si il est trop lent, vous avez trois options qui devrait être fait dans l'ordre:

  • Tout d'abord, optimiser votre code Python
  • Si cela ne suffit pas, écrivez les meilleures performances fonctions essentielles en C / C ++, et appeler à partir de votre code Python
  • Et enfin, si vous vraiment ont besoin de performances haut, vous pourriez avoir à réécrire la chose en C ++. Mais au moins vous aurez un prototype en Python, et vous aurez une idée beaucoup plus claire de la façon dont il devrait être mis en œuvre. Vous saurez quels sont les écueils à éviter, et vous aurez une implémentation déjà correcte pour effectuer le test et comparer les résultats.

Autres conseils

Python est très lent à manipuler de grandes quantités de données non-chaîne. Pour certaines opérations, vous pouvez voir qu'il est 1000 fois plus lent que C / C ++, donc oui, vous devriez enquêter sur cette question et faire des repères nécessaires avant de faire des algorithmes critiques en temps en Python.

Cependant, vous pouvez étendre python avec des modules dans le code C / C ++, de sorte que les choses dans le temps sont rapides, tout en étant capable d'utiliser python pour le code principal.

le faire fonctionner, puis le faire fonctionner rapidement.

Si la plupart de votre temps d'exécution est passé dans les bibliothèques C, la langue que vous utilisez pour appeler ces bibliothèques ne sont pas importantes. Quelle langue sont vos bibliothèques mangeuse temps écrit en?

D'après votre description, la vitesse ne doit pas être beaucoup d'inquiétude (et vous pouvez utiliser C, cython, tout ce que vous voulez le rendre plus rapide), mais la mémoire serait. Pour les environnements avec 64 Mb max (où le système d'exploitation et tous doivent s'adapter aussi bien, non?), Je pense qu'il ya une bonne chance que python peut ne pas être le bon outil pour le déploiement cible.

Si vous avez une logique non trivial à manipuler, je serais encore un prototype en python, cependant.

Je ne ai jamais vraiment mesuré les performances des exemples de pyfuzzy, mais comme la nouvelle version 0.1.0 peut lire les fichiers FCL comme le fait FFLL. Il suffit de décrire votre système flou dans ce format, écrire quelques emballages et vérifier les performances des deux variantes.

Pour la lecture avec LCM pyfuzzy vous avez besoin du temps d'exécution python antlr, mais après avoir lu, vous devriez être en mesure de décaper l'objet de lecture, de sorte que vous n'avez pas besoin les frais généraux de antlr sur la cible.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top