下载
登录/ 注册
主页
论坛
视频
热股
可转债
下载
下载

三人决斗问题(枪手博弈)

11-08-07 00:14 5409次浏览
a511511
+关注
博主要求身份验证
登录用户ID:
A、B、C三人进行决斗。A 的射击命中率是三分之一,也就是说如果他努力的话,他平均每三枪可以击中一次;B 的射击命中率是二分之一;C 的射击命中率是一(也就是百分之百)。由于 A 的命中率最低,为公平起见,他们让 A 先射,然后是 B(如果他还活着的话),然后是 C(如果他还活着的话)。再然后是 A,B,C,如此循环下去,直到只有一人活着。每次射击时只能开一枪,但可以选择朝哪里开,也可以选择放空枪。我们的问题是:如果ABC三人都按照最佳选择行事,也就是说尽可能的提高自己地存活率,谁活下来的可能性最大?准确一点,每个人活下来的概率是多少?
打开淘股吧APP
0
评论(17)
收藏
展开
热门 最新
dragonlea

11-08-07 15:59

0
从以上计算可以看出,虽然A命中率33%比B命中率50%低很多,但是先手优势明显
有了先手AB互射决斗中A的存活概率增加到11/21,略大于B存活的10/21
dragonlea

11-08-07 15:50

0
C存活的概率比较简单,A,B存活的概率计算起来复杂一些,
因为"AB互射A先射A存活的概率"和“AB互射B先射A存活的概率”是有差异的,A存在先手
但这两个概率的平均值是不分先后的统计概率,即1/3
dragonlea

11-08-07 15:44

0
第一轮,A最优的选择是放空枪让C射B,B一定射C,C没死一定射B
C存活的情况是第一轮没有被B射死的情况下第二轮没被A射死:1/2*2/3=1/3
B存活的情况是第一轮射死C的情况下,参与AB互射A先射而B存活
A存活的情况是“第一轮C被B射死的情况下参与AB互射A先射而A存活”加上“第一轮C没被B射死情况下A第二轮射死C”

假设AB互射A先射A存活的概率为X
A总的存活概率:1/2*X+1/2*1/3,
B总的存活概率:1/2*(1-X)

假设AB互射B先射A存活的概率是Y
那么(X+Y)/2=1/3
Y=2/3-X
A总的存活概率=1/2*X+1/2*1/3=1/3+2/3*(2/3-X),“AB互射A第一枪射死B的概率”加上“A第一枪没射死B而参与“AB互射B先射A存活””
以上方程解出X=11/21

所以,
A总的存活概率=1/2*X+1/2*1/3=3/7
B总的存活概率=1/2*(1-X)=5/21
C总的存活概率=1/3
存活概率的从大到小分别是:A(9/21)>C(7/21)>B(5/21)
mustregister

11-08-07 15:38

0
从策略的角度来说,如果A射任意一人,都有把他射死的可能,A也就面临被活下来的人先手射自己的可能,所以,为了拿到先手,A必须要让B,C先火拼,B,C间死了一人后,自己就有先手了。由此推知,A一定要放空第一枪,以求取得绝对先手。
而B就没那么幸运了,B必须要射C,因为B对C的死亡威胁更大,如果被C拿到先手,C一定是先射死B的。
根据以上分析,则有:
1.B射死C,然后A先手与B互射
2.B没能射死C,然后C把B射死,于是A先手与C互射。
C的存活率最容易计算:即1/2 * 2/3 =1/3
B的存活率是:1/6*(1+1/3+(1/3)^2+...+(1/3)^n)=1/4
A的存活率是:1-1/3-1/4=5/12
testgame

11-08-07 15:14

0
如果A先杀C,那么存活概率只有0.36左右!

另上一帖应该是模拟了100000次!
testgame

11-08-07 15:06

0
支持 2楼
[引用原文已无法访问]

A先放空,等B、C决出胜负后杀C或B。

B先杀C(因C必先杀B),再杀A。

C一枪能杀一个,必先杀B,再杀A。

计算结果

A存活几率=0.41406

B存活几率=0.25101

C存活几率=0.33493

我用程序模拟10000次的结果

<html>
<body>

<script type="text/javascript">
{
document.write("<h1>算法</h1>");
document.write("<p>A先放空,等B、C决出胜负后杀C或B。</p>");
document.write("<p>B先杀C(因C必先杀B),再杀A。</p>");
  document.write("<p>C一枪能杀一个,必先杀B,再杀A。</p>");
var alivenum=0;
var blivenum=0;
var clivenum=0;

var count = 100000
var  n=count;
while(n>0)
{
n--;
var A=1;
var B=1;
var C=1;
var live=A+B+C;
while(live!=1)
{
if(A==1)
{
  var t=Math.floor(Math.random()*3); 
  if(C==1&&live!=3)
  {if(t<1)C=0;}
  else if(B==1&&live!=3)
  {if(t<1)B=0;}
}

if(B==1)
{
  var t=Math.floor(Math.random()*2);
  if(C==1)
  {if(t<1)C=0;}
  else if(A==1)
  {if(t<1)A=0;}
}

if(C==1)
{
  if(B==1)
  {B=0;}
  else if(A==1)
  {A=0;}
}
live=A+B+C;
}
if(A==1){alivenum++;}
if(B==1){blivenum++;}
if(C==1){clivenum++;}
}
document.write("<p>计算结果</p>");
document.write("<p>A存活几率=",alivenum/count,"</p>");
document.write("<p>B存活几率=",blivenum/count,"</p>");
document.write("<p>C存活几率=",clivenum/count,"</p>"); }
</script>

</body>
</html>
坏小子联通

11-08-07 14:15

0
这里有一个AB轮环射的概率加法问题。A死亡概率:放空7/12; 射B12.5/18;射C:13/18
坏小子联通

11-08-07 13:48

0
这里有一个AB轮环射的概率加法问题。A死亡概率:放空12/18; 射B12.5/18;射C:13/18
跳跳糖

11-08-07 12:02

0
问题的问法有点问题。
对A和B,第一轮最优选择是射杀c,c一发一中是确定性事件,灭了确定性才能够提高存活率。

A射C,中,1/3,B,A其后互射,多次反复后,B射杀A为大概率事件。
A射C,不中,2/3,其后B射C,中,1/2,A,B其后互射,多次反复后,B射杀A为大概率事件。
A射C,不中,2/3,其后B射C,不中,1/2,C射杀B。

A射C,中1/3,game over。
A射C,不中2/3,C射杀A。game over。
prophet007

11-08-07 11:40

0
刚才推算有误
  因为C一定选择射击B,所以A和B首轮都选择射击C,C首轮存活概率2/3*1/2=1/3
  C首轮未死情况下选择射击B,B死了,其死亡概率为1-1/3=2/3
  A第二轮选择射击C,C第二轮死亡概率1/3,则其存活率为1/3*2/3=2/9
  A存活率为1-1/3-2/9=4/9
刷新 首页上一页 下一页 末页
提交