博弈围棋社成员结构_第1页
博弈围棋社成员结构_第2页
博弈围棋社成员结构_第3页
博弈围棋社成员结构_第4页
博弈围棋社成员结构_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

博弈围棋社成员结构博弈围棋社成员结构

博弈围棋社成员结构

培训部

组织结构

社长副社长秘书部宣扬部组织部外联部本社团在东莞城市学院开展社团活动。各由社长、副社长/理事、秘书部、培训部、组织部、宣扬部、外联部组成。社长

社团的总负责人,负责社团活动大纲制定,社团总体规划等。全面负责社团的各项事务,召开、主持社团部门大会等会议;享有会议最终决议权;协调部门间的关系。代表社团签署相关重要文件,代表社团参与各种活动。副社长

帮助社特长理日常事务;协作社长的总体工作。帮助社长主持社团工作和社团会议、召集社团全体成员开会。对各部门工作进行监督和指导,了解各部门成员的意见和建议,准时解决问题。社长不在时,代理社特长理社团工作。秘书部

负责整理、保管社团的各种资料、档案;负责拟写各种统计报告、总结、通知、新闻稿等文书;主要负责社团内的财务的支出和收入,并做好财务的收支状况登记;支配通知协会各种会议和重要活动,做好活动考勤登记及会议记录。宣扬部

负责社团及各部门的宣扬工作,提高社团的知名度。工作内容包括海报的设计、书写和张贴工作以及制作PPT、视频等;负责活动的会场设计及布置等工作;保管宣扬物品。组织部

负责本社团组织工作,做好活动策划和活动总结。组织和策划内部活动,活跃社团内部气氛,增进协会内部成员的沟通与沟通;组织实施各类棋类竞赛,筹备活动场地及活动所需物品。培训部

制定竞赛流程,竞赛规章,负责棋艺教学,棋队管理,棋谱记录和裁判工作。教授社员棋艺学问,培育棋手乐观参与各类棋艺竞赛,负责社团日常活动的棋类保管。外联部

负责本社团对外联络沟通工作,联系校内各个组织和校外各大院校进行学术沟通等对外沟通。组织对外合作活动以及对外校进行棋艺沟通,为本社团开展的各种活动拉赞助,活动的接待工作。

扩展阅读:计算机博弈之黑白棋

JAVA黑白棋之算法浅析

一、黑白棋人机博弈思想

1.棋局阶段应合理划分(一般分为三个阶段),开局应尽量用优秀的定式之所以要使用开局定式,个人的观点为:即使最顶级的机器能够从第一步始终搜寻到最终一步,也必定不能断定谁最终会赢,要不然这个嬉戏就没有存在的价值了。

基于上面的观点,必定走到某一种局面的时候,才可以断定输赢,当然这个输赢不是肯定的,更不是最终意义上的输赢,由于对方有可能不按最优路线行棋。于是我们便需要利用优秀的开局为自己争取尽可能大的优势,迫使对方失误或者为自己争取成功的保障。

2.稳定子具有肯定优势所谓稳定子,就是指再后续的行棋过程中始终不会被翻转的棋子。最明显的稳定子就是角位置的棋子,同时当角位置被占取之后,角四周的棋子,尤其是两条边上的,也会较简单成为稳定子。棋局终了时棋盘上的全部子都可以看做是稳定子。

当然,稳定子有肯定的优势,并不意味着我们见角就夺,比如斯通纳陷阱就是一个很好的例子。

3.内部子具有相对的优势

所谓内部子,就是被一方的棋子围困在内部的另一方的棋子。

内部子的优势主要体现在:①内部子是半稳定子或者稳定子,不易被对方吃掉;②拥有较多的内部子,可以提高己方的行动力(可下子位置的数量),限制对方的行动力,从而更简单设置陷阱,迫使对方走出很差的棋步,进而使自己占有肯定的优势。

4.边缘子具有相对的劣势所谓边缘子,可以看作是除去边角之外的四周有空位的棋子,或者可以理解为包围内部子且与内部子异色的四周有空位的棋子。

