前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >得到,何时停止思考,模拟实验

得到,何时停止思考,模拟实验

作者头像
birdskyws
发布2019-03-11 10:59:02
5080
发布2019-03-11 10:59:02
举报
文章被收录于专栏:一英里广度一英寸深度的学习

何时停止思考

这个话题很有意思,有时决策参考的角度太多,我们没办法收集全部信息再做决断,那么我们该何时停止思考,以当前信息来做决断呢?

今天的罗振宇举了一个例子,在瓜田里有100个西瓜,你要选出最大的,条件是只能一个一个挑,没有选择的就不能再选了。科学家给出了一个方法:你先选择37个西瓜,不做选择,只记录这37个西瓜中最大的值,在后面的挑选过程中,如果遇到比这个最大值大的,你就可以做决定,停止思考,选择这个最大的西瓜。

挺有意思,那么来做实验验证一下:设定西瓜的大小是按正态分布的,均值是20斤,方差是10,通过实验模拟。 实验结果:

  • 不需要37步,只需要记录17步,选到最大西瓜的期望是最大的,大概是37斤。

这个是一个非常挑剔的人,必须要找到比之前都大的西瓜。实际情况是我们只需要找到比之前可能稍小一点的,也可以做决定。

  • 实验结果,我们可接受的范围越大,那么我们应该记录更多步,但是我们随着可接受范围的增大,我们得到西瓜大小的期望也越小。

代码:

代码语言:javascript
复制
import numpy as np
import matplotlib.pyplot as plt
mu, sigma = 20, 10 # mean and standard deviation
s = np.random.normal(mu, sigma, [1000,100])
print(s.shape)
fig, ax = plt.subplots(1)
for alpha in [0.05,0.1,0.2,0.4,0.6,0.8,1.0]:
    max_select = []
    for step in range(1,100):
        select = []
        for i in range(1000):
            max = np.array(s[i][:step]).max()
            std = np.array(s[i][:step]).std()
            find = 0
            for j in range(step,100):
                if s[i][j]>max-alpha*std:
                    select.append(s[i][j])
                    find = 1
                    break
            if find==0:
                select.append(s[i][99])
        assert len(select)==1000
        #print("取到最大西瓜",np.array(select).mean())
        step_mean = np.array(select).mean()
        max_select.append(step_mean)
    ax.plot(max_select)
ax.legend([0.05,0.1,0.2,0.4,0.6,0.8,1.0])
plt.show()
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019.02.26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 何时停止思考
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档