一个概率问题,也是一个投资问题。

Spring源码解析 2011-06-28 07:18:27
你参加一个现场节目,主持人给了你一个中奖的机会。在三扇门背后,只有一扇门后有大奖。你选了1号门。然后,狡诈的主持人打开了3号门,显示门背后没有奖品。然后他对你说,“我再给你一个机会,你可以更改你的选择。”

期待高手分析,是改还是不改,概率如何分析……
...全文
1147 183 打赏 收藏 转发到动态 举报
写回复
用AI写文章
183 条回复
切换为时间正序
请发表友善的回复…
发表回复
qybao 2011-07-06
  • 打赏
  • 举报
回复
[Quote=引用 181 楼 shine333 的回复:]
怎么又浮起来了?

引用 178 楼 qybao 的回复:

引用 177 楼 chenchenyangll 的回复:
我不明白我的程序哪里扯淡了。。。阿宝。。。


你的程序没扯谈,只是我们看问题的角度不一样。
在你的程序最后,加入一句打印
System.out.println("User Win:" + (double)(changeSuccess+unchangeSucc……
[/Quote]
你到现在还是没理解我的程序和35L的程序,我和35L的区别就是我排除了openSuccess的case
我已经说了,我们看问题的角度不同,一次游戏中,一个人会不会改变,我们不能确定
所以用了一个随机概率来判断这个游戏者是不是真选择改变,即ifChange
然后在这个基础上再来判断输赢
if(ifChange)
  if (price != firstPick) {
  changeSuccess++;
  } else { //所以这个else是不进行统计的,一次游戏,输了就输了,哪还有什么else中奖?
  unchangeSuccess++;
System.out.println("you lose. game over")
  }
  } else {
  if (price == firstPick) {
  unchangeSuccess++;
  } else {
  changeSuccess++;
System.out.println("you lose. game over")
  }
  }
  }
你总是认为需要else changeSuccess++
你的思维一直停留在你的模式,我在107L也给你解释了,一次游戏,你只会进入一种情况
也就是说,你选择改变(也就是第一个大if),那么,如果你第一次选择错误的话,你的changeSuccess++,
不存在小else你的unchangeSuccess++,因为大前提是你选择了改变,所以即使进入小else,也只是你输了,不存在赢的说法
反过来,你选择不改变(也就是第一个大else),那么,如果你第一次选择对,你的unchangeSuccess++
不存在小else你的changeSuccess++,因为大前提是你选择了不改变,所以即使进入小else,也只是你输了,不存在赢的说法
而你的程序,是站在游戏者改变选择的前提下来进行统计,所以你没有随机发生选不选择改变,而是直接选择改变,采用secondChoice
在这个基础上,你来判断赢的人数占多少

我之前已经肯定了2/3的说法,也就是改变选择概率可以提高到2/3,
但是实际游戏中,这个游戏者是不是真的会改变选择?也就是说改变不改变存在一个随机

你问我什么是概率,那我反问你,一个人参加游戏是不是100%保证他会选择改变?
难道现实中的游戏,中奖的全都是改变选择的?不改变选择的就没人中将?
所以改变不改变选择,本身就存在一个随机
站在游戏者的角度,你会选择改变来提高中奖概率,所以不存在改变不改变的随机
但是站在第三者,甚至游戏的投资方来看,就要考虑这个随机,然后才决定是不是要继续开展这样的游戏
也就是说投资方不会考虑到有这么高的中奖概率,还专么来给社会献福利的,他计算的概率考虑的因素更多
我也不试图说服你去理解,因为你的思维方式,就只停留在自己的程序中。

如果你非要纠缠,让我说2/3是正确的,那你赢了,改变确实能让概率提高到2/3,这点10几年前我就接受了。
但是,还有一句话要留给你,你永远也做不了游戏的投资人,或者说一个成功的投资人,over
nourewang 2011-07-06
  • 打赏
  • 举报
回复
嗯,很火,很激烈
shine333 2011-07-06
  • 打赏
  • 举报
回复
怎么又浮起来了?
[Quote=引用 178 楼 qybao 的回复:]

引用 177 楼 chenchenyangll 的回复:
我不明白我的程序哪里扯淡了。。。阿宝。。。


你的程序没扯谈,只是我们看问题的角度不一样。
在你的程序最后,加入一句打印
System.out.println("User Win:" + (double)(changeSuccess+unchangeSuccess)/TIMES);
也许你就能明白我说的意思了
也就是说我……
[/Quote]
宝啊,你最后的几句话,什么“比如主持人发生了某个失误,比如不小心让我们看到了另外两个门都没奖,但主持人还主观地认为我们没有发现他的失误”那已经是强词夺理了。