边缘子实际上是相对于内部子而言的,由于边缘子的劣势也恰好是与内部子相对的:①边缘子在现有棋局下多数是不稳定的,但在后续行棋过程中可能成为对方或者己方的稳定子;②为对方制造陷阱供应了更多的机会。

5.奇偶性理论所谓奇偶性,就是指假如在对弈过程中没有任何一方停步,那么当黑棋下完后,棋盘总会有奇数个空位,而当白棋下完后,棋盘总会有偶数个空位。

我们可以推断,假如没有任何一方停步,那么白棋会走完最终一步棋并应当略微占优肯定的优势。但假如有一方停步时,这个奇偶性就会颠倒过来,当再有一方停步的时候,奇偶性就又会恢复正常。

因此,黑棋总是盼望构造强制性的奇数次停步。同时,黑棋想要获得奇偶性的优势的另外一个可行的方法就是:建立一种这样的局面,使得每次黑棋下完之后棋盘上有且仅有奇数个拥有奇数个空位的空白区域,并且这些区域是白棋无法进入的,或者一旦白棋进入,黑棋就会拥有肯定的优势。

二、机器简单实现的评判棋局优劣的因素,以及估值函数的实现

既然要评判棋局的优劣,那么就必定要想破译密码那样把棋盘上全部棋子的分布转化成一个数值,以数值的大小来衡量己方的收益状况,而转化的方式就是估值函数。

一般估值的形式有以下两种:

①采纳概率的思想,数值的取值范围为,确定为胜局时值为1,败局时值为0,平局时值为0.5。假设当前无法推断输赢,对棋局的评估值计算后为a,那么综合值就是0.5+a。也可优化一下,把取值区间看做,这样确定胜局时值为1,败局时值为-1,平局时值为0。

②将概率思想中的实数整数化,即对概率值乘以INF,这样取值区间就变成了。

估值函数这个模块是整个程序中最核心的一个模块,之所以这样说,是由于无论怎样优化搜寻过程,在现有的条件下搜寻层数也是有限的,假如这个模块没有做好,很简单消失这样的过程:不能确定输赢,取最优-->……-->不能确定输赢,取最优-->发觉自己肯定会输。当然,我们期望的过程是这样的:不能确定输赢,取最优-->……-->不能确定输赢,取最优-->发觉自己肯定会赢。

想要尽可能消失我们期望的过程,那么一般便有三种措施:一是选用优秀的开局定式,二是提高估值函数模块的性能,三是通过对搜寻算法的优化来加深搜寻层数。

对于选用优秀的开局定式,是受到百度百科上对一款外国棋力顶尖的黑白棋软件的简介的启发,但对于如何存储和实现开局定式,我还只是处于萌芽阶段,在此就不妄加分析了。对于对搜寻算法的优化,我会放在下一个版块来阐述一些我的学习的心得。

下面就主要阐述一下我对如何让机器对人考虑机博弈思想并实现对棋局进行评估的一些看法,也即对提高估值函数这个模块的性能的一些看法。

1.对稳定子的考虑

对稳定子的考虑在理论上是很有意义的,由于最终棋局比的实际上还是稳定子的数量,但对稳定子进行推断这个过程是不简单实现的,而且我在一个论坛上也看到有个帖子说,在高强度的对局中,一般都要四五十步之后才会消失稳定子,而这时搜寻函数已经可以搜寻究竟了。基于这一点,对稳定子推断的意义也就体现在40-60步中还不能确定谁输谁赢的状况。

考虑到这些,我打算放弃对稳定子的推断而转化成两个部分,一个是对边角位置利用权值表去推断己方的收益,另一个就是对中间部分的位置,转化成对内部子与边缘子的考虑,由于内部子、边缘子与稳定子之间是有肯定的联系的。

2.对边角位置的考虑

说起权值表,我们确定很简单想到角位权值大,而C位(与角相邻的边上的位置)和星位(与叫相邻的除去C位之后剩下的那个位置)的权值小。但对权值表的设定过程中,还要留意一些细节:

