作者LPH66 ( )
看板Math
标题Re: [机统] 关於乱数的机率计算
时间Thu Aug 20 04:51:32 2020
虽然推文提到已经用不到了, 但还是解释一下这可以怎麽做
※ 引述《knightmare0 (神枫苍火)》之铭言:
: 小弟最近有个疑问一直不知道该怎麽解决,於是找到了数学版,最近在玩某一款
: 网页游戏,跟人PVP时,必须以某一值(运气)做乱数,双方掷乱数比大小 大者先攻,
: 假如乱数结果双方相同,则进攻方先攻(例:我攻击A,双方数值相同我先攻)
: 我想在EXCEL写个公式,但不知道如何下手,我做了个实例的笨方法计算
: (可能有误请见谅,小弟高职机率学的很差,微积分渣渣)
: 假定我运气数值2000 对手A运气值3000 双方骰乱数做先攻
: 一共会有我(1-2000)*对方(1-3000)=600,0000种结果
: 土法炼钢开始了:
: 假如对方骰到2001以上(2001~3000)那我必输,因为我骰不到2000以上的数字,对方
: 必定先攻,所以这边的算式是(1~2000)*(2001~3000)=2000种结果*1000种结果
: =2,000,000种结果对面一定先攻
: 再来是第二部分 这边我觉得有点麻烦 也有可能有算错,用梯形公式去算
: 我骰2000 对面骰1~1999都我先攻
: 我骰1999 对面骰1-1998都我先攻
: 以此类推到
: 我骰0002 对面骰1我先攻
: (1999+1998+~~~+1)*1999/2=1,999,000种结果我先攻
: 再来是同数值阶段
: 我的数值是2000 只要对面2000那也是我先攻 这边有两千种结果
: 跟上面的1,999,000+2,000=2,001,000
: 2,000,100/6,000,000=33.35%机率我先攻(假定真随机,伪随机那个我算不了,也不会)
: 我如果要把他在EXCEL写成公式 我该怎麽设定参数跟公式,还有请版上大大帮我看一下
: 我上面的公式是否有误?
: 感谢愿意回答的板友们
: → THEJOY : (1+自己运气)/(2*对方运气)? 08/19 05:36
: 推 hwanger : 当自己运气值比对方低时 就是楼上的式子 08/19 08:51
: 推 hwanger : 偷一下T大结果 当自己运气值比对方高时 就是 08/19 09:21
: → hwanger : 1-(1+对方运气)/(2*自己运气) 两者都是假设自己是攻 08/19 09:22
: → hwanger : 击者 08/19 09:23
: 推 hwanger : 打错 应该是1-(对方运气-1)/(2*自己运气) 08/19 09:28
: 推 LPH66 : 其实如果数字都是如你举例这种大小的话 08/19 18:55
: → LPH66 : 骰相等归谁先其实影响不大 08/19 18:55
: → LPH66 : 以你的例子来说, 它只占全部的 1/3000 种状况 08/19 18:56
: → LPH66 : 那如果都要概算的话可以把离散整数当连续实数估计 08/19 18:57
: → LPH66 : 这样就能简单得到 2000 对 3000 的起手比是 1:2 08/19 18:58
我所谓用连续估计的意思是这样的
就从你的土法炼钢的做法开始延伸
假设我们在 Excel 里开一个 2000x3000 的表格, 每一格填入颜色表示由谁先攻
那填出来的表格当它缩小来看的话会长得像这个样子:
◣ 对角线上其实是锯齿线
◣
◣ 但就如我推文提的, 对角线的格子只占这整块面积的 1/3000
◣
(因为每一列 3000 格中有一格在对角线上)
所以如果把对角线格子切对半的话可以用三角形面积近似估计机率
这样算的话, 绿色面积是 2000*2000/2, 紫色面积是 (1000+3000)*2000/2
化简就能得到面积比是 1:2, 也就是 2000 方起手机率约 1/3
以游戏应用来说的话 1/3 这值应该足够做一些战略上的计画了
那如果要细算到准确的话, 注意到这里的计算和实际情形只有对角线算法不同
实际情形是主动方得, 但这里把它给对半切了
计入这里的话, 占 1/3000 的对角线格子其中一半在估计中给了被动方
因此在 2000 是主动方的状况下正确机率应是 1/3 + (1/2)*(1/3000) = 667/2000
这数字正等於你求得的 2001000/6000000
====
一般来说, 令数值小的那方是 x, 数值大的那方是 y
则三角形面积会分别是 x^2 / 2 和 (y+(y-x))x/2
也就是两方起手比率是 x:2y-x, 数值小方起手机率是 x/2y
计入相等决定条件的话, 对角线格子占 1/y, 也就是这比例的一半 1/2y 给了被动方
因此数值小方主动的话小方先手机率会是 x/2y + 1/2y = (x+1)/2y 和推文公式一样
反之数值大方主动的话小方先手机率就是 x/2y - 1/2y = (x-1)/2y
主动的数值大方的先手机率即是拿 1 减得 1-(x-1)/2y 也和推文公式相同
====
如果要老老实实的算格子数其实也不是不行, 只是相等的问题就要在这里先处理
以数值小方主动为例, 沿用上面的 x y
数值小方先手的状况在骰 n 时有 n 个, 总计是 1+2+...+x = x(x+1)/2 个
机率即是其占全部的比例: [x(x+1)/2]/xy = (x+1)/2y
数值大方先手的话小方骰 n 时有 n-1 个先手状况, 总计是 0+1+...+(x-1) = x(x-1)/2
这样也能导出上面的 (x-1)/2y 和 1-(x-1)/2y 结果出来
====
顺带一提, x/2y 这个估计值也可以用来比较改版前後对这比例的影响
改版後的公式可以简单推得是 x/(x+y), 注意到分母变小 = 分数变大了
这代表这个改动增加了数值小方起手的机率
例如本文例的 2000 对 3000, 改版前是约 1/3 ~ 33.3%, 改版後是 2/5 = 40%
====
总之这篇的重点是: 当你的数值范围很大时
有时候画出像上面那样的大略估计范围可以很容易地求得一个很不错的估计值
估计误差会被大数值范围给稀释掉, 这样的估计值其实就已经能用了
并不一定需要计算到准确值才行
--
'Oh, Harry, don't you
see?' Hermione breathed. 'If she could have done
one thing to make
absolutely sure that every single person in this school
will read your interview, it was
banning it!'
---'Harry Potter and the order of the phoenix', P513
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 123.195.194.100 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Math/M.1597870294.A.894.html
1F:→ wohtp : 补充下估计误差,以上面那个2001000/6000000为例 08/20 18:02
2F:→ wohtp : 比例是 1.0005:1.9995,跟1:2只差了0.0005 08/20 18:03
3F:→ wohtp : 所以花那麽多功夫求精确值几乎没有意义 08/20 18:03