分页: 6 / 11

Re: 掷骰子的几率计算题

发表于 : 2023年 1月 30日 23:22
YWY
(ヅ) 写了: 2023年 1月 30日 23:10

代码: 全选

Out of total of 1000000 trials. 462499 ended with first double 7s, 537501 ended with first 12.
Out of total of 1000000 trials. 461205 ended with first double 7s, 538795 ended with first 12.
Out of total of 1000000 trials. 461842 ended with first double 7s, 538158 ended with first 12.
Out of total of 1000000 trials. 460590 ended with first double 7s, 539410 ended with first 12.
Out of total of 1000000 trials. 461313 ended with first double 7s, 538687 ended with first 12.
Out of total of 1000000 trials. 462570 ended with first double 7s, 537430 ended with first 12.
Out of total of 1000000 trials. 461698 ended with first double 7s, 538302 ended with first 12.
Out of total of 1000000 trials. 461880 ended with first double 7s, 538120 ended with first 12.
Out of total of 1000000 trials. 461856 ended with first double 7s, 538144 ended with first 12.
Out of total of 1000000 trials. 461621 ended with first double 7s, 538379 ended with first 12.
Out of total of 1000000 trials. 461681 ended with first double 7s, 538319 ended with first 12.
谢!应该是6:7的关系,如果做1300000次实验,就更明显了。

Re: 掷骰子的几率计算题

发表于 : 2023年 1月 30日 23:27
CalCat
YWY 写了: 2023年 1月 30日 23:03 x = y = 1,换句话说,只要一直投,总能得到双连7, 也总能得到12。
我脑子还不清楚, 但是,还有别的特殊情况,比如, 三连7。

Re: 掷骰子的几率计算题

发表于 : 2023年 1月 30日 23:28
(ヅ)
CalCat 写了: 2023年 1月 30日 23:27 我脑子还不清楚, 但是,还有别的特殊情况,比如, 三连7。
不会出现3连7的,2连7就结束了

Re: 掷骰子的几率计算题

发表于 : 2023年 1月 30日 23:32
YWY
CalCat 写了: 2023年 1月 30日 23:27 我脑子还不清楚, 但是,还有别的特殊情况,比如, 三连7。
只要一直投,三连7的概率也是1。任何一个正(常数)概率p事件,无论p多小,只要一直试,出现的概率是1。

Re: 掷骰子的几率计算题

发表于 : 2023年 1月 30日 23:51
YWY
(ヅ) 写了: 2023年 1月 30日 23:28 不会出现3连7的,2连7就结束了
对,在给定的设定下,不会出现三连7。

做N次试验,每次记录所需投掷次数及结束状态(双连7或12),得到N个次数;然后把N个次数归为两类:以双连7结束的(记为N_7),和以12结束的(记为N_12)。能不能算一下这N个次数的平均值?然后再算一下那N_7个次数的平均值和N_7个次数的平均值?比如做N=1300次实验,得到1300个次数,假设N_7 = 603,N_12 = 697,算一下所有1300个次数的平均值,那603个次数的平均值,还有那697个次数的平均值。谢。

Re: 掷骰子的几率计算题

发表于 : 2023年 1月 31日 00:00
(ヅ)
也写了个解析解,前面应该有了吧(没仔细看)

补:没马甲第一页就给出解了,后面在讨论啥?
图片

Re: 掷骰子的几率计算题

发表于 : 2023年 1月 31日 00:07
(ヅ)
YWY 写了: 2023年 1月 30日 23:51 对,在给定的设定下,不会出现三连7。

做N次试验,每次记录所需投掷次数及结束状态(双连7或12),得到N个次数;然后把N个次数归为两类:以双连7结束的(记为N_7),和以12结束的(记为N_12)。能不能算一下这N个次数的平均值?然后再算一下那N_7个次数的平均值和N_7个次数的平均值?比如做N=1300次实验,得到1300个次数,假设N_7 = 603,N_12 = 697,算一下所有1300个次数的平均值,那603个次数的平均值,还有那697个次数的平均值。谢。
这是随机过程里面的expected number of steps to reach a terminal state吗?其实可以画马尔科夫图的,学得不好没搞定。

Re: 掷骰子的几率计算题

