还记得“石头剪刀布”吗?这项此前被讥为“吃饱了撑的”的研究,入选了“麻省理工学院科技评论2014年度最优”,成为中国首次入选“麻省理工科技评论”的社科领域成果。
这项由浙江大学、浙江工商大学、中国科学院组成的跨学科团队共同完成的成果,叫作“石头剪刀布”中的社会循环与条件响应,解释了“剪刀石头布”的制胜原理。“石头剪刀布”研究采用经济学控制性实验方法—也就是实验经济学的方法,利用“石头剪刀布”这一家喻户晓而又在博弈论中处于元博弈模型的框架进行研究。这其中,包含了物理学、心理学、神经科学等领域的内容。
最简单的事情后面,却隐藏这不简单的道理,让人嗟叹,让人感叹。
研究,是为了发现规律。发现规律,方能运用规律,将其作用于社会生活,以及开发产品中去。研究要针对问题,可以是大问题,也可以是小问题,甚至只是小问题中的一个方面。研究所针对的问题,不能够面面俱到,常常通过抽象和简化,去除表象的干扰,找到问题的核心,直达其本质地进行下去。
类似的,了解些博弈论的人,该知道“囚徒困境”、“鹰鸽博弈”等很多有意思的问题,而这样的问题,在一些人看来,当然是毫无价值。要意识到,在现实生活中,将问题做些分类,会发现这些貌似浅显的问题,代表的就是一类问题。这样的好玩的小问题,是一类大问题的抽象。
不止在科学研究中,在工程研究中,其实也有类似的思路。比如谈到“机器人足球”,科学家提出要在2050年要造出一支机器人组成的足球队,打败人类的世界冠军队,千万别以为人类就是没事干造机器找自虐。组建机器人足球队,其真实意图是借此其中涉及的问题,在计算机技术、自动化技术、机电一体化技术、人工智能技术、模式识别技术等多个方面获得突破,在机器人制作、材料科学、自动决策、智能协商等领域,产生能够延伸到其他领域的有价值的成果。
我对“石头剪子布”没有做过研究,但直观感觉,这就是一个研究的好问题,有明确的规则,而且还有可贵的“简单性”。媒体似乎更在意用“标题党”吸引眼球,公众也就被忽悠着放出让人发笑的谩骂。
想起了我成天忙于破解的“学而无用论”。在校的大学生,就是将“直接之用”看得太重了。凡是向抽象层面绕个弯子去追本质的内容,有更大用,有更深远意义的知识载体,是该看到其价值的。这样的抽象能力,也本该是大学生要具备的。
下面给出一个用python编写的石头剪子布的小脚本:
# -*- coding: utf-8 -*-
from PyQt4.QtGui import *
from PyQt4.QtCore import *
import sys,random
QTextCodec.setCodecForTr(QTextCodec.codecForName("utf8"))
class GameUi(QDialog):
def __init__(self,parent=None):
super(GameUi,self).__init__(parent)
self.guess_list = ['石头', '剪刀', '布']
self.guize = [['石头', '剪刀'], ['剪刀', '布'], ['布', '石头']]
self.setWindowTitle(self.tr("石头剪刀布"))
self.Total = 0
self.YouWin = 0
self.YouLose = 0
#选项按钮
StonePushButton = QPushButton(self.tr("石头"))
ScissorsPushButton = QPushButton(self.tr("剪刀"))
ClothPushButton = QPushButton(self.tr("布"))
#结果显示
ResultLabel = QLabel(self.tr("结果:"))
Computer = QLabel(self.tr("电脑:"))
Statistics_Label = QLabel(self.tr("统计"))
Total_Label = QLabel(self.tr("总局数:"))
self.TotalStat = QLabel()#玩的局数标签
YouWin_Label = QLabel(self.tr("你赢了:"))
self.YouWinStat = QLabel()#赢得局数标签
YouLose_Label = QLabel(self.tr("你输了:"))
self.YouLoseStat = QLabel()#你输的局数
self.Result = QLabel()#结果显示标签
self.ComputeResult = QLabel()#电脑出什么
#界面布局
layout=QGridLayout()
layout.addWidget(StonePushButton,0,0)
layout.addWidget(ScissorsPushButton,0,1)
layout.addWidget(ClothPushButton,0,2)
layout.addWidget(Computer,1,0)
layout.addWidget(self.ComputeResult,1,1)
layout.addWidget(ResultLabel,2,0)
layout.addWidget(self.Result,2,1)
layout.addWidget(Statistics_Label,3,1)
layout.addWidget(Total_Label,4,0)
layout.addWidget(self.TotalStat,4,1)
layout.addWidget(YouWin_Label,5,0)
layout.addWidget(self.YouWinStat,5,1)
layout.addWidget(YouLose_Label,6,0)
layout.addWidget(self.YouLoseStat,6,1)
self.setLayout(layout)
self.connect(StonePushButton,SIGNAL("clicked()"),self.Stone)
self.connect(ClothPushButton,SIGNAL("clicked()"),self.Cloth)
self.connect(ScissorsPushButton,SIGNAL("clicked()"),self.Scissors)
def Stone(self):
self.computer = random.choice(self.guess_list)
self.ComputeResult.setText(self.tr(self.computer))
self.people='石头'
self.Total+=1
self.judge()
def Scissors(self):
self.computer = random.choice(self.guess_list)
self.ComputeResult.setText(self.tr(self.computer))
self.people='剪刀'
self.Total+=1
self.judge()
def Cloth(self):
self.computer = random.choice(self.guess_list)
self.ComputeResult.setText(self.tr(self.computer))
self.people='布'
self.Total+=1
self.judge()
def judge(self):
self.TotalStat.setText(str(self.Total))
if self.people == self.computer:
self.Result.setText(self.tr("平局"))
elif [self.computer,self.people] in self.guize:
self.Result.setText(self.tr("你输了"))
self.YouLose+=1
self.YouLoseStat.setText(str(self.YouLose))
else:
self.Result.setText(self.tr("你赢了"))
self.YouWin+=1
self.YouWinStat.setText(str(self.YouWin))
if __name__=='__main__':
app = QApplication(sys.argv)
GUI = GameUi()
GUI.show()
app.exec_()
这里用的是python2.7。