我在Prolog中设计了一个基于规则的引擎,它基本上是一套用来在纸牌游戏中击败真实玩家的规则。每当我发现我的算法存在弱点,导致测试者利用这些弱点获得优势时,我就会修改规则以便在下一个版本中修复这些问题。
我在Prolog中用不到500行代码完成的工作,如果用C++或C#来做,可能需要约10,000行代码,包括大量的嵌套if-else语句,修复逻辑问题将是一场噩梦。
我的一个朋友告诉我,我的纸牌游戏不涉及人工智能,因为同样的事情可以用函数式或面向对象的编程语言来完成(当然需要更多的努力)。他认为这更像是基于案例的推理(Case-based Reasoning)。
这是真的吗?Prolog不是人工智能工具吗?我见过有人用Prolog编写自然语言处理代码的例子。
还有哪些其他被认为是人工智能工具的工具?
回答:
好吧,让我们争论一下语义学吧。
首先,Prolog不是一个工具,而是一种编程语言。你可以用这种语言来描述一个程序,但你还需要其他东西(编译器、运行时等)来实际运行它。但这可能不是你朋友所指的重点。
其次,Prolog是图灵完备的[需要引用]。这意味着它可以做所有其他图灵完备语言能做的事情(这包括几乎所有曾经存在的编程语言),而所有其他语言也可以做Prolog所做的事情。(如果你在想:你的大脑也是图灵完备的)。唯一的区别在于描述一个算法的难易程度。但观察到你的算法也可以用其他语言表达,这显然是毫无意义的。此外,计算机是图灵完备的。因此,即使你能够表达比图灵完备更好的东西,你也无法执行它。
第三,你说他声称这不是人工智能,因为它是“基于案例的推理”。“推理”已经暗示了一些智能,而且没有规则禁止人工智能是“基于案例的”。
“智能”这个词的定义非常广泛。你的程序能够解决一个问题:在纸牌游戏中击败某人。因此,它是一种专用的人工智能。
但你最初的问题是Prolog是否是人工智能工具。“用于X的工具”是指使“X”变得更容易的东西。虽然Prolog在编写神经网络方面帮助不大,但它使编写基于规则的决策引擎变得非常容易(你自己也这么说)。所以,至少它是这方面的工具。