而且你那个System.out.println("User Win:" + (double)(changeSuccess+unchangeSuccess)/TIMES);简直胡扯。凭什么

选手选择不变的情况下,获奖unchangeSuccess++
选手选择不变的情况下,不获奖changeSuccess却不变
而两者情况下,TIMES都增加(虽然TIMES本身没动,但你的源代码就是这个意思)??!!

去翻翻书看看“概率”的定义是什么吧
mucrea 2011-07-06
  • 打赏
  • 举报
回复
不明白!
这个肯定要改选了,很明显主持人想帮我啊!第一次选错了,主持人想给我个机会,于是说是自己犯了错误帮我开脱,可不能苦了主持人的一番好意啊!
所以我认识礼品必须在2号门里。
qybao 2011-07-03
  • 打赏
  • 举报
回复
[Quote=引用 177 楼 chenchenyangll 的回复:]
我不明白我的程序哪里扯淡了。。。阿宝。。。
[/Quote]

你的程序没扯谈,只是我们看问题的角度不一样。
在你的程序最后,加入一句打印
System.out.println("User Win:" + (double)(changeSuccess+unchangeSuccess)/TIMES);
也许你就能明白我说的意思了
也就是说我是站在观众整体上中奖可能的角度去看这个概率,即整体上的success除以抽样总件数TIMES
而你是站在观众必然改变选择的中奖可能的角度去看这个概率,即changeSuccess除以必然改变选择的抽样件数changeCount
shine333的程序和你的程序意思一样的,他的出发点也是站在观众必然改变选择的角度上来进行统计的,也就是说他的抽样件数total全部是必然改变选择,即程序一上来就直接定位一定采取secondChoice,所以概率是2/3
然而实际的情况是,因为观众不知道自己第一次选择是对还是错,所以不是所有的人都一定会采取改变选择,有些人可能是相信直觉,就是不改变,有些人可能听天由命,抛个硬币来决定改或不改,有些人可能就是相信数学概率,争取概率大的机会而选择改变,所以在这些心理选择差异上来看待整体的中奖概率,那么就是1/2
也就是说我所说的1/2和你所说的2/3不是一个概念,即改变后中奖的概率会提高到2/3,这点我也不否认,但是整体中奖(即包括改中奖和不改中奖两种情况)的概率是1/2
所以总的说来,不改变中奖概率是1/3,听天由命中奖概率是1/2,改变中奖概率是2/3,那么从单纯的数学概率角度来考虑,我们应该选择中奖概率大的那个,即选择改变。
不过这个问题,不是单纯的一个数字概率问题,还牵涉到人的心理素质,人对周围各种环境信息的分析和利用等复杂问题,所以不是说盲目地选择改变就是好的。比如主持人发生了某个失误,比如不小心让我们看到了另外两个门都没奖,但主持人还主观地认为我们没有发现他的失误,在这种情况下,实际上我们已经能捕捉一个非常有利的信号,就是不改变中奖概率一定是1,那么此时我们是不需要改变选择的。当然这些是属于这个问题的边缘问题了,不在这个问题的讨论中。只是,如果LZ是要做投资的话,这些因素不得不考虑,不能光凭一个数学概率的数字来决定你的投资方向,还需要捕捉和分析身边更多的可以利用的信息。





chenchenyangll 2011-07-03
  • 打赏
  • 举报
回复
我不明白我的程序哪里扯淡了。。。阿宝。。。
chenchenyangll 2011-07-03
  • 打赏
  • 举报
回复
好了 阿宝 你也承认选择改变那就不说什么了

也许题设中标注出 【这是数学题】 就没这么多争辩了

也许题设中标注出 【假设玩家是极端理性追求最大化利益的人】 就没这么多回帖了。。。

这就让我想起 5个海盗在船上分金币的那题

让帖子沉了吧。
qybao 2011-07-02
  • 打赏
  • 举报
回复
又和朋友联系讨论了这个问题,才发现朋友说的1/2的不是说改变后的概率变为1/2,而是整体上中将的概率是1/2,是我理解错了。

首先,否定一下前面我对1/2的分析,也就是肯定一下前面别人的分析改变选择概率变为2/3是对的

然后再来分析为何当时我为何当时被别人说服是1/2,这个1/2和2/3不是一个概念,是我混淆了

