四子棋的AI算法求助,悬赏500一分不少
来源:百度知道 编辑:UC知道 时间:2024/06/06 19:06:12
原题:
http://zhidao.baidu.com/question/124193761.html
邮箱:xiaoyu0_whbns@yahoo.cn
我主要想知道AI怎么判断,而不是程序怎么编。
是这样的,编程序前我首先要知道电脑应该怎么做,然后编程序让电脑根据我的指令一步一步做。我不是不知道怎么实现我的想法,而是不知道电脑应该怎么做
我写过五子棋程序,也思考过棋类程序的算法,希望能给楼主参考
双方对弈棋类算法,其基本思想就是人工智能中关于 最小-最大问题 的 alpha-beta 剪枝,楼主可搜索一下,这个随便一本人工智能书里都有讲。
下面就是具体程序中该如何实现其思想
一般都要先有一个招法生成器,用于给出当前局面下所有可走的行棋可能。对四子棋来说就相当简单了,只要看一下每一列,只要未满即可。
然后要有一个局面评估函数,大体评价下双方局势的分数。此函数尽量简单能反映优劣即可,因为后面的 alpha-beta 算法要大量调用此函数
最后实现 alpha-beta 的算法,采用迭代加深的广度优先搜索能有效剪枝。(剪枝效率取决于前面的局面评估函数,如果评估函数能非常准确的估值,那么将会大大减小搜索范围,但复杂的评估函数又会增加开销,这是一个两难的抉择)
不过对于四子棋由于非常简单,楼主也可以尝试仅用简单的广度优先搜索。按每个局面 7 列只有 7 种走法来算,5步深的全搜索也只有 1 万多种情况。对一般人来说5步深也足够强了。不满意的话再考虑上面的正统算法。
然后是一点小技巧,关于棋盘的存储和运算,尽量采用位棋盘和位运算来完成,多利用位运算的并行性来提高效率
这里毕竟字数有限,如果还想更深入了解的话推荐来这里看看:http://www.elephantbase.net/computer.htm
一个相当好的棋类算法网站
虽然是讲象棋的,但基本思路都一样,绝对能学到很多东西。
我的代码发给你了,看看满意 不,
在另一边回答你了。
现在的AI和程序有区别吗?我注释有的,查找消息队列。你是用C的话和WINDOWS编程思想是不大相同的。WINDOWS编程有消息这个概念,你要想改成C程序恐怕不大现实。
嗯,你是要下棋的AI话,你贴的那个程序是没有的,它只提供了两人互下的,它唯一的A