博弈论案例逻辑测试

前言

看到一个博弈论案例

题目:开门抽奖

三扇门对应三种奖品:羊,羊,车。

round1:嘉宾选择一扇门如 A 门

round2:主持人选一扇门如 B 门(羊)(选中车游戏结束)

round3:嘉宾可以决定是否更换选择

R1 不更换:仍选择 A 门

R2 更换:选择 C 门

问 R1 和 R2 哪种选择,选中车的几率比较大?

说是换的几率大些。

我觉得换不换几率都是一样的啊。

就是好奇,所以写个测试用例看下。

 

测试总结

小心翼翼的增加 for 循环的次数,生怕电脑崩溃。没想到10万次循环也能快速出结果,现代计算机性能真不错。

随着 for 循环次数增加,R1 R2 的结果越接近,符合预期。

 

测试预览

源码分享

<body>
  <p>题目:开门抽奖</p>
  <p>三扇门对应三种奖品:羊,羊,车。</p>
  <p>round1:嘉宾选择一扇门如 A 门</p>
  <p>round2:主持人选一扇门如 B 门(羊)(选中车游戏结束)</p>
  <p>round3:嘉宾可以决定是否更换选择</p>
  <p>R1 不更换:仍选择 A 门</p>
  <p>R2 更换:选择 C 门</p>
  <p>问 R1 和 R2 哪种选择,选中车的几率比较大?</p>
  <button onclick="start()">开始测试</button>
</body>
<script>
  //得到一个两数之间的随机整数,包括两个数在内
  function getRandomIntInclusive(min, max) {
    //Math.ceil() 函式会回传大于等于所给数字的最小整数。
    min = Math.ceil(min);
    max = Math.floor(max);
    return Math.floor(Math.random() * (max - min + 1)) + min; //含最大值,含最小值 
  }

  //概率记录
  var isCar1=1,isSheep1=1;

  function test1(){
    var arr=["car","sheep","sheep"];
    var s1=getRandomIntInclusive(0,2)
    var round1=arr[s1]

    arr.splice(s1,1)
    var s2=getRandomIntInclusive(0,1)
    var round2=arr[s2]

    if(round2 =='car'){
      return false
    }else{
      //是否更换
      //否
      if(round1 == 'car'){
        isCar1++
      }else{
        isSheep1++
      }
    }
  }

  var isCar2=1,isSheep2=1;

  function test2(){
    var arr=[
      {"goal":"car","sel":false},
      {"goal":"sheep","sel":false},
      {"goal":"sheep","sel":false}
    ];

    var s1=getRandomIntInclusive(0,2)
    var round1=arr[s1].goal
    arr[s1].sel=true

    arr.splice(s1,1)
    var s2=getRandomIntInclusive(0,1)
    var round2=arr[s2].goal
    arr[s2].sel=true

    if(round2 =='car'){
      return false
    }else{
      //是否更换
      //是
      var round3=arr.find(item=>item.sel == false)
      if(round3.goal == 'car'){
        isCar2++
      }else{
        isSheep2++
      }
    }
  }

  function start(){
    for(var i=0;i<100000;i++){
      test1();
      test2();
    }

    var r1=isCar1/isSheep1;
    var r2=isCar2/isSheep2;
    console.log("isCar1 = " + isCar1)
    console.log("isSheep1 = " + isSheep1)
    console.log("r1 = " + r1)

    console.log("\n")

    console.log("isCar2 = " + isCar2)
    console.log("isSheep2 = " + isSheep2)
    console.log("r2 = " + r2)

    console.log("\n")

    if(r2 > r1){
      console.log("换 比较好")
    }else{
      console.log("不换 比较好")
    }
  }

  //全局属性 Infinity 是一个数值,表示无穷大。
</script>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Irene1991

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值