首先,我们一开始选择对或不对,我们自己本身不清楚,也就是面临着我们对自己第一次选择是对还是错的肯定或否定存在一个概率
假设我们对自己第一次选择是对的肯定概率是X,那么对自己第一次选择是错的肯定的概率就是1-X
那么经过上面大部分人的分析知道,如果肯定自己第一次选择是对的,中奖的概率是1/3,肯定自己第一次选择错的,改变后中奖的概率是2/3,于是整体上的中奖概率为
1/3*X + 2/3*(1-X) = 2/3 - 1/3 * X
那么来看,肯定自己是对的,也就是X=1,所以不改变的成功率是 2/3 - 1/3 * 1 = 1/3
肯定自己是错的,也就是X=0,所以改变的成功率是 2/3 - 1/3 * 0 = 2/3
也就是说,根据我们对第一次选择的肯定或否定的概率不同,中将概率在1/3和2/3变动
在实际游戏中,一般情况是要么相信自己的选择,要么不相信自己的选择,也就相当于是一半一半,即对自己第一次选择的肯定的概率是1/2
所以,从整体上来说的中奖概率为 2/3 - 1/3 * 1/2 = 2/3 - 1/6 = 1/2

这个才是我被朋友说服的1/2

反过来讨论也是一样的,假设我们肯定自己第一次选择是错的概率是X,那么肯定自己第一次选择是的对的概率就是1-X,肯定自己第一次选择错的,改变后中奖的概率是2/3,肯定自己第一次选择对的,不改变中将概率是1/3,所以整体中奖概率为
2/3*X + 1/3*(1-X) = 1/3 + 1/3*X
如果肯定自己第一次是错的,那么X=1,所以改变后中奖概率=1/3 + 1/3*1=2/3
如果肯定自己第一次是对的,那么X=0,所以不改变中奖概率=1/3 + 1/3*0=1/3
而实际情况,要们相信自己,要们不相信自己,所以X=1/2,所以整体中奖率=1/3+1/3*1/2=1/2

OK,问题讨论结束
答案就是,如果主持人知道答案并打开一个门后,改变选择中奖概率可以提高到2/3
但是改变后概率虽然提高了,也不一定保证中奖,所以存在你对第一次选择的肯定或否定,即相信不相信自己的选择,所以从整体上来说的中奖概率为1/2
飞扬的尘埃 2011-07-01
  • 打赏
  • 举报
回复
其实,我想说的是,这两个行为,参与者没有选择的权力;选择权在主持人身上。
我们换个思维来考虑这个问题。
都不要忘了,这个游戏,主持人也是参与者;事实是你和主持人,两人选三个门,并且,主持人的选择会最先揭晓;因此,选择权在主持人身上。
换成楼主的投资来描述,楼主想投资,另一个人也想投资;假设这个人是楼主的朋友,并且这个朋友很好,虽然他不知道哪个投资会成功,但是他必定会比楼主先投资,并且如果成功他会把成功的项目和楼主的失败项目进行交换;这和主持人的行为是一样的,主持人知道哪个门没有奖品,并且主持人必定打开没有奖品的门。因此,如果楼主接收这个朋友的帮助的话,那么就是2人投资3项目,成功的几率为2/3;楼主可以拒绝朋友的帮助吗?不可以,因为朋友的投资结果必定先出现;也就是说,楼主无法拒绝朋友参与选择,楼主无法保有1/3几率成功投资的选择权,楼主只能享有有朋友帮助下的2/3成功几率的选项

[Quote=引用 97 楼 qybao 的回复:]
那你认为在选择事件的两个行为上概率是不均等?要知道,你只有选或者不选2个选择,不存在你选的事件行为的概率大于不选的事件行为的概率,同样的,也不存在不选的事件行为的概率大于选的事件行为的概率。
[/Quote]
liang8305 2011-07-01
  • 打赏
  • 举报
回复
因为你的这个逻辑一开始已经肯定了2/3里100%有奖了,也就是说没有考虑到2/3里没奖的情况。

-----------------------------------------------
我没有开始就肯定2/3里100%有奖,再看这个样的推理:

2/3里没有奖的可能是1/3

= 2/3里没有奖的可能是你第一次就选对

= 你第一次就选对的可能是1/3

= 改变获奖的可能是 2/3



shine333 2011-07-01
  • 打赏
  • 举报
回复
不知道谁的“推导全是主观的”

跟你说了,我动手实验了,今天早上一次100组,大概7年前分别找人测了100组和200组

请问,您何时亲自试一下,不推导,完全根据游戏规则玩一下?

