2010-02-05 9 views
10

Soy un estudiante de informática y voy a trabajar en un proyecto de inteligencia artificial que compondrá una melodía musical de acuerdo con el género y las entradas de humor. ¿Los algoritmos que se utilizarán para este proyecto probablemente consuman muchos recursos? ¿Haría alguna diferencia (en términos de velocidad) si elijo ir con Java en lugar de C++? (Nota: solo conozco estos dos idiomas y estoy más cómodo con Java que con C++).Proyecto de Inteligencia Artificial - ¿Qué idioma debo utilizar?

NB: Perdón por mi pobre inglés. Si alguien puede, limpie esta publicación cuando sea necesario. Gracias.

+3

Esta pregunta surge mucho. Respuesta corta: la elección del idioma casi nunca es un factor en la ejecución de una aplicación. –

+1

Kremlin - He editado varias publicaciones para ayudar a que los hablantes no nativos se comuniquen más claramente, ¡pero su publicación realmente no la necesita! Sus habilidades escritas en inglés son mejores que las de muchos hablantes nativos de inglés ... –

+2

@Earwicker: en el desempeño de una aplicación, el idioma puede no hacer mucha diferencia (al menos en la programación AI), pero en el desempeño del * programador * la elección del idioma puede ser enorme. –

Respuesta

12

El uso de recursos está mucho más influenciado por el enfoque algorítmico que el idioma elegido. Si se siente cómodo con Java, programe su aplicación en ese idioma, aunque una implementación en C++ sea un 10% más rápida.

Dicho esto, puede que le interese Artificial Intelligence API's for Java.

+0

Gracias por el útil enlace. –

+0

Una implementación en C++ podría ser fácilmente 10 veces más rápida. Acabo de encontrarme con un caso de Java que tarda 40 segundos en inicializar una matriz de vectores de 16M. –

+0

Hay ejemplos de contador de fugas de memoria terribles en C++. Creo que el objetivo es evitar la optimización prematura mediante el uso del lenguaje con el que el desarrollador se sienta cómodo. –

13

Vaya con Java ya que se siente más cómodo con él. Eso te permitirá concentrarte en resolver el problema, no en la programación. Tal vez C++ termine con un programa más rápido, tal vez no, pero llegar será más lento y no declararás categóricamente que el programa debe ser tremendamente rápido.

3

En mi opinión, el lenguaje asociado principalmente con AI es Lisp.

Ver las respuestas a Why is Lisp used for AI? - las menciones mejor votadas fueron este en los años 60 y 70, pero en estos días se usan idiomas dinámicos (ruby, python y similares).

3

Me parece que está en la etapa de prueba de concepto de su proyecto. Usaría cualquier idioma con el que te sientas más cómodo. El código Java bien escrito se ejecutará mucho más rápido que el mal escrito C.

1

Hice un proyecto similar de AI hace un par de años. No sé qué solución implementará, pero los programas de IA generalmente pueden consumir tanto recursos y llevar mucho tiempo, pero, por otro lado, necesitará un idioma con el que esté familiarizado para obtenerlo. hecho a tiempo.

Por lo tanto, mi consejo es que si siente que sabe C++ (o C), vaya con uno de ellos. Si no los conoce, considere detenidamente el tiempo que necesitará invertir para aprender un nuevo idioma antes de elegir.

1

Si está empezando desde cero, use lo que mejor conozca. Si desea usar bibliotecas establecidas para acelerar el desarrollo, es posible que desee investigar eso primero, pero Java seguramente tendrá algunas.

En sus zapatos, elegiría Java con seguridad.

2

Usaría Common Lisp para un proyecto como este. Si no conoces Lisp, lo aprendería para este tipo de proyecto. Sería una gran experiencia de aprendizaje y, dado que eres un estudiante de CS, solo te ayudará. Lisp es un lenguaje que puede ser una verdadera revelación.

+3

Y muchos lisps (SBCL para uno) se compilan a código nativo. Clojure es un dialecto lisp que se ejecuta en la JVM y se integra bien con las bibliotecas de Java, por lo que podría obtener lo mejor de ambos mundos. –

+0

@Tim: Gracias por mencionar Clojure, busqué en Google. ¡Parece bastante interesante! –

0

Mi consejo es diseñar todo lo que necesita primero, cada ADT, cada clase de algoritmo, jerarquía, todo. Este tipo de proyecto/programación podría ser muy difícil de diseñar en la familia de idiomas C/C++, tal vez podría elegir otro idioma con menos filosofía de tipo de cuerda. Así que lo aliento a utilizar un lenguaje diseñado para este tipo de problema, más adecuado para su aplicación, functional paradigm ex: LISP, logical paradigm ex: PROLOG o algo así.

0

Mi proyecto de disertación de 3er año fue una implementación de heurística para la asignación de radiofrecuencias de la red celular. Elegí Java sobre C++ porque me permitió visualizar los resultados mucho más fácil que si hubiera usado C++. No creo que el rendimiento hubiera sido significativamente diferente en C++: el factor de complejidad de su algos probablemente sea el factor más importante.

1

me gustaría ir con Clojure por las siguientes razones:

  • Es un Lisp y Lisp son grandes lenguas para el desarrollo de la IA (en parte histórica, sino también por algunas razones concretas y reales - ver this thread y this thread)
  • Clojure se ejecuta en la JVM y tiene una gran interoperabilidad de Java, por lo que puede explotar todas las grandes bibliotecas de Java AI (por ejemplo Weka) además de que ya tienen alguna experiencia del entorno Java
  • JVM tienen excelentes compiladores de optimización JIT hoy en día, para todos los fines prácticos que w Obtendré un rendimiento tan rápido como C/C++ para este tipo de aplicación.
Cuestiones relacionadas