象棋吧 关注:274,900贴子:5,948,511

聊聊软件背后的原理

只看楼主收藏回复

潜水多日,发现吧内经常有关于软件的讨论,故开个帖子,聊聊软件背后的原理。


IP属地:陕西来自iPhone客户端1楼2015-05-08 16:13回复
    前排


    IP属地:广东来自Android客户端2楼2015-05-08 16:20
    回复
      为了后续填坑方便,暂时先草拟个列表:
      二人博弈的分类及每种类型主要的解决思路
      博弈树的构造
      招法的生成
      剪枝原理
      估值函数
      潜在的发展方向


      IP属地:陕西3楼2015-05-08 16:21
      回复
        简单的说就是给将来可能出现的局面打一个评估分,选取最高的分数,从而选出最佳着法。


        IP属地:安徽4楼2015-05-08 16:28
        收起回复
          前排占座


          IP属地:河北来自Android客户端5楼2015-05-08 16:39
          回复
            既然聊的对象是针对象棋软件而言,故下面的分类就只考虑二人博弈了
            二人博弈的种类,根据不同的视角,可进行不同的划分,这里先从博弈信息公开程度的视角进行分类,可分为两种:完全信息博弈、非完全信息博弈。
            完全信息博弈:
            对游戏双方而言,博弈的所有信息都是公开,双方同时可见的,且没有任何随机因素的影响。
            信息公开,同时可见这个定义在理解上肯定没有什么歧义,但随机因素指的是什么呢?因为在象棋中不存在这个因素,为了便于理解,举个例子,比如两个人玩大富翁,虽然棋盘上看的到的信息都是双方同时可见的,但因为双方怎样走,取决与扔的骰子,这个因素是随机的,所以这个场景下的大富翁游戏不属于完全信息博弈。
            典型的完全信息博弈包括大部分棋类: 国际象棋、围棋、黑白棋、五子棋等。对于完全信息博弈游戏,一般采用博弈树+估值函数进行建模。
            非完全信息博弈:
            对游戏双方而言,部分信息是某方不可见的,或者是有随机因素影响。典型的非完全信息博弈:扑克、桥牌等。对于非完全信息博弈,一般采用蒙特卡罗法等进行建模(近年来围棋程序在蒙特卡罗法的应用上进行了不少实践,目前顶尖的围棋程序均采用此思想,能够把这个思想借鉴到完全信息博弈游戏,也算是一个重大的改进),这部分与象棋软件无关,后续就不再提了。
            之所以先明确这个分类,是因为印象中有朋友曾讨论过斗地主还是什么牌类复杂性大于棋类的话题,个人认为这样的比较其实是没有太大的实际意义的,在博弈的理论中,二者分属于不同的领域,即使是属于同一领域,做这样的比较也未见得有多大实际意义,棋类是人与人之间的竞技,某个棋类对软件而言很简单了,不代表人类的智力就可以完全征服他,从这个意义上讲,这些棋类之间其实没有高下之分。


            IP属地:陕西6楼2015-05-08 16:41
            回复
              记得有人说过


              IP属地:辽宁来自Android客户端7楼2015-05-08 16:49
              回复
                后续的讨论,就只限于象棋软件这个领域了,码的内容都是本人一些粗浅的理解,如有错漏之处,欢迎大家指正。
                对于同一个软件,不同的硬件配置,最终的表现会相差不少,这是为什么呢?要解释这个问题,需要从软件侧重的技术方向谈起,有两个主要的技术方向:
                先说冷门的,之所以冷门,就是因为技术不够成熟,属于起步阶段,用稍微正式一点儿的术语讲,就是“基于知识”的,这是什么意思呢?就是尝试通过训练,是软件逐步积累对于特定棋类的知识,然后软件能利用这些知识来分析具体的盘面,进行下一步的决策。个人认为这样的技术才是真正的智能,不过根据近年来的研究发展在这个方向上基本上没有实际的进展。
                另外一种技术方向,就是现在的软件采用的成熟的技术,术语可称之为“基于搜索”的,这个技术就是软件负责构造博弈树,然后在博弈树的叶子节点,采用事先定义好的估值函数来对节点进行判断,找到合适的走法。估值函数是人为事先构造好的,所以机器的智能程度主要取决于搜索的深度,打个比方,比如只搜索一层,发现可以吃对方一马,这个时候就会选择吃马,可如果搜索三层,发现吃了马之后,就要白丢车,这时候就不会吃马了。
                今天先码到这里了,后续有空继续填坑,描述下博弈树是如何构造的。


                IP属地:陕西8楼2015-05-08 17:04
                回复
                  软件 还解不了镇楼的图吧 前炮平四 弃双炮 亮车杀


                  IP属地:北京9楼2015-05-08 17:09
                  收起回复
                    继续


                    来自Android客户端10楼2015-05-08 17:19
                    回复
                      留名


                      IP属地:瑞士来自Android客户端12楼2015-05-08 17:33
                      回复
                        评: 应该深入浅出,不要说过多的专业术语。应该抓住主要矛盾,开局作为根结点,手工画几层分析树,做做算法的图示,就足以说清楚了。


                        IP属地:广东14楼2015-05-08 17:40
                        回复
                          这类搜索游戏树的算法就给出任意局面的严格解的能力而言,是非常没有效率的,只能作为不具备足够存储空间以及CPU性能时生成招法的一种经验方法。象棋的作为一个确定的数学对象,其严格而非平凡的数学性质在客观认知的层面比采用经验算法的软件在某个时期达到的相对棋力要深刻也更有意义的多。比如,给定一个局面,能否对其中红黑双方的可能存在的最大获胜步数证明一个足够小的严格的下界?这类问题若能有严格的回答,必定是象棋的数学理论上的重大突破,而且其结论是绝对正确的。而诸如名手之类的软件,其棋力再高又能如何?它们对任意局面得到的解能够被证明是绝对正确的吗?当然,棋软虽然不严格,但是能够通过简洁而优美的代码生产极强的棋力,也是人类科学文明了不起的成就。如何改进算法继续提高软件的棋力,显然也一直都是重要的课题。至于只会拿着他人造出的棋软和开局库,靠同样不是自己制造的机器的性能在网上冒充大师的那帮人模狗样的所谓人机高手,就只能算是一堆狗屎了。


                          IP属地:波兰来自iPhone客户端15楼2015-05-08 18:54
                          收起回复
                            回溯


                            来自iPhone客户端16楼2015-05-08 18:56
                            回复
                              科学世界上有写,不过没看懂


                              来自Android客户端17楼2015-05-08 19:01
                              回复