1956年,,达特茅斯学会上首次提出了人工智能这一概念,可当时谁又能想到,当时只是几位科学家脑洞大开的概念竟然在60多年后的今天大放异彩,成为各个领域的焦点。今天我们定义的人工智能是指一门研究,开发模拟,延伸和拓展人类智能的理论,方法,技术及应用系统的学科。并且,我们可以根据他的强弱程度将他分为弱人工智能,强人工智能,与超人工智能。它具有符号处理,机器学习,指示表示与推理等功能,并且广泛运用于了医疗领域,教育领域,交通领域,金融领域,工业领域...艾伦图灵曾说:“人工智能是人类历史上最具有挑战性的任务。”

的确,人工智能在人类文明发展历史上无疑是一个举足轻重的大头,可作为普通的本科大学生,人工智能这种高大上的概念,岂不是离我们很远?其实不然,近期,我在写c语言小游戏时意味地发现,人工智能就出现在身边。这里我想阐明一下对比这两个概念我个人的理解:计算器与计算机

计算器之所以只能叫计算器是因为它只能进行一些机械运算,有一套自己的算法,输入一个数,它就有固定的输出,没有智能型,而计算机则不同,它可以根据你的不同输入进行改变它的输出,具有智能型。这其实就是一种人工智能,根据我的理解,人工智能无非就是机器通过学习等方式掌握出一套自己的算法,根据你的输入而改变它的运算过程。近期,我用400行代码写了一个简单的三子棋游戏代码,我们来看以下两张图:

上图是我写的三子棋代码中的一段,这段代码的作用就是决定电脑下棋的位置,不难看出,这段代码运用了rand函数,生成了一个随机数来决定电脑下棋的位置,每次玩家下完棋后,电脑随机生成一个数,然后棋就下在随机数对应的位置上,这种下棋方法显然不具有任何智能性,每次下棋的位置都是随缘,那么结果很容易就是玩家获胜。那么,我们是否可以写出一种程序,无论玩家先手还是后手,无论玩家怎么下棋,计算机基本不会输。(三子棋排列方式少,不排除玩家记住所有排列从而导致平局或胜利的可能),答案是肯定的,这就是DFS算法。

决定谁获胜的代码

这就是程序运行的截图,玩家每次下完棋后,计算机只能在剩余的格子中随机选择一个位置。如果只能这样的话,游戏将多么的单调无趣。难道计算机就只有这样的下棋方式吗?答案是否定的,接下来,我们着重看一下这里出现的人工智能的影子。前面我阐明了我个人对于人工智能的观点,即机器具有分析问题的能力。那么,我们先进行计算,三子棋双方一共下了5个棋就有一方获胜,那么就有120种排序,如果双方一共下了6个棋才有一方获胜,那么只会有12种排列顺序,那么一共就有132种排列方式,那么我们的代码就要实现可以分析这132种排列的由来以及形成过程的功能,如果实现了,那就它就具有一定的智能性,前面介绍了三种人工智能,那么这就是最低级的弱人工智能。它实现了对简单问题的分析,我们最终要实现的目标是,无论玩家怎么下棋,代码都会通过运算,找到一个最佳的下棋位置,最终导致玩家无法战胜计算机。但是,我们该如何去写这个代码呢?虽然只有132中排列方式,但每种方式进行拆卸细解,那也是一个非常庞大的计算过程,那么这里我们就可以运用函数的递归与循环来解决这个问题,我们的解题步骤就分为以下:

1.学习与优化:通过程序员设定的代码,分析所有的棋局和获胜策略,不断优化自身算法,从而提高竞争性。

2.评估棋局:通过代码分析当前的棋局。

3.选择最佳行动:代码根据评估结果,选择对自己最有利的行动,以确保自身“不可战胜”。

那么接下来,我们通过代码进一步分析这个问题。

解释一下,首先在279行定义minmax函数,接受四个参数(当前玩家,搜索深度,当前位置的列和行)这里调用minmax函数(286-293行),实现计算当前位置的最有落棋位置的功能,函数会返回一个整数move,表示最佳落棋的索引。随后,将玩家落棋的位置存储,接着调用print_board函数打印更新后的棋盘,检查当前位置是否获胜,如果获胜,打印获胜者的信息并跳出循环。

逐步分析:

280行:evaluate函数返回值即为当前局得分

281行:否则,则继续搜索,获取最佳落棋点

282行:初始化最大得分和最佳落棋地点

283-287行:利用嵌套循环,尝试所有有空位置,尝试将棋子放在这些位置,从而找出最佳位置

通过一系列函数与循环,我们确实实现了简单的人工智能,我这个下棋小白经过无数次尝试确定此程序确实不可战胜。

这里,通过一百行的代码,我们实现了三子棋的人工智能,我们可否又能写出五子棋的必胜程序呢?我相信,是可以的,只是后者排列方式种类是前者的几个数量级以上,但我相信,通过新的搜索法,新的嵌套方式,新的循环,新的函数就一定可以写出,我很期待我成功将其写出的一天。甚至更复杂的象棋与围棋,我坚信,这种算法就是他们的微元,我也相信未来的某一天我可以接触到这个层次。当然,人工智能的未来也充满了机遇与挑战,目前常用的人工智能方法,规则算法和统计算法都无法成功地处理形式千变万化的自然问题,人类还有很长一段路要走。

                                   韦民

2023.11.25

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