Вопрос

Я рассматриваю возможность реализации контроллера нечеткой логики на основе библиотек PyFuzzy (Python) или FFLL (C ++).

Я бы предпочел работать с python, но не уверен, будет ли производительность приемлемой во встроенной среде, в которой он будет работать (либо ARM, либо embedded x86 proc с объемом оперативной памяти ~ 64 Мбайт).

Основная проблема заключается в том, чтобы время отклика было как можно более быстрым (идеальной была бы частота обновления 5 Гц + > требуется 2 Гц).Система будет считывать данные с нескольких (вероятно, 5) датчиков через порт RS232 и выдавать 2/3 выходных данных на основе результатов нечеткой оценки.

Должен ли я беспокоиться о том, что Python будет слишком медленным для этой задачи?

Это было полезно?

Решение

В общем, вам не следует зацикливаться на производительности, пока вы на самом деле не увидите, что это становится проблемой.Поскольку мы не знаем подробностей вашего приложения, мы не можем сказать, как бы оно работало, если бы было реализовано на Python.И поскольку вы еще не внедрили это, вы тоже не сможете.

Сначала внедрите ту версию, которая вам наиболее удобна и может быть реализована быстрее всего.Затем проведите сравнительный анализ.И если это слишком медленно, у вас есть три варианта, которые следует выполнить по порядку:

  • Во-первых, оптимизируйте свой код на Python
  • Если этого недостаточно, напишите наиболее важные для производительности функции на C / C ++ и вызывайте их из вашего кода Python
  • И, наконец, если вы действительно если вам нужна максимальная производительность, возможно, вам придется переписать все это на C ++.Но тогда, по крайней мере, у вас будет рабочий прототип на Python, и у вас будет гораздо более четкое представление о том, как это должно быть реализовано.Вы будете знать, каких подводных камней следует избегать, и у вас будет уже правильная реализация для тестирования и сравнения результатов.

Другие советы

Python очень медленно обрабатывает большие объемы нестроковых данных.Для некоторых операций вы можете увидеть, что это в 1000 раз медленнее, чем C / C ++, так что да, вам следует изучить это и выполнить необходимые тесты, прежде чем создавать критичные по времени алгоритмы на Python.

Однако вы можете расширить python модулями в коде C / C ++, чтобы ускорить выполнение критичных по времени задач, сохраняя при этом возможность использовать python для основного кода.

Заставьте это работать, а затем сделайте так, чтобы это работало быстро.

Если большая часть вашего времени выполнения выполняется в библиотеках C, язык, который вы используете для вызова этих библиотек, не имеет значения.На каком языке написаны ваши библиотеки , отнимающие время ?

Судя по вашему описанию, скорость не должна вызывать особого беспокойства (и вы можете использовать C, cython, что угодно, чтобы сделать это быстрее), но память была бы.Для сред с максимальным объемом памяти 64 Мб (где ОС и все остальное тоже должно поместиться, верно ?), я думаю, есть большая вероятность, что python может оказаться неподходящим инструментом для целевого развертывания.

Однако, если у вас есть нетривиальная логика для обработки, я бы все равно создал прототип на python.

Я никогда по-настоящему не измерял производительность примеров pyfuzzy, но поскольку новая версия 0.1.0 может читать файлы FCL так же, как и FFLL.Просто опишите вашу нечеткую систему в этом формате, напишите несколько оберток и проверьте производительность обоих вариантов.

Для чтения FCL с помощью pyfuzzy вам понадобится среда выполнения antlr python, но после чтения вы должны быть в состоянии выбрать прочитанный объект, поэтому вам не нужны накладные расходы antlr на целевой объект.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top