全国大学生计算机博弈大赛总结:苏拉卡尔棋

比赛结果

2014年8月18日至20日 “成理杯”全国大学生计算机博弈大赛暨第八届全国计算机博弈锦标赛在成都理工大学举行。咧威所在的苏拉尾巴团队荣获苏拉卡尔塔棋比赛项目的二等奖。

苏拉卡尔塔棋比赛项目的二等奖

参赛感受

刚开始加入博弈小组的时候,咧威只学过大一上课教授的C++ 知识,也仅仅是停留在只会课后练习题的水平(部分习题解答)。然而,如何将所学的知识应用到实际中,或者是如何写出有趣的程序,咧威是一点经验都没有。

这次比赛给了咧威团队协作,独立完成一个项目的机会,懂得如何跟队友、老师沟通,怎样根据开发过程中遇到的问题去找资料解决困难。咧威从最简单的井字棋入手(相关文档),巩固了之前学的编程知识。课堂上没有教如何编写图形界面,于是咧威就自学Qt 图形界面库,去图书馆借书入门,然后根据开发功能的需求,查官方文档。遇到问题,就拜托Google。从刚开始的茫然无措,然后自己慢慢摸索;从简单的命令行界面到漂亮的图形界面,从简单的随机算法到可以人机对战的博弈算法(Alpha–beta 减枝), 从纯粹的记忆知识,到在实践中学习。这个过程中,锻炼了自学能力和提高了编程技术。

比赛的过程中,咧威的算法不是十分优秀,只能说是中规中矩,比较稳定,在小组赛败给了北科大和北理工(下图左边的小白)的团队,位于第三名。有些学校的程序虽然算法好,但是不稳定,在即将赢棋的时候崩溃了。在算法、程序设计方面,稳定性第一位,其次是算法的提高。咧威们团队还有一个优点是,程序界面很优美、简洁,比赛期间得到其他学校老师的赞许。

苏拉卡尔塔棋比赛项目的二等奖

编程是个技术活,需要实实在在地动手实践才能掌握;编程更是艺术活,仅仅能够运行是不够的,还得打磨,重构,让程序高效地运行,让代码简洁优雅。以艺术的角度看待编程,这仅仅是靠课堂讲授的内容是体会不到的。必须亲自敲出代码,而且当数量达到一定程度之后,才能体会到好代码与烂代码的区别,从而提高编程的能力。

这种需要实实在在的编程能力的比赛,有趣、且富有挑战性,体现了“纸上得来终觉浅,绝知此事要躬行”的古训。就算明白了书上算法的原理,也未必能够根据实际需求把算法实现。是骡子还是马,博弈比赛提供了试金石的机会。

软件的起源及成长过程

苏拉尾巴于2014年初开发,一开始采用Qt 作为图形界面的框架,所用到的图片来自Github 上的sy112233/Surakarta 开源项目,但是没有参考它的源代码。

5月份开始使用 git 作为代码的版本控制软件。

7月份完成搜索、估值函数,还有选择先后手的功能。

8月份完成吃子的动画效果,悔棋和计时功能,并完善程序。

苏拉卡尔塔棋比赛项目的二等奖

软件参考文献

  1. 霍亚飞.《Qt Creator快速入门》,ISBN:978-7-5124-0783-1
  2. Qt 官方文档
  3. 东北大学机器博弈研究室, 苏拉卡尔塔棋博弈技术分析, 2009.5
  4. Mark Allen Weiss,张丽萍译,数据结构与问题求解(C++)版,ISBN: 7-302-11166-9
  5. 李淑琴等,苏拉卡尔塔博弈系统中评估函数的研究,27(6), 2012, 42-46