Pergunta

Eu estou olhando para implementar um controlador de lógica fuzzy baseado em qualquer PyFuzzy (Python) ou FFLL (C ++) bibliotecas.

Eu prefiro trabalhar com python, mas estou inseguro se o desempenho será aceitável no ambiente incorporado ele vai trabalhar em (ou ARM ou incorporado proc x86 64Mbs tanto ~ de RAM).

A principal preocupação é que os tempos de resposta são tão rápido quanto possível (uma taxa de atualização de 5 Hz + seria ideal> 2 Hz é necessária). O sistema seria a leitura de múltiplos (provavelmente 5) Sensores de uma porta RS232 e fornecer 2/3 saídas com base nos resultados da avaliação difusa.

Devo me preocupar que Python será muito lento para esta tarefa?

Foi útil?

Solução

Em geral, você não deve ficar obcecado sobre o desempenho até que você tenha realmente visto ele se tornar um problema. Desde que nós não conhecer os detalhes do seu aplicativo, não podemos dizer como ele iria realizar se implementado em Python. E desde que você não implementaram ainda, nem você pode.

Implementar a versão que você sente mais confortável, e pode implementar mais rápido, em primeiro lugar. Então benchmark. E se é muito lento, você tem três opções que devem ser feitas em ordem:

  • Em primeiro lugar, otimizar seu código Python
  • Se isso não for suficiente, escrever a maioria das funções de desempenho crítico em C / C ++ e chamada que do seu código Python
  • E finalmente, se você realmente desempenho necessidade topo, você pode ter que reescrever a coisa toda em C ++. Mas, em seguida, pelo menos você vai ter um protótipo funcional em Python, e você terá uma idéia muito mais clara de como deve ser implementado. Você vai saber o que armadilhas a evitar, e você terá uma implementação já correto para testar contra e comparar resultados a.

Outras dicas

Python é muito lenta em lidar com grandes quantidades de dados não-string. Para algumas operações, você pode ver que é 1000 vezes mais lento do que C / C ++, então sim, você deve investigar para isso e fazer benchmarks necessárias antes de fazer algoritmos de tempo crítico em Python.

No entanto, você pode estender python com módulos em código C / C ++, para que as coisas urgentes são rápidos, enquanto ainda está sendo capaz de usar python para o código principal.

Faça-lhe o trabalho, em seguida, fazê-lo funcionar rápido.

Se a maior parte do seu tempo de execução é gasto em bibliotecas C, a linguagem que você usa para chamar essas bibliotecas não é importante. Que língua são as suas bibliotecas de tempo comendo escritos em?

De sua descrição, a velocidade não deve ser muito de uma preocupação (e você pode usar C, Cython, o que você quiser torná-lo mais rápido), mas a memória seria. Para ambientes com 64 Mb max (onde o sistema operacional e todos devem se encaixar bem, certo?), Eu acho que há uma boa chance de que python pode não ser a ferramenta certa para implantação de destino.

Se você tem lógica não trivial a alça, eu ainda protótipo em python, no entanto.

Eu realmente nunca mediu o desempenho dos exemplos de pyfuzzy, mas como a nova versão 0.1.0 pode ler arquivos FCL como FFLL faz. Basta descrever o seu sistema fuzzy neste formato, escrever alguns wrappers, e verificar o desempenho de ambas as variantes.

Para ler FCL com pyfuzzy você precisa do antlr python tempo de execução, mas depois de ler você deve ser capaz de pickle o objeto de leitura, de modo que você não precisa a sobrecarga antlr no alvo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top