大概是考数电前一周,5月9号左右吧……BIG God问我有没有兴趣一起写一个打德州扑克的AI。貌似很有意思啊,那就写吧。然后拉上了MIDDLE God一起写
因为三个人一周之后都有考试,要预习了……所以先简单脑补了一下德州扑克的规则,还有AI在打德州扑克的时候可能的策略。大概知道了是要算各种概率,然后根据概率确定AI的决策。
话说,这时候还完全不明白德州扑克是怎么打啊……只能一边看规则和各种打法一边抱队友大腿了orz……而且之前几乎从来没玩过牌类游戏……
首先商量了一下要用什么语言写。可选的语言有C, C++, Java, Python。因为之前Java写得习惯,而C和C++几乎只用来刷题,所以更倾向于用Java写。然而两个队友都不会,而且赶脚Java的效率比较低(以后谁再无脑和我说Java就是比C和C++慢我跟谁急……呵呵呵呵真的那么需要榨干机器的性能么)所以自然就用C++了。比赛要求程序在Ubuntu下运行,所以windows环境再次蛋碎了一地……交叉编译没搞过,而且没有运行环境,所以就上虚拟机吧。
考完数电之后,离初赛deadline还剩半个月,开始写大概的框架。通信部分由BIG God负责,我主要写判断牌型和处理各种牌出现的概率(忽然感觉好水……)。MIDDLE God构思程序的决策方式。先是写出了一个策略比较简单的版本,然后继续改进策略,考虑其他玩家可能的牌型。结果后来的版本各种bug没有解决,也没打过之前的版本……所以就按之前的版本交了。
deadline过后几乎忘了这件事。某一个堕落的下午,正在玩极品飞车的时候忽然得知可以复赛了……第一反应是卧槽竟然进复赛了?继续跑了两圈冷静一下,关了游戏,接下来该好好写了。找波哥聊了一下,然后看了知网上找来的论文,打算按这篇论文的思路写。MIDDLE God脑补了另一种方法,貌似很科学,就实现这两种然后交比较好的……没想到这个时候效率就开始锐减。先是笔记本在运行虚拟机的时候各种怒跪……加上论文看不懂,开始有点焦躁了。最后终于决定入新笔记本,水完开箱贴之后就继续撸代码了,先是实现了MIDDLE God的想法,还是打不过初赛交的版本(-_-#)然后一知半解地实现论文里的写法……这时候时间已经不多了。
13号那天还有很多没写……只能晚上熬夜写了。到宾馆之后捋了一下程序的流程,然后强行写到3点,搞定了大部分要用到的函数。第二天早上去复赛现场时候的状态简直日了狗……队友肯定看到我是一脸毛都不知道的表情……10点多的时候奇迹般把所有函数都拼起来了,也可以编译运行了。打葫芦娃不算好,偶尔会很惨……但只有这个了,还是交吧。
最后发生了最狗血的事情……MIDDLE God在瞪眼法debug的时候发现一个函数没有调用,意味着整个学习算法残了……剩十几分钟,终于还是没有搞定这个bug。想撞墙了……幸好没有被队友打。吃午饭的时候说,只能看脸了,毕竟队友这么帅。
然后见识了一下华为研究所的奢侈餐厅,在赛场听了下讲座,然后参观了屌炸天的自动化测试……最后公布成绩的时候果然呵呵,脸也不好……也看到了清华的队伍最后实力逆袭干掉了之前第一的队伍……只能在下面默默膜拜各路大神/*说的好像最后没写残就会打得很好一样……QxQ……求不被打*/
--------------------
算法还没预习竟然在写博客……QAQ
刷题的时候,一个人写一份代码,在单个文件里,不考虑网络通信多线程图形界面等等乱七八糟的问题,只需要和内存打交道,读入规定好格式的数据,按规定的格式输出。重点终究还是算法和解题的思路,程序只是体现思维的工具。(说的好像其他程序就不是一样……)面对面试的算法题很轻松,然而面对各种实际的项目,还是图样图森破了。虽然写Java习惯了,但是仍然完全驾驭不了C/C++。之前习惯了一个jar包搞定一切,面对各种分散的头文件和源文件很凌乱啊……三个人一起写,各种更改也很凌乱啊……没有Git只能手动进行版本控制啊……之前几乎没有多人合作的经验,现在发现多人合作也很不容易……
写程序之前,要先把每个细节想清楚,然后实现整个程序。忽然觉得比较致命的一点是最后在宾馆还有各种新的想法,程序的架构还在变化……难免最后写残了……写出来的代码并不重要,重要的是想明白代码要怎么写出来。
最后程序各种挂掉,然后虚拟机也挂掉的时候才意识到鲁棒性的重要性……
华为的确是个很牛(tu)逼(hao)的公司,研究所的氛围很不错嗯。不对……这哪里像是研究所啊……
人老了,熬夜熬不动了……还是睡觉吧( ̄o ̄) . z Z