毕业设计论文说明书正文
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1 引言
1.1 开发背景
据说,拈游戏起源于中国,英文名字叫做“NIM”,是由话“拈”(取物之意)音译而来,经由当年到美洲打工的华人流传出去,这个游戏一个常见的变种是将十二枚硬币分三列排成[3,4,5]再开始玩,我们这里讨论的是一般意义上的“拈”游戏。
另外一种形式也称为取石子游戏,取石子问题是个家喻户晓的游戏。它的问题是这样的:“有一堆小石子共100颗,甲乙两人轮流取,每次可取1至10颗,取完的人为胜者,若甲先取乙后取,谁能获胜?”
天下的游戏五花八门,必胜策略成为人们眼中的救星。而对必胜策略是否存在的具体阐述是在博弈论当中。博弈论是研究竞争中参加者为争取最大利益应当如何做出决策的数学方法[1]。。
博弈论又被称为对策论,是研究具有斗争或竞争性质现象的理论和方法,它既是现代数学的一个新分支,也是运筹学的一个重要学科。
博弈要素:
(1)局中人:在一场竞赛或博弈中,每一个有决策权的参与者成为一个局中人。只有两个局中人的博弈现象称为“两人博弈”,而多于两个局中人的博弈称为“多人博弈”;
(4)博弈涉及到均衡:均衡是平衡的意思,在经济学中,均衡意即相关量处于稳定值。在供求关系中,某一商品市场如果在某一价格下,想以此价格买此商品的
人均能买到,而想卖的人均能卖出,此时我们就说,该商品的供求达到了均衡。所谓纳什均衡,它是一个稳定的博弈结果[2]。
该课题主要是通过“拈游戏”的各种成功策略来对博弈论进行研究,针对“拈游戏”来研究几种博弈论的方法。
通常的Nim游戏的定义是这样的:有若干堆石子,每堆石子的数量都是有限的,合法的移动是“选择一堆石子并拿走若干颗(不能不拿)”,如果轮到某个人时所有的石子堆都已经被拿空了,则判负(因为他此刻没有任何合法的移动)。
本文主要的研究容包括:
(1) 完成人-机拈游戏的设计;
(2) 游戏开始前设计必要参数:每堆石子个数,堆的数目,人人方式,还是人机方式;
1.2 国外发展状况
在所有双人对局游戏中,拈游戏是极其古老且饶富兴趣的一个课题。据说,拈游戏源自中国,经由被贩卖到美洲的奴工们外传。辛苦的工人们,在工作闲暇之余,用石头玩游戏以排遣寂寞。流传到高级人士,则用便士(Pennils),在酒吧柜台上玩。
直到本世纪初,哈佛大学的数学教授Chales Leonard Bouton提出一篇极详尽的分析和证明,利用数的二进位表示法,在理论上解答了这个古老游戏的一般法则:对任意列数的铜板,每列有任意枚数,如何取得致胜之道[3]。
(2)和为奇式时,总可以在这些数中找到一个数,将它减去一个适当的数后,使所得的差与其他各个数的不进位加法的和一定为偶式。
利用这两个性质,在游戏中能获胜时就必定能胜。原理是:石子取完后,各堆石子数都是0,不进位加法是偶式。甲要取胜,在每次取石子前,各堆石子数的不进位加法和应为奇式。取石子时,要选择堆和取的个数,使剩下的石子数的不进位加法和为偶式。随后不管乙怎么取,取后剩下的石子数的不进位加法总是奇式。所以,取胜的诀窍就是:把偶式留给对方[4]。
二进制异或运算是不进位的加法运算:0∧0=0,0∧1=1,1∧0=1,1∧1=0。现定义:二进制数做不进位加法,和为0时,称为偶式;和不为0时,称为奇式。容易发现,偶式各个加数相同位上1的个数都是偶数,奇式各个加数相同位上1的个数至少还有一个数奇数。
任意一个二进制数的不进位加法有两个重要的性质:
(1)和为偶式时,在这些数中任取一个数,减去一个小于等于这个数的数,所得的差和其他各个数的不进位加法的和一定为奇式。
(3) 生成石子堆;
(4) 移动石子;
(5) 判断结果。
2
C++ Builder优化的32位原码(Native Code)编译器建立在Borland公司久经考验的编译技术基础之上,提供了高度安全性、可靠性、快速性的编译优化方法,完全编译出原始机器码而非中间码,软件执行速度大大提高。在编译和连接过程中,C++ Builder自动忽略未被修改的原代码和没有使用的函数,从而大大提高了编译和连接速度。C++ Builder的CPU透视工具包括五个独立的小面板,可以对正在运行程序从部进行深层次的了解。另外C++ Builder还提供了一个专业开发环境所必需的命令行工具,以帮助建立C++程序或者准备编译和连接的程序进行更精细的控制。
C++ Builder可以编译所有符合ANSI/ISO标准的原代码,支持最新ANSI C++/C语言特征:模板(Templates)、例外(Exceptions)、运行类型信息(Runtime Type Information)、Namespaces等,另外它还可以使用标准C++库且支持标准模板库(STL),以前的所有C++/C原代码可以不经过修改,直接移植到C++ Builder环境下来。C++ Builder完全支持32位长文件名、多线程程序设计,且允许程序员直接调用任何Win95和NT API函数。
(2)策略:一局博弈中,每个局中人都有选择实际可行的完整的行动方案,即方案不是某阶段的行动方案,而是指导整个行动的一个方案,一个局中人的一个可行的自始至终全局筹划的一个行动方案,称为这个局中人的一个策略。如果在一个博弈中局中人都总共有有限个策略,则称为“有限博弈”,否则称为“无限博弈”;
(3)得失:一局博弈结局时的结果称为得失。每个局中人在一局博弈结束时的得失,不仅与该局中人自身所选择的策略有关,而且与全局中人所取定的一组策略有关。所以,一局博弈结束时每个局中人的“得失”是全体局中人所取定的一组策略的函数,通常称为支付函数;
1.3 本课题的研究容
本课题研究的题目是:拈游戏的设计。
Nim游戏是组合游Βιβλιοθήκη Baidu(Combinatorial Games)的一种,准确来说,属于“Impartial Combinatorial Games”(以下简称ICG)。满足以下条件的游戏是ICG:
(1) 有两名选手;
(2) 两名选手交替对游戏进行移动(move),每次一步,选手可以在有限的合法移动集合中任选一种进行移动;
(3) 对于游戏的任何一种可能的局面,合法的移动集合只取决于这个局面本身,不取决于轮到哪名选手操作、以前的任何操作、骰子的点数或者其它什么因素;
(4)如果轮到某名选手移动,且这个局面的合法的移动集合为空(也就是说此时无法进行移动),则这名选手负。根据这个定义,很多日常的游戏并非ICG。例如象棋就不满足条件(3),因为红方只能移动红子,黑方只能移动黑子,合法的移动集合取决于轮到哪名选手操作[5]。
1.1 开发背景
据说,拈游戏起源于中国,英文名字叫做“NIM”,是由话“拈”(取物之意)音译而来,经由当年到美洲打工的华人流传出去,这个游戏一个常见的变种是将十二枚硬币分三列排成[3,4,5]再开始玩,我们这里讨论的是一般意义上的“拈”游戏。
另外一种形式也称为取石子游戏,取石子问题是个家喻户晓的游戏。它的问题是这样的:“有一堆小石子共100颗,甲乙两人轮流取,每次可取1至10颗,取完的人为胜者,若甲先取乙后取,谁能获胜?”
天下的游戏五花八门,必胜策略成为人们眼中的救星。而对必胜策略是否存在的具体阐述是在博弈论当中。博弈论是研究竞争中参加者为争取最大利益应当如何做出决策的数学方法[1]。。
博弈论又被称为对策论,是研究具有斗争或竞争性质现象的理论和方法,它既是现代数学的一个新分支,也是运筹学的一个重要学科。
博弈要素:
(1)局中人:在一场竞赛或博弈中,每一个有决策权的参与者成为一个局中人。只有两个局中人的博弈现象称为“两人博弈”,而多于两个局中人的博弈称为“多人博弈”;
(4)博弈涉及到均衡:均衡是平衡的意思,在经济学中,均衡意即相关量处于稳定值。在供求关系中,某一商品市场如果在某一价格下,想以此价格买此商品的
人均能买到,而想卖的人均能卖出,此时我们就说,该商品的供求达到了均衡。所谓纳什均衡,它是一个稳定的博弈结果[2]。
该课题主要是通过“拈游戏”的各种成功策略来对博弈论进行研究,针对“拈游戏”来研究几种博弈论的方法。
通常的Nim游戏的定义是这样的:有若干堆石子,每堆石子的数量都是有限的,合法的移动是“选择一堆石子并拿走若干颗(不能不拿)”,如果轮到某个人时所有的石子堆都已经被拿空了,则判负(因为他此刻没有任何合法的移动)。
本文主要的研究容包括:
(1) 完成人-机拈游戏的设计;
(2) 游戏开始前设计必要参数:每堆石子个数,堆的数目,人人方式,还是人机方式;
1.2 国外发展状况
在所有双人对局游戏中,拈游戏是极其古老且饶富兴趣的一个课题。据说,拈游戏源自中国,经由被贩卖到美洲的奴工们外传。辛苦的工人们,在工作闲暇之余,用石头玩游戏以排遣寂寞。流传到高级人士,则用便士(Pennils),在酒吧柜台上玩。
直到本世纪初,哈佛大学的数学教授Chales Leonard Bouton提出一篇极详尽的分析和证明,利用数的二进位表示法,在理论上解答了这个古老游戏的一般法则:对任意列数的铜板,每列有任意枚数,如何取得致胜之道[3]。
(2)和为奇式时,总可以在这些数中找到一个数,将它减去一个适当的数后,使所得的差与其他各个数的不进位加法的和一定为偶式。
利用这两个性质,在游戏中能获胜时就必定能胜。原理是:石子取完后,各堆石子数都是0,不进位加法是偶式。甲要取胜,在每次取石子前,各堆石子数的不进位加法和应为奇式。取石子时,要选择堆和取的个数,使剩下的石子数的不进位加法和为偶式。随后不管乙怎么取,取后剩下的石子数的不进位加法总是奇式。所以,取胜的诀窍就是:把偶式留给对方[4]。
二进制异或运算是不进位的加法运算:0∧0=0,0∧1=1,1∧0=1,1∧1=0。现定义:二进制数做不进位加法,和为0时,称为偶式;和不为0时,称为奇式。容易发现,偶式各个加数相同位上1的个数都是偶数,奇式各个加数相同位上1的个数至少还有一个数奇数。
任意一个二进制数的不进位加法有两个重要的性质:
(1)和为偶式时,在这些数中任取一个数,减去一个小于等于这个数的数,所得的差和其他各个数的不进位加法的和一定为奇式。
(3) 生成石子堆;
(4) 移动石子;
(5) 判断结果。
2
C++ Builder优化的32位原码(Native Code)编译器建立在Borland公司久经考验的编译技术基础之上,提供了高度安全性、可靠性、快速性的编译优化方法,完全编译出原始机器码而非中间码,软件执行速度大大提高。在编译和连接过程中,C++ Builder自动忽略未被修改的原代码和没有使用的函数,从而大大提高了编译和连接速度。C++ Builder的CPU透视工具包括五个独立的小面板,可以对正在运行程序从部进行深层次的了解。另外C++ Builder还提供了一个专业开发环境所必需的命令行工具,以帮助建立C++程序或者准备编译和连接的程序进行更精细的控制。
C++ Builder可以编译所有符合ANSI/ISO标准的原代码,支持最新ANSI C++/C语言特征:模板(Templates)、例外(Exceptions)、运行类型信息(Runtime Type Information)、Namespaces等,另外它还可以使用标准C++库且支持标准模板库(STL),以前的所有C++/C原代码可以不经过修改,直接移植到C++ Builder环境下来。C++ Builder完全支持32位长文件名、多线程程序设计,且允许程序员直接调用任何Win95和NT API函数。
(2)策略:一局博弈中,每个局中人都有选择实际可行的完整的行动方案,即方案不是某阶段的行动方案,而是指导整个行动的一个方案,一个局中人的一个可行的自始至终全局筹划的一个行动方案,称为这个局中人的一个策略。如果在一个博弈中局中人都总共有有限个策略,则称为“有限博弈”,否则称为“无限博弈”;
(3)得失:一局博弈结局时的结果称为得失。每个局中人在一局博弈结束时的得失,不仅与该局中人自身所选择的策略有关,而且与全局中人所取定的一组策略有关。所以,一局博弈结束时每个局中人的“得失”是全体局中人所取定的一组策略的函数,通常称为支付函数;
1.3 本课题的研究容
本课题研究的题目是:拈游戏的设计。
Nim游戏是组合游Βιβλιοθήκη Baidu(Combinatorial Games)的一种,准确来说,属于“Impartial Combinatorial Games”(以下简称ICG)。满足以下条件的游戏是ICG:
(1) 有两名选手;
(2) 两名选手交替对游戏进行移动(move),每次一步,选手可以在有限的合法移动集合中任选一种进行移动;
(3) 对于游戏的任何一种可能的局面,合法的移动集合只取决于这个局面本身,不取决于轮到哪名选手操作、以前的任何操作、骰子的点数或者其它什么因素;
(4)如果轮到某名选手移动,且这个局面的合法的移动集合为空(也就是说此时无法进行移动),则这名选手负。根据这个定义,很多日常的游戏并非ICG。例如象棋就不满足条件(3),因为红方只能移动红子,黑方只能移动黑子,合法的移动集合取决于轮到哪名选手操作[5]。