发表于 : 2023年 1月 31日 00:14
(ヅ)
YWY 写了: 2023年 1月 30日 23:51 对,在给定的设定下,不会出现三连7。

做N次试验,每次记录所需投掷次数及结束状态(双连7或12),得到N个次数;然后把N个次数归为两类:以双连7结束的(记为N_7),和以12结束的(记为N_12)。能不能算一下这N个次数的平均值?然后再算一下那N_7个次数的平均值和N_7个次数的平均值?比如做N=1300次实验,得到1300个次数,假设N_7 = 603,N_12 = 697,算一下所有1300个次数的平均值,那603个次数的平均值,还有那697个次数的平均值。谢。

代码: 全选

import random
from datetime import datetime

TOTAL = 1300000


def list_avg(l):
    return sum(l) // len(l)


def test():
  random.seed(int(datetime.now().timestamp()))
  double_seven_count = 0
  twelve_count = 0
  steps_to_end_with_double_seven = []
  steps_to_end_with_twelve = []
  for i in range(TOTAL):
    prev = 0
    count = 0
    while True:
      count = count + 1
      a = random.randint(1, 6)
      b = random.randint(1, 6)
      if a + b == 12:
        twelve_count = twelve_count + 1
        steps_to_end_with_twelve.append(count)
        break
      if a + b == 7 and prev == 7:
        double_seven_count = double_seven_count + 1
        steps_to_end_with_double_seven.append(count)
        break
      prev = a + b
  print(f"Out of total of {TOTAL} trials. {double_seven_count} ended with first double 7s, {twelve_count} ended with first 12.")
  print(f"average steps to end with double 7 is: {list_avg(steps_to_end_with_double_seven)}")
  print(f"average steps to end with 12 is: {list_avg(steps_to_end_with_twelve)}")


for i in range(1):
  test()
输出:

代码: 全选

Out of total of 1300000 trials. 599880 ended with first double 7s, 700120 ended with first 12.
average steps to end with double 7 is: 19
average steps to end with 12 is: 18
我记得是有公式可以直接算的..

Re: 掷骰子的几率计算题

发表于 : 2023年 1月 31日 00:23
CalCat
我自己两年前推到过公式,但是忘记放到哪里去了。那时候,刚刚接触几率计算,囫囵吞枣了。

Re: 掷骰子的几率计算题

发表于 : 2023年 1月 31日 00:23
YWY
(ヅ) 写了: 2023年 1月 31日 00:14

代码: 全选

import random
from datetime import datetime

TOTAL = 1300000


def list_avg(l):
    return sum(l) // len(l)


def test():
  random.seed(int(datetime.now().timestamp()))
  double_seven_count = 0
  twelve_count = 0
  steps_to_end_with_double_seven = []
  steps_to_end_with_twelve = []
  for i in range(TOTAL):
    prev = 0
    count = 0
    while True:
      count = count + 1
      a = random.randint(1, 6)
      b = random.randint(1, 6)
      if a + b == 12:
        twelve_count = twelve_count + 1
        steps_to_end_with_twelve.append(count)
        break
      if a + b == 7 and prev == 7:
        double_seven_count = double_seven_count + 1
        steps_to_end_with_double_seven.append(count)
        break
      prev = a + b
  print(f"Out of total of {TOTAL} trials. {double_seven_count} ended with first double 7s, {twelve_count} ended with first 12.")
  print(f"average steps to end with double 7 is: {list_avg(steps_to_end_with_double_seven)}")
  print(f"average steps to end with 12 is: {list_avg(steps_to_end_with_twelve)}")


for i in range(1):
  test()
输出:

代码: 全选

Out of total of 1300000 trials. 599880 ended with first double 7s, 700120 ended with first 12.
average steps to end with double 7 is: 19
average steps to end with 12 is: 18
我记得是有公式可以直接算的..
太感谢了!本楼在这几天都在讨论这几个平均次数。我求出的所有N个次数的平均值是1512/78 = 19.384615,别的值也能用类似方法算出(不过我说的有关条件概率的帖子有错误,忽略),但一楼楼主想先通过试验得到数据,然后再理论推导。

看来我的1512/78还是不对,容我看看,是我逻辑上的错误还是计算上的错误。

Re: 掷骰子的几率计算题

