下面要介绍的这个游戏,版本繁多,据说本源自中国,称为拣石子游戏 (Wiki译为”picking stone”,再翻译成中文就是拣小编Stone的不是,不好意思瞎扯远了…),其实就是两个人面前放一堆石头,然后轮流取出若干个,谁剩下拿最后一块石头的就算输了。
当然,大家不一定非得拣石头,也可以取火柴,对若干个也可以按不同游戏有不同的定义,在这里就规定为每次一方必须取1-3根火柴,然后总数也有规定,这里定为11根火柴。
在下面这个游戏里,你就可以和电脑对局(点击”play”),但电脑始终是先手,不过你仍然可以设法剩下最后一根火柴而轻松取胜。在这个过程中,你可以注意到第一表格会帮助记录一下取火柴的情况。
在游戏之前,你也可以先训练一会儿电脑(点击”train” 若干次 > 10),你可以观察到第二个表格积分的变化,这个表格可以帮助电脑判断怎样是个优化的选择。这个训练过程其实也就是把游戏的双方都设为了电脑,然后把双方的每一次的取火柴情况都作以记录(就如第一个表格中的变化情况),到最后得知胜方的时候,就把胜方的取法都积分加一,负方则减一。所以如果只是训练次数很少,积分可能只是随机的表现,但如果是20次以上,就可以从第二个表格看出必胜的规律。这时候,再和电脑游戏,就再也无法取胜了。(当然这个游戏本身也就是先下手为强的游戏)
How many matches would you pick when there are ? matches left (A/B: Computer)
A reference table to help the computer to make a decision
曾经在别的书上看到过这个游戏,这次上课的时候再次听到这个游戏,就感觉应该挺容易写成程序(用了Google Web Toolkit写成的javascript),而且觉得这是一个很好的机器学习的例子,所以就尝试在这儿试了一下,希望大家喜欢:)
Comments 2
真高兴又看到你们的blog更新了
Posted 23 Mar 2008 at 10:56 pm ¶哈,仿佛很不好意思的说…
Posted 24 Mar 2008 at 9:19 am ¶Post a Comment