【问题标题】:Artificial Intelligence Project - What language should I go for? [closed]人工智能项目 - 我应该选择哪种语言? [关闭]
【发布时间】:2010-02-05 13:12:37
【问题描述】:

我是一名计算机科学专业的学生,​​我将从事一个人工智能项目,该项目将根据流派和情绪输入创作一首乐曲。用于该项目的算法是否可能非常消耗资源?如果我选择使用 Java 而不是 C++,它会有什么不同(在速度方面)吗? (注意:我只知道这两种语言,而且我更喜欢 Java 而不是 C++。)

NB:对不起,我的英语很差。如果有人可以,请在必要时清理此帖子。谢谢。

【问题讨论】:

  • 这个问题经常出现。简短的回答:语言的选择几乎不是应用程序性能的一个因素。

标签: artificial-intelligence


【解决方案1】:

使用 Java,因为您更熟悉它。这将使您专注于解决问题,而不是编程。也许 C++ 会以更快的程序结束,也许不会,但到达那里会更慢,而且你没有明确地说程序必须非常快。

【讨论】:

    【解决方案2】:

    与所选语言相比,算法方法对资源消耗的影响更大。如果您熟悉 Java,请使用该语言编写您的应用程序 - 即使 C++ 实现可能快 10%。

    话虽如此,您可能对Artificial Intelligence API's for Java 感兴趣。

    【讨论】:

    • C++ 实现可以轻松快 10 倍。我刚遇到一个 Java 用 40 秒初始化一个 16M 向量数组的案例。
    • 有 C++ 中可怕的内存泄漏的反例。我认为重点是通过使用开发人员感觉舒适的语言来避免过早的优化。
    【解决方案3】:

    在我看来,与 AI 最相关的语言是 Lisp。

    查看Why is Lisp used for AI? 的答案 - 最高票数提到这是 60 年代和 70 年代的情况,但现在使用动态语言(ruby、python 等)。

    【讨论】:

      【解决方案4】:

      在我看来,您正处于项目的概念验证阶段。我会使用您最熟悉的任何语言。写得好的 Java 代码比写得差的 C 代码运行得快很多。

      【讨论】:

        【解决方案5】:

        我会在这样的项目中使用 Common Lisp。如果你不了解 Lisp,我会为这种类型的项目学习它。这将是一次很棒的学习经历,而且由于您是 CS 学生,它只会对您有所帮助。 Lisp 是一种可以真正让人大开眼界的语言。

        【讨论】:

        • 许多 lisps(一个是 SBCL)编译为本机代码。 Clojure 是一种运行在 JVM 上的 lisp 方言,并且与 Java 库很好地集成,因此他可以两全其美。
        【解决方案6】:

        几年前我做过一个类似的人工智能项目。我不知道您将实施什么解决方案,但 AI 程序通常既耗费资源,也可能需要很长时间才能运行,但另一方面,您需要一种您熟悉的语言才能获得它及时完成。

        因此,我的建议是,如果您觉得自己了解 C++(或 C),请选择其中之一。如果您不了解它们,那么在选择之前仔细考虑您需要花多少时间学习一门新语言。

        【讨论】:

          【解决方案7】:

          如果您是从头开始,请使用您最了解的方法。如果您想使用已建立的库来加速开发,您可能需要先进行调查 - 但 Java 肯定有一些。

          在你看来,我肯定会选择 Java。

          【讨论】:

            【解决方案8】:

            我会选择 Clojure,原因如下:

            • 这是一种 Lisp,Lisp 是用于 AI 开发的出色语言(部分是历史原因,但也有一些真正的具体原因 - 请参阅 this threadthis thread
            • Clojure 在 JVM 上运行并具有出色的 Java 互操作性,因此您可以利用所有出色的 Java AI 库(例如 Weka),而且您已经具备一些 Java 环境经验
            • 当今的 JVM 具有出色的优化 JIT 编译器,对于所有实际用途,此类应用程序的性能都将与 C/C++ 一样快。

            【讨论】:

              【解决方案9】:

              我的建议是首先设计你需要的一切,每个 ADT,每个算法类,层次结构,一切。这种项目/编程在 C/C++ 系列语言中可能很难设计,也许您可​​以选择其他具有较少字符串类型哲学的语言。所以我鼓励你使用为这类问题设计的语言,更适合你的应用程序,functional paradigm ex: LISP, logical paradigm ex: PROLOG 或类似的东西。

              【讨论】:

                【解决方案10】:

                我第三年的论文项目是蜂窝网络射频分配启发式的实施。我选择了 Java 而不是 C++,因为它让我可以比使用 C++ 更容易地可视化结果。我不相信 C++ 的性能会有显着差异 - 算法的复杂性因素可能是最大的因素。

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2010-12-25
                  • 2010-10-08
                  • 2010-11-05
                  • 2012-11-06
                  • 2011-06-14
                  • 2021-06-01
                  • 2021-08-18
                  • 2016-11-23
                  相关资源
                  最近更新 更多