发表于 : 2023年 1月 31日 00:28
(ヅ)
YWY 写了: 2023年 1月 31日 00:23 太感谢了!本楼在这几天都在讨论这几个平均次数。我求出的所有N个次数的平均值是1512/78 = 19.384615,别的值也能用类似方法算出(不过我说的有关条件概率的帖子有错误,忽略),但一楼楼主想先通过试验得到数据,然后再理论推导。

看来我的1512/78还是不对,容我看看,是我逻辑上的错误还是计算上的错误。
19.38 matches simulation results (I rounded to integer at previous simulation but am using floating point instead)

代码: 全选

Out of total of 1300000 trials. 600676 ended with first double 7s, 699324 ended with first 12.
average steps to end with double 7 is: 19.84790469404471
average steps to end with 12 is: 18.972253204523227
average steps overall is: 19.376855384615386

Re: 掷骰子的几率计算题

发表于 : 2023年 1月 31日 00:32
CalCat
(ヅ) 写了: 2023年 1月 31日 00:14

代码: 全选

import random
from datetime import datetime

TOTAL = 1300000


def list_avg(l):
    return sum(l) // len(l)


def test():
  random.seed(int(datetime.now().timestamp()))
  double_seven_count = 0
  twelve_count = 0
  steps_to_end_with_double_seven = []
  steps_to_end_with_twelve = []
  for i in range(TOTAL):
    prev = 0
    count = 0
    while True:
      count = count + 1
      a = random.randint(1, 6)
      b = random.randint(1, 6)
      if a + b == 12:
        twelve_count = twelve_count + 1
        steps_to_end_with_twelve.append(count)
        break
      if a + b == 7 and prev == 7:
        double_seven_count = double_seven_count + 1
        steps_to_end_with_double_seven.append(count)
        break
      prev = a + b
  print(f"Out of total of {TOTAL} trials. {double_seven_count} ended with first double 7s, {twelve_count} ended with first 12.")
  print(f"average steps to end with double 7 is: {list_avg(steps_to_end_with_double_seven)}")
  print(f"average steps to end with 12 is: {list_avg(steps_to_end_with_twelve)}")


for i in range(1):
  test()
输出:

代码: 全选

Out of total of 1300000 trials. 599880 ended with first double 7s, 700120 ended with first 12.
average steps to end with double 7 is: 19
average steps to end with 12 is: 18
我记得是有公式可以直接算的..
非常感谢,但是,还得确认一下。你的这个19 和18 的平均次数,是不是对应如下的我的这个问题?
Copy from earlier:
同时投掷两个6面体的骰子,记录它们的结果总和点数,每次可能得到 如下的点数:2, 3, 4, 5, 6, 7, 8, 9, 10 , 11, 12。 一直投掷,直到下面的两种情况之一发生:
1. 两次点数是7 的结果接连发生;
2. 一次点数是12的结果发生。
请问,如果只考虑上面第一种结果, 平均来说,需要投掷多少次使得7连7的结果发生? 如果只考虑上面第二种结果, 平均来说,需要投掷多少次使得一个12的结果发生? 分别计算这两种结果的需要的平均次数。这个问题非常实用, 就是赌场的Craps游戏。

也就是说,一个特殊的赌场的Craps游戏,玩家同时投掷两个6面体的骰子,如果得到的点数是12,那么游戏结束;如果得到的点数是7和7相连,那么游戏也结束。下面接着玩, 但是,每次游戏结束,投掷的次数都重新开始计数。在玩了许多许多游戏 (无穷天) 以后, 我们把点数是12结束的所有案例做个统计,看平均投掷次数是多少;我们把点数是7和7结束的所有案例做个统计,看平均投掷次数是多少。

Re: 掷骰子的几率计算题

发表于 : 2023年 1月 31日 00:43
(ヅ)
CalCat 写了: 2023年 1月 31日 00:32 非常感谢,但是,还得确认一下。你的这个19 和18 的平均次数,是不是对应如下的我的这个问题?
Copy from earlier:
同时投掷两个6面体的骰子,记录它们的结果总和点数,每次可能得到 如下的点数:2, 3, 4, 5, 6, 7, 8, 9, 10 , 11, 12。 一直投掷,直到下面的两种情况之一发生:
1. 两次点数是7 的结果接连发生;
2. 一次点数是12的结果发生。
请问,如果只考虑上面第一种结果, 平均来说,需要投掷多少次使得7连7的结果发生? 如果只考虑上面第二种结果, 平均来说,需要投掷多少次使得一个12的结果发生? 分别计算这两种结果的需要的平均次数。这个问题非常实用, 就是赌场的Craps游戏。