①为了便利计算,不妨把对己方有力的位置的权值取正,对己方不利的位置的权值取负,这样在运算时只需要各个值取相反数,就成为了对方在行棋时对我方收益而言的一张权值表,这样便只需要做一张权值表就可以了。

②对于各个位置权值的确定是要综合各种状况并不断试验的,但同时也要符合一些基本的规律。比如我们设角位的权值为a(a>0,对己方有利),星位的权值为b(b-b,由于假如a+bb,也就是说对方同时占角位和星位为我们带来的收益要大于我们只占一个星位而来带来的收益(这里的收益都是负值),也就是说,电脑宁肯让对方占一个角位和一个星位,自己也不会去只占那个星位而不占角位,这明显在大部分状况下是不符合规律的。

结合我个人针对自己的程序研发的权值表以及一张外国人研发的权值表,对其中有些值进行了修改,生成了一张新的权值表,也就是在v4.7中使用的权值表。权值表如下:

{100,-5,10,5,5,10,-5,100},{-5,-45,1,1,1,1,-45,-5},{10,1,3,2,2,3,1,10},{5,1,2,1,1,2,1,5},{5,1,2,1,1,2,1,5},{10,1,3,2,2,3,1,10},{-5,-45,1,1,1,1,-45,-5},{100,-5,10,5,5,10,-5,100}3.对内部子和边缘子的考虑

由于内部子和边缘子是相对的,在对程序要求不是很高的状况下,我们可以只讨论其中一方。同时,结合实战阅历,边缘子数量对棋局的影响程度要高于内部子,因而我们不妨抓住主要冲突去讨论边缘子的多少。

在对边缘子的讨论过程中,我又研发了另一种间接统计边缘子的方式,即统计一个边缘子周边的空格数,然后取相反数(边缘子越多,肯定程度上对己方越不利)作为这个边缘子的权值。之所以这么做,是盼望能够融合对行动力(可落子位置的总数)的考虑,由于边缘子四周空位的数量肯定程度上体现了对方行动力的大小。但后来在实际应用过程中,这种想法并没有达到我预想的效果,可能是由于对不同的状况,二者之间的线性关系并不明显,于是我便转而只单纯地去考虑边缘子的数量。

4.对奇偶性理论的考虑由于对于这个部分,代码实现起来比较困难,所以我并没有把这个部分的理论应用到我的程序之中。但就百度百科上的资料显示,国外一个非常强大的黑白棋软件是把棋手行棋是否具有奇偶性也纳入了考虑范围之内的。

5.对可以搜到最终结果的状况的考虑当机器可以搜到最终结果时,我们就不宜再用权值表等统计权值的方法来衡量棋局的优劣,由于最终子数多者肯定获胜,但依棋局的估值函数,算出的权值却不肯定时较大者。

因此,当可以搜寻到最终结果时,我们便需要对估值函数的返回值做修改:①假如我们选择的是取值为的实数概率的估值函数,那么当确定自己获胜的时候就可以返回1,失败时返回-1,平局时返回0。当然,更为便利的方法就是直接返回己方与对方的棋子数之差,同时,出于对规章的考虑,我们也要这么做,由于现行的规定是:双方分先下偶数局数的棋(如4局),胜1分,负0分,和0.5分,分数多的取胜,假如分数一样,就以棋子数目来计算胜败。于是,确定为赢时,我们赢得棋子越多越好,而确定会输的时候,输得越少越好。

②假如我们选择的是取值为的整数化概率的评估函数,那么当确定自己获胜时返回INF+己方与对方棋子之差,确定自己失败时则返回-INF+己方与对方棋子之差,平局时返回0。

6.估值函数的实现(也即对各项影响棋局因素的权值进行合并)当可以搜寻到最终结果的状况我们已经在前面争论过了,因而在这里我就主要阐述一下对在搜寻过程中无法得到最终结果时估值函数的实现的一些看法。

我们不妨设各项因素的权值分别为a1,a2……an,假如采纳的是实数概率值的估值函数,那么一般同时满意-1Max节点,由于这个节点的值是其子节点全部值中的最大值,而把每一人要走的节点叫做Min节点,由于这个节点的值是其子节点全部值中的最小值。这样得到的根结点的值,就是机器走这一步的期望的最大收益。

基于这样的算法,我们进行迭代深搜是可以实现的。深搜函数的返回值对于Max节点而言就是全部子节点的最大值,而对于Min节点而言就是全部子节点的最小值。

同时,在深搜过程中,我们要不断更新、记录棋盘的状态,但对于黑白棋而言,比较麻烦的一个问题就是自己每下一步,不仅会转变己方棋子的分布,同时还会转变对方棋子的分布,这样对于将下过一个棋子的棋盘还原成没下之前的棋盘是非常困难的,因而我们不能采纳传统的深搜函数的形式(对访问位置做标记,深搜并得到返回值,抹去对访问位置的标记),于是我们在迭代的时候就要不断new一个数组来存储变化之后的棋盘,并作为深搜函数的参数,传递给下一个节点。

由于深搜节点的数量是指数级增长的,假如我们不对深搜层数进行肯定的限制,那么程序的运行时间将是一个很浩大的数字。对于未加优化的的搜寻,假如限定30s之内要行棋的话,最坏状况也只能搜寻5层左右,因而我们必定要对Min-Max搜寻算法进行优化,来提升程序的棋力,一种有效的方法就是对Min-Max进行α-β剪枝优化,也就是接下来要争论的α-β搜寻。

现在先抛开优化搜寻算法的问题,我们在使用Min-Max搜寻算法编出的程序时,会发觉往往最终结局电脑往往会很快就能走出一步棋,缘由在于到了后期,博弈树每层的节点数很变得很少,而这时机器完全有时间做出更深层次的搜寻,因而我们可以采纳用限定搜寻节点的方式来取代限定搜寻层数的方式进行深搜,这样我们就可以充分利用现有的时间,当节点多时就少搜几步,而当节点少时就多搜几步。详细实现的方法就是取一个变量branches记录当前节点还可以向下搜寻的总节点数,而对当前节点的子节点进行深搜时,传递过去的参变量就变成了branches除以当前节点拥有的子节点的数量,当branches为0或者双方都无子可下时,就要调用估值函数了。

2.α-β搜寻

前面已经说过了,α-β搜寻实际上就是运用α-β剪枝优化后的Min-Max搜寻,其基本的极大微小的思想是不变的。

我们首先引入两个变量α、β,表示当前节点在前面的深搜过程中,依据子节点的返回值来估量出的当前节

点最终的结果的下限和上限。

以下图为例,我们来争论一下α-β搜寻剪枝的原理:

首先,我们初始化A点的下限为-INF,上限为INF,要知道A点的值就要搜寻B点,搜寻B点后得知B的值为6,那么我们就可以更新A点的下限为6,由于A点是Max节点,也即A点的α值为6。这时我们连续搜寻C点,我们将A点的下限6和上限INF同时作为参数传给子节点C,明显C的值至少要在6和INF之间A才有可能更新成C的值。要知道C点的值我们就要连续搜寻E点,同样把下限6和上限INF传递给点E,明显E要在6和INF之间,C点的值才有可能在6和INF之间,那么A点才有可能更新成C点的值。而搜寻E点时我们发觉E点值为-2,不在6和INF之间,这时我们还有必要搜寻F和G点吗?明显没有必要,由于反正A是不会更新成C的值了,我们当然没必要多搜寻F和G了。

上面不去搜寻F和G的过程就是剪枝的过程,准确来说是α剪枝的过程。下面就给出α剪枝和β剪枝的定义:

①假如当前节点是Min节点,当前节点的父节点是Max节点,那么当当前节点的一个子节点的值小于当前节点的α值时,那么当前节点的其余子节点就不用搜寻了,这个过程称为α剪枝过程。

②假如当前节点是Max节点,当前节点的父节点是Min节点,那么当当前节点的一个子节点的值大于当前节点的β值时,那么当前节点的其余子节点就不用搜寻了,这个过程称为β剪枝过程。

通过上面的实例,我们也观看到,当前节点α、β的值是不断依据子节点的返回值进行更新的,并作为深搜函数的参数进行下一个子节点的深搜。其

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论