Domanda

Sto cercando di implementare un sistema fuzzy logic controller basato su PyFuzzy (Python) o FFLL (C++) e le biblioteche.

Preferisco lavorare con python, ma sono sicuro se le prestazioni saranno accettabili in ambiente embedded e (o BRACCIO o embedded x86 proc sia ~64Mbs di RAM).

La preoccupazione principale è che i tempi di risposta sono più veloce possibile (una frequenza di aggiornamento di 5hz+ sarebbe l'ideale >2Hz è richiesto).Il sistema di lettura più (probabilmente 5) i sensori di una porta RS232 e fornire 2/3 uscite in base ai risultati della fuzzy valutazione.

Dovrei essere preoccupato del fatto che Python sia troppo lento per questo compito?

È stato utile?

Soluzione

In generale, non ossessionare su di prestazioni fino a quando hai effettivamente visto diventare un problema.Poiché non sappiamo i dettagli della tua app, non siamo in grado di dire come si effettuerebbe se implementato in Python.E dal momento che non hanno implementato tuttavia, non si può.

Implementare la versione che si sta più bene con, e possibile implementare più veloce, prima.Quindi un parametro di riferimento.E se è troppo lento, si hanno tre opzioni che dovrebbe essere fatto in ordine:

  • Primo, ottimizzare il codice Python
  • Come se non bastasse, scrivere il più critico per le prestazioni e le funzioni in C/C++, e chiamata, il codice Python
  • E infine, se davvero bisogno di prestazioni al top, si potrebbe riscrivere il tutto in C++.Ma poi, almeno avrete un prototipo funzionante in Python, e avrete un'idea più chiara di come dovrebbe essere implementato.Sai quali sono i rischi da evitare, e vedrete che già corretta attuazione di testare e confrontare i risultati.

Altri suggerimenti

Python è molto lento a gestire grandi quantità di dati non di tipo stringa. Per alcune operazioni, si può vedere che è 1000 volte più lento di C / C ++, quindi sì, si dovrebbe indagare in questo e fare benchmark necessarie prima di effettuare gli algoritmi di time-critical in Python.

Tuttavia, è possibile estendere pitone con moduli di codice C / C ++, in modo che le cose time-critical sono veloci, pur essendo in grado di utilizzare Python per il codice principale.

farlo funzionare, allora farlo funzionare velocemente.

Se la maggior parte del tempo di esecuzione è speso in librerie C, la lingua da utilizzare per chiamare queste librerie non è importante. Che lingua sono le librerie in tempo di mangiare scritti in?

Dalla tua descrizione, la velocità non dovrebbe essere molto più di una preoccupazione (ed è possibile utilizzare C, Cython, quello che vuoi per renderlo più veloce), ma la memoria sarebbe. Per ambienti con 64 MB max (in cui il sistema operativo e tutto dovrebbe andare bene così, giusto?), Penso che ci sia una buona probabilità che Python non può essere lo strumento giusto per la distribuzione di destinazione.

Se si dispone di logica non banale per gestire, sarei ancora prototipo in python, però.

Non ho mai misurato le prestazioni di esempi di pyfuzzy, ma come la nuova versione 0.1.0 può leggere i file FCL come fa FFLL. Basta descrivere il vostro sistema fuzzy in questo formato, scrivere alcuni involucri, e verificare le prestazioni di entrambe le varianti.

Per la lettura FCL con pyfuzzy è necessario il runtime ANTLR pitone, ma dopo aver letto che si dovrebbe essere in grado di fare la serializzazione oggetto di lettura, quindi non è necessario l'overhead ANTLR sul bersaglio.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top