也就是说,一个特殊的赌场的Craps游戏,玩家同时投掷两个6面体的骰子,如果得到的点数是12,那么游戏结束;如果得到的点数是7和7相连,那么游戏也结束。下面接着玩, 但是,每次游戏结束,投掷的次数都重新开始计数。在玩了许多许多游戏 (无穷天) 以后, 我们把点数是12结束的所有案例做个统计,看平均投掷次数是多少;我们把点数是7和7结束的所有案例做个统计,看平均投掷次数是多少。
"如果只考虑上面第一种结果"意思是不考虑12的出现吗?

Re: 掷骰子的几率计算题

发表于 : 2023年 1月 31日 00:46
CalCat
也就是说,一个特殊的赌场的Craps游戏,玩家同时投掷两个6面体的骰子,如果得到的点数是12,那么游戏结束;如果得到的点数是7和7相连,那么游戏也结束。下面接着玩, 但是,每次游戏结束,投掷的次数都重新开始计数。在玩了许多许多游戏 (无穷天) 以后, 我们把点数是12结束的所有案例做个统计,看平均投掷次数是多少;我们把点数是7和7结束的所有案例做个统计,看平均投掷次数是多少。

也就是说:
点数是12结束的所有案例里面, 不会有7-7出现;
点数是7和7结束的所有案例里面, 不会有任何12出现。

Re: 掷骰子的几率计算题

发表于 : 2023年 1月 31日 00:47
YWY
(ヅ) 写了: 2023年 1月 31日 00:28 19.38 matches simulation results (I rounded to integer at previous simulation but am using floating point instead)

代码: 全选

Out of total of 1300000 trials. 600676 ended with first double 7s, 699324 ended with first 12.
average steps to end with double 7 is: 19.84790469404471
average steps to end with 12 is: 18.972253204523227
average steps overall is: 19.376855384615386
谢!我正在绞尽脑汁找我计算里的错误,却找不到错误。看来1512/78 = 252/13 = 19.384615是对的。

Re: 掷骰子的几率计算题

发表于 : 2023年 1月 31日 00:48
(ヅ)
CalCat 写了: 2023年 1月 31日 00:46 也就是说,一个特殊的赌场的Craps游戏,玩家同时投掷两个6面体的骰子,如果得到的点数是12,那么游戏结束;如果得到的点数是7和7相连,那么游戏也结束。下面接着玩, 但是,每次游戏结束,投掷的次数都重新开始计数。在玩了许多许多游戏 (无穷天) 以后, 我们把点数是12结束的所有案例做个统计,看平均投掷次数是多少;我们把点数是7和7结束的所有案例做个统计,看平均投掷次数是多少。
那就是上面的模拟结果:
在以double 7结束的游戏里面,平均19.85步
以12结束的游戏里面,平均18.97步

Re: 掷骰子的几率计算题

发表于 : 2023年 1月 31日 00:53
CalCat
但是, 这个比例和 7/6相差甚远。 对不对?

Re: 掷骰子的几率计算题

发表于 : 2023年 1月 31日 00:54
(ヅ)
如果lz是要拿这去赌钱的话,我只能说good luck了

有一个事实是:赌徒在"任意高但是不为1"(e.g. 0.99)的胜率去参与fair bet,如果没有exit goal,即一直不停且不用geometric strategy的话,输光的概率是1!

Re: 掷骰子的几率计算题

发表于 : 2023年 1月 31日 00:59
CalCat
那你前面说过,你的模拟结果是7:6, 不知道什么意思?

Re: 掷骰子的几率计算题

发表于 : 2023年 1月 31日 01:03
YWY
CalCat 写了: 2023年 1月 31日 00:59 那你前面说过,你的模拟结果是7:6, 不知道什么意思?
玩1300000把游戏,大概700000把以12结束,大概600000把以双连7结束,7:6的比例。这里的“把”,是一直投直到投出结果为一把。当然,每一把里,还可以谈一共投了几次。