2010-02-05 13 views
10

Sono uno studente di informatica e ho intenzione di lavorare su un progetto di intelligenza artificiale che comporrà una melodia musicale in base al genere e agli input dell'umore. Gli algoritmi da utilizzare per questo progetto potrebbero essere molto dispendiosi in termini di risorse? Farebbe qualche differenza (in termini di velocità) se scelgo di andare con Java piuttosto che con C++? (Nota: conosco solo queste due lingue e sono più a mio agio con Java che C++.)Progetto di Intelligenza Artificiale - quale lingua dovrei scegliere?

NB: Ci scusiamo per il mio inglese scarso. Se qualcuno può, per favore pulisci questo post ovunque sia necessario. Grazie.

+3

Questa domanda si presenta molto. Risposta breve: la scelta della lingua non è quasi mai un fattore nelle prestazioni di un'applicazione. –

+1

Cremlino - Ho modificato una serie di post per aiutare i non madrelingua a comunicare in modo più chiaro ma il tuo post non ne ha davvero bisogno! Le tue abilità scritte in inglese sono migliori di quelle di molti madrelingua inglesi ... –

+2

@Earwicker: Nelle prestazioni di un'applicazione, la lingua potrebbe non fare molta differenza (almeno nella programmazione AI), ma nell'esecuzione del * programmatore * la scelta della lingua può essere enorme. –

risposta

12

Il consumo di risorse è molto più influenzato dall'approccio algoritmico rispetto alla lingua scelta. Se hai dimestichezza con Java, programma la tua applicazione in quella lingua, anche se un'implementazione in C++ potrebbe essere il 10% più veloce.

Detto questo, potresti essere interessato a Artificial Intelligence API's for Java.

+0

Grazie per il link utile. –

+0

Un'implementazione C++ potrebbe facilmente essere 10 volte più veloce. Mi sono imbattuto in un caso di Java che impiegava 40 secondi per inizializzare un array di vettori 16M. –

+0

Ci sono contro esempi di perdite di memoria terribili in C++. Penso che il punto sia evitare l'ottimizzazione prematura usando il linguaggio con cui lo sviluppatore si sente a proprio agio. –

13

Vai con Java poiché ti senti più a tuo agio. Ciò ti permetterà di concentrarti sulla risoluzione del problema, non sulla programmazione. Forse il C++ finirebbe con un programma più veloce, forse no, ma arrivarci sarà più lento e non dichiarerai categoricamente che il programma deve essere incredibilmente veloce.

3

Nella mia mente, il linguaggio maggiormente associato all'IA è il Lisp.

Vedere le risposte a Why is Lisp used for AI? - le menzioni più votate in alto è stato il caso negli anni '60 e '70, ma in questi giorni si usano linguaggi dinamici (rubino, pitone e così via).

3

Mi sembra che tu sia nella fase di proof-of-concept del tuo progetto. Userei qualsiasi lingua sia la più comoda. Il codice Java ben scritto verrà eseguito molto più velocemente di quanto non sia scritto in modo corretto C.

1

Ho fatto un progetto di IA simile un paio di anni fa. Non so quale soluzione implementerai, ma i programmi di intelligenza artificiale possono generalmente consumare entrambe le risorse e potrebbero impiegare molto tempo per essere eseguiti, ma d'altra parte, avrai bisogno di una lingua con cui hai familiarità per ottenerla fatto in tempo.

Pertanto, il mio consiglio è che se ti senti sapere C++ (o C), vai con uno di loro. Se non li conosci, considera attentamente il tempo che dovrai investire per imparare una nuova lingua prima di scegliere.

1

Se stai partendo da zero, usa quello che sai meglio. Se si desidera utilizzare librerie consolidate per accelerare lo sviluppo, si potrebbe voler prima indagare - ma è certo che Java ne avrà alcune.

Nei tuoi panni, sceglierei sicuramente Java.

2

Vorrei utilizzare Common Lisp per un progetto come questo. Se non conosci Lisp, lo imparerei per questo tipo di progetto. Sarebbe una grande esperienza di apprendimento e dato che sei uno studente di CS, ti aiuterà solo. Lisp è un linguaggio che può essere un vero sbocco d'occhi.

+3

E molti lisps (SBCL per uno) compilano il codice nativo. Clojure è un dialetto lisp che gira su JVM e si integra bene con le librerie Java, così da poter ottenere il meglio da entrambi i mondi. –

+0

@Tim: Grazie per aver menzionato Clojure, ho cercato su Google. Sembra abbastanza interessante! –

0

Il mio consiglio è progettare tutto ciò che è necessario prima, ogni ADT, ogni classe di algoritmo, gerarchia, tutto. Questo tipo di progetto/programmazione potrebbe essere davvero difficile da progettare nella famiglia di linguaggi C/C++, forse potresti scegliere un'altra lingua con meno filosofia a stringa. Quindi ti incoraggio ad usare un linguaggio progettato per questo tipo di problema, più adatto alla tua applicazione, functional paradigm ex: LISP, logical paradigm ex: PROLOG o qualcosa del genere.

0

Il mio progetto di tesi del terzo anno era un'implementazione dell'euristica per l'allocazione delle frequenze radio della rete cellulare. Ho scelto Java su C++ perché mi permetteva di visualizzare i risultati molto più facilmente che se avessi usato C++. Non credo che le prestazioni sarebbero state significativamente diverse in C++ - il fattore di complessità dei tuoi algos sarà probabilmente il fattore più probabile.

1

mi piacerebbe andare con Clojure per i seguenti motivi:

  • E 'un Lisp, e Lisps sono grandi lingue per lo sviluppo di AI (in parte storica, ma anche per alcuni motivi reali concreti - vedi this thread e this thread)
  • Clojure corre sulla JVM e ha un grande interoperabilità Java, in modo da poter sfruttare tutte le grandi librerie Java aI (ad esempio Weka) più voi già una certa esperienza dell'ambiente Java
  • JVM hanno ottimi compilatori ottimizzazione JIT al giorno d'oggi, per tutti gli scopi pratici che w non ottenere prestazioni veloci come C/C++ per questo tipo di applicazione.
Problemi correlati