我在上海,要不周末陪你玩玩??
aotian16 2011-07-01
  • 打赏
  • 举报
回复
还在争啊,
还是那句话, 结果不会影响你当初的选择
qybao 2011-07-01
  • 打赏
  • 举报
回复
[Quote=引用 106 楼 shine333 的回复:]
为什么要加,我不想多说了。给一个我的程序。


Java code


/**
* <ul>
* <li>三扇门中,其中一扇后面有一辆车;其余两扇后面则是山羊。</li>
* <li>参赛者在三扇门中挑选一扇。他并不知道内里有什么。</li>
* <li>主持人知道每扇门后面有什么。</li>
* <li>主持人必须开启剩下的……
[/Quote]

那你错了,读大学时我也认为是2/3,工作以后和很多朋友讨论交流后才发现,这是错的
也就是说,2/3的是忽略的主持人打开门后不中奖的事实。这点我在104L的样本调查也说明了

为什么说你没理解我的代码的含义
if (ifChange) { //首先你要知道这个if的意思,是代表你选择改变
if (price != firstPick) { //然后在你第一次没选中,而且主持人打开门后不中奖
changeSuccess++; //所以这个成功概率必然发生,也就是改变获得成功的次数增加
} else { //而你这个else完全没道理,也就是说,你选择改变,并且你第一次选择对的时候(才会进入)
unchangeSuccess++; //然后你的不改变的成功次数增加,这里不是矛盾吗?
} //你选择改变,并且第一次选对,那么只是你改变后失败的次数增加,和不改变
} else { //成功次数没有任何关系,所以你的这个不改变成功次数增加是一个严重的bug
if (price == firstPick) { //以下分析相同,不解释了
unchangeSuccess++;
} else {
changeSuccess++;
}
}
}
qybao 2011-07-01
  • 打赏
  • 举报
回复
[Quote=引用 150 楼 shine333 的回复:]
liang8305已经被说服了,现在就等你了
[/Quote]

你不用说服了,我从2/3转变到1/2也花了一段时间(原因已经说了,你的推导全是主观的,没有考虑客观因素)
概率的发生是有前提的,一旦前提条件变了,概率也就变了。(当从3个门状态进入2个门状态的时候,条件已经改变了,所以原来从3门推导的公式已经不再适用于2门状态了)
这个就个人按个人看法吧,如果有可能,希望有一天能有某个数学家来推翻这个悖论吧。
shine333 2011-07-01
  • 打赏
  • 举报
回复
你看你的论点和论据,自己都站不住。
否认1/3,2/3已经错了,竟然说“2/3里面肯定100%有奖了”,那么,2/3 和 100%这两个数字如何变成1/2
qybao 2011-07-01
  • 打赏
  • 举报
回复
[Quote=引用 147 楼 liang8305 的回复:]
他的后面的程序是对的
我现在理解了这个悖论的“误导点”到底是哪里

几率的确是2/3,我现在的理解是这样

开门前,你选对的几率是1/3,错的几率是2/3,也就是说,“你选择以外的另外两个”,作为一个整体A来看的话,对的几率总和是2/3

开门后,这个整体A虽然变化了,但是作为一个整体看,正确几率,还是2/3

所以,你改变选择,其实不是去选择“主观上认为的原来的1/3,和后来的……
[/Quote]

如果你把未选择的2个作为一个整体看待,那么一开始就不再是1/3和2/3了,而是1/2和1/2,因为你的这个逻辑一开始已经肯定了2/3里100%有奖了,也就是说没有考虑到2/3里没奖的情况。

shine333 2011-07-01
  • 打赏
  • 举报
回复
liang8305已经被说服了,现在就等你了
shine333 2011-07-01
  • 打赏
  • 举报
回复
[Quote=引用 146 楼 qybao 的回复:]

引用 145 楼 shine333 的回复:
引用 142 楼 qybao 的回复:

引用 141 楼 qybao 的回复:
引用 138 楼 shine333 的回复:
引用 135 楼 qybao 的回复:

这个问题很简单,3个人ABC,有一个是嫌疑犯,我们来假设警察办案,假设警察抓到了一个人A(选择了A),然后此时有证人指证另一个人B不是嫌疑犯(主持人打开B),那么你认为……
[/Quote]
不跟你说第二次吧,就说一次选择(viz. 给你第二次选择,但你永远不改)
shine333 2011-07-01
  • 打赏
  • 举报
回复
[Quote=引用 147 楼 liang8305 的回复:]

他的后面的程序是对的
我现在理解了这个悖论的“误导点”到底是哪里

几率的确是2/3,我现在的理解是这样

开门前,你选对的几率是1/3,错的几率是2/3,也就是说,“你选择以外的另外两个”,作为一个整体A来看的话,对的几率总和是2/3

开门后,这个整体A虽然变化了,但是作为一个整体看,正确几率,还是2/3

所以,你改变选择,其实不是去选择“主观上认为的原来的1/3,和后来……
[/Quote]
什么叫我后面的程序是对的。一直是对的,只是你没立即而已...
shine333 2011-07-01
  • 打赏
  • 举报
回复
为什么要加,我不想多说了。给一个我的程序。


/**
* <ul>
* <li>三扇门中,其中一扇后面有一辆车;其余两扇后面则是山羊。</li>
* <li>参赛者在三扇门中挑选一扇。他并不知道内里有什么。</li>
* <li>主持人知道每扇门后面有什么。</li>
* <li>主持人必须开启剩下的其中一扇门,并且必须提供换门的机会。</li>
* <li>主持人永远都会挑一扇有山羊的门。
* <ul>
* <li>如果参赛者挑了一扇有山羊的门,主持人必须挑另一扇有山羊的门。</li>
* <li>如果参赛者挑了一扇有汽车的门,主持人随机在另外两扇门中挑一扇有山羊的门。</li>
* </ul>
* <li>参赛者会被问是否保持他的原来选择,还是转而选择剩下的那一道门。</li>
* </ul>
* 转换选择可以增加参赛者的机会吗?
*/
public static void main(String[] args) throws Exception {
// 随机性更强一些吧!
final Random rand = new SecureRandom();
// 请自行调节,不过如果想看CSV,建议不要超过65536,否则MS Office不能保证打开
final int total = 1000000;
// 只计算去除一个错误答案后,换门成功的次数
int count = 0;

// 如果想看CSV,请取消相关注释
// System.setOut(new PrintStream(new File(System.getProperty("user.home"), "MontyHall.csv")));
// System.out.println("car,firstChoice,opened,secondChoice,bingoAfterChange");

// 以下流程,严格按照游戏规则,不对的地方请指出
for (int i = 0; i < total; i++) {
// 汽车的位置
int car = rand.nextInt(3);
// 第一个选择
int firstChoice = rand.nextInt(3);
// 主持需要打开的带有山羊的门
int opened;
if (firstChoice != car) {
// 如果参赛者挑了一扇有山羊的门,主持人必须挑另一扇有山羊的门。
// 1 × 2 × 3 = 6,所以倒过来除可以找出第三个
opened = (6 / (car + 1) / (firstChoice + 1)) - 1;
} else { // i.e.: firstChoice = car
// 如果参赛者挑了一扇有汽车的门,主持人随机在另外两扇门中挑一扇有山羊的门。
// 为了表示主持人抛硬币,如果正面,就选择参赛者选的门顺时针方向的门,反面,选逆时针。
// 有人说“最边上的怎么办”,不用多讲,地球是圆的总可以了吧:P
if (rand.nextBoolean()) {
opened = (firstChoice + 1) % 3;
} else {
// Why + 3 first??? Just ask yourself.
opened = (firstChoice + 3 - 1) % 3;
}
}
// 只算改选,计算公式同上
int secondChoice = (6 / (opened + 1) / (firstChoice + 1)) - 1;
boolean bingoAfterChange = secondChoice == car;
if (bingoAfterChange) {
count++;
}
// 可以到在Excel里面打开一下CSV,用统计函数研究一下,看看是否有猫腻
// System.out.printf("%d,%d,%d,%d,%d%n", car, firstChoice, opened, secondChoice, bingoAfterChange ? 1 : 0);
}
System.out.println(count);
// System.out.flush();
}


顺便说一句,读高中的时候,我和你的想法完全一致,任务2/3是唯心的。
但是过了几年,重拾这个问题后,忽然发现,我无法否定人家的证明过程,自己动手列出各种可能(建议你尝试一下,实际就是我那个CSV 导入数据库,SELECT DISTINCT),结果确实是2/3。

这个Monty Hall problem,上了很多国外数学教材的,专业杂志的,最早提出的变体,在1889年。如果真的像你所认为的那样“这么明显的错误没被发现”的话,全世界的数学家是不是太弱智了。不是拿权威压人,不过你要能成功反驳别人的证明过程。

建议你看一下英文的,图文并茂。
加载更多回复(162)

23,404

社区成员

发帖
与我相关
我的任务
社区描述
Java 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