原创RPG系统设计,概率求助(我数学没学好)

  • x
    xiezhenggang
    自制RPG系统,属性&技能部分。

    4项基础属性,取值范围2~4,分别对应2d6~4d6。
    若干技能,每项分别对应某个基础属性。比如“科技/维修”就对应“智能”。
    假设智能4,需要做科技检定时就投4d6。

    技能可以提升,提升后的技能有更多“重投1次”的机会。
    已受训1次,职业级2次,专家级3次,大师级4次。
    假设某人智能4,科技/维修达到职业级,则投4d6,并有2次重投机会。

    方案a:一次投4颗,不满意重投任何一颗,再不满意再重投任何一颗。
    优点:无论如何,只需4颗骰子。
    缺点:重投多次。

    方案b:一次投6颗,取最大的4颗,其余舍去。
    优点:一次出结果,快速、直接。
    缺点:一大把骰子。

    个人感觉这两个方案的数学期待值应该会有些差异,但我概率是自修的,基础公式不熟。
    求计算这两个方案分别对应的数学期待值。
    考虑到非人类生物的情况,考虑到超级英雄的超级牛逼,我需要知道如下数据:
    方案a
    不重投
    重投1次
    重投2次
    重投3次
    重投4次
    重投5次
    1d6
    3.5





    2d6
    7.0





    3d6
    10.5





    4d6
    14.0





    5d6
    17.5





    6d6
    21.0





    方案b
    无额外骰
    多投1颗
    多投2颗
    多投3颗
    多投4颗
    多投5颗
    1d6
    3.5





    2d6
    7.0





    3d6
    10.5





    4d6
    14.0





    5d6
    17.5





    6d6
    21.0






    另:最好能提供计算公式。这样如果以后把d6改成d10,可以自己套公式。
  • t
    thest
    感觉像山屋惊魂+CV
    方案A,如果说平均期望值的话,因为不管怎么投都是D6,每次投出来的结果也都是独立事件,所以方案A重投和不重投的期望是没有区别的吧?
    至于方案B的话,实际上有两种标准
    一种是以有效结果来计算(1111)+(1112)+(1122)+(1222)+...+(6666)的平均数,直接拿最终结果来计算就是(4+5+6+...+24)21=14
    另一种是以投骰子事件的概率来计算,既ABCD四个骰子投出1112和投出1121分别算作两种不同的结果,但因为我是一个高中数学早就被吃掉了的没知识的文科生,所以我不知道这里该怎么列公式怎么计算
    至于你需要哪种就看你需求了,思路不一定对,有帮助最好,没帮助权当抛砖引玉
    另外我投方案B一票,只要不贪的话玩家重投肯定是不会吃亏的,这样一来设计的目的可能会比较合理——我花费时间和金钱去受训,不是为了给自己一个被自己给坑了的机会toka。当然如果你的目的就是强调随机性,或者说所有的受训技能都是有利有弊的,那方案A也未尝不可
    拍个脑袋:现在是只有“重投次数”的限制与成长,如果再加一个关于重投“骰子个数”方面的内容,会不会灵活很多?比如像DND五版规则每3级选择一个道途那样,每次受训可以选择强化方向(然而这样就真的成CV的丢骰规则了
  • t
    thest
    另外一大把骰子丢出去的感觉很爽啊很爽啊很爽啊说三遍
  • d
    dalos
    桌游我只一个建议,不要复杂化。
  • d
    deadbeef
    方案A和方案B在大体上是一样的

    如果强制方案A必须把重骰的次数用尽 则完全等同于方案B
    但是因为方案A能够选择重骰多少次 所以比方案B的选择性更大


    就楼主说到的那些数据 最近脑子有点转不动 重骰确实一时想不出该怎么计算期望
    所以图个方便 拿HASKELL写了个程序直接计算 代码如下

    1. import Control.Applicative
    2. import Data.List

    3. main = do
    4. print "E(4)"
    5. print $ nexpect 4
    6. print "D(4)"
    7. print $ nvariance 4
    8. print "E(5)"
    9. print $ nexpect 5
    10. print "D(5)"
    11. print $ nvariance 5
    12. print "E(6)"
    13. print $ nexpect 6
    14. print "D(6)"
    15. print $ nvariance 6

    16. nmax :: (Ord a) => Int -> [a] -> [a]
    17. nmax n = take n . reverse . sort

    18. type Dice = Int
    19. type Props = [Dice]

    20. roll :: Props -> Dice -> Props
    21. roll props dice
    22. | length props < 4 = dice : props
    23. | otherwise = nmax 4 (dice : props)

    24. roll_all :: [Props] -> [Props]
    25. roll_all props_all = roll <$> props_all <*> [1..6]

    26. nroll :: Int -> [Props] -> [Props]
    27. nroll 0 = \x -> x
    28. nroll n = roll_all . nroll (n-1)

    29. expect :: [Props] -> Float
    30. expect props_all = (fromIntegral . sum . fmap sum $ props_all) / (fromIntegral . length $ props_all)

    31. variance_ :: [Props] -> Float -> Float
    32. variance_ props_all e = (sum . fmap (\x -> (fromIntegral (sum x) - e) ^ 2) $ props_all) / (fromIntegral . length $ props_all)
    33. variance :: [Props] -> Float
    34. variance props_all = variance_ props_all $ expect props_all

    35. nexpect :: Int -> Float
    36. nexpect n = expect . nroll n $ [[]]

    37. nvariance :: Int -> Float
    38. nvariance n = variance . nroll n $ [[]]

    复制代码
    输出的结果是留4个最大值时 骰4次,5次,6次的期望和方差
    "E(4)"
    14.0
    "D(4)"
    11.666667
    "E(5)"
    15.930942
    "D(5)"
    11.362313
    "E(6)"
    17.344479
    "D(6)"
    10.020688


    在4次以前的则是很简单的初等概率问题 期望是3.5*n 就不列了
  • f
    frosta
    如果强制方案A必须把重骰的次数用尽 则完全等同于方案B
    但是因为方案A能够选择重骰多少次 所以比方案B的选择性更大

    感觉这说法有点问题吧
    方案A是重骰之后强制用重骰的结果,方案B则是相当于重骰之后选择想要的结果
    拿个最简单的例子,一个骰子+重掷10次,
    方案A无论重掷多少次都只有最后一次有效,期望是3.5
    方案B则是掷11个骰子,选其中的最大值,很显然期望要远大于3.5
  • x
    xiezhenggang
    拜谢!
    既然两个方案没什么本质差别,我就不去纠结了。
    索性两种处理方式都开放,让玩家自行选择好了。
  • x
    xiezhenggang
    允许提前终止啊。
    方案a是每次选择数字最小的那个重投,直到最小数字大于3,或达到重投次数上限。
  • x
    xiezhenggang
    原则上,方案b应该会比方案a的期待值略高一点点。
    因为在“投”的时候两个方案没太大差别,在“选”的时候,方案b的可知信息更多一些。
  • d
    deadbeef
    2个方案并不是没区别
    应该说B是A的一种特化情况
    也就是A强制玩家每次舍弃最下值 并且用尽重骰次数

    单独考虑A的话 期望实际是没有意义的 因为并没有给定一个玩家选择规则

    关于不同选择对于总期望的影响,方案A下玩家能选择2个参数
    1,重骰后舍弃哪一个数值
    2,还有机会时,是否继续重骰

    就参数1来说,选择舍弃最小值肯定是最大化期望的最优解
    直观上来说 这个局部最优应该是等效于全局最优的(没力气去证明 所以只能说是直观认为)

    而对于参数2来说
    直观上,每一次重骰只有可能增加总数值,并不可能降低总数值
    所以如果玩家依照某个决策规则来决定何时停止重骰,虽然总期望并不好计算,但是可以说总期望一定无法超越方案B的期望

    也就是说 方案B实际上应该是方案A的期望最大化的最优决策
  • d
    deadbeef
    我觉得这里 方案A 让玩家选择是否继续 实际上的意义并不大

    正如我上面说的 因为无论如何选择 选择重骰 都是没有坏处的
    即使没有摇出更大的数值 至少也能舍弃掉这次数值 保证总数值不改变
    也就是说玩家理应无条件选择一直重骰 直到机会用尽
    这时候方案A也就等同于方案B了

    若想给玩家在方案A的选择上增加一些风险 让这个选择变得更有意义 则可以加上一些限制
    比如重骰出的数值 不允许舍弃 只能舍弃已保留的数值中的一个 也就是说强制要替换掉一个原始数值

    这样做的话 玩家的选择决策就会大大的影响到总的期望了
    而且就算玩家不选择 只是每次都用尽机会 期望也将比方案B低
    不过无论决策如何 方案B 的期望永远是上限

    只是这么加个限制的话 感觉会徒增玩家的烦恼……
  • S
    Scrummble
    方案B一定比方案A要强。
    方案A中第六颗骰子无论多么低,结果都会保留,而B的话无论第几颗数值太低都可以被其他骰子换掉。
  • d
    deadbeef
    对 你看到了盲点
    这里A方案和B方案是否同质化的最大问题
    就是重骰出来的这个数值 是否可以舍弃
    也就是是否强制替换原始数值

    楼主的主帖里好像并没有强调这一点
    所以我前面当然是挑比较简单的情况
    也就是不强制替换 可以选择舍弃重骰数值 来分析的

    至于强制替换 就像我楼上说的 结果和玩家选择有很大关系 但是期望不会超过方案B
  • x
    xiezhenggang
    细看了一下,感觉好像有点问题。
    比如说1颗骰子的情况,平均期待值是3.5。
    当有重投机会时,典型的策略是:
    1~3,重投;
    4~6,保留。
    目标是争取平均值>3.5。

    方案b就简单了,一把投完,取最大的那几个,出啥算啥。
  • d
    deadbeef
    上面那个方案A的表没有考虑决策问题
    横轴是几 就是重投几次的期望和方差

    也就是计算的 重骰N次的期望 而不是计算的 最多重骰N次的期望
    换句话说 就是强制N次重骰用完的情况

    最多重骰N次的情况 因为实际骰几次 只由玩家决定 所以并没有合在一起计算期望的意义


    另外 你说的1颗骰子的情况
    就是最多重骰N次的情况 因为有玩家决策在里面加成 所以决策没有确定时并不能计算实际期望


    顺便提一种一定能比上述列出的表中期望高的决策
    当最大重骰次数是N时 重骰N次的期望为E(N)(即表中值)
    那么重骰过程中一旦骰出的总值大于E(N) 则立刻停止
    那么按照这种决策得出的新的总期望E'(N)一定是大于E(N)的


    简化到1颗骰子的情况 也就是你上面提到的决策方法因为对于1颗骰 E(N)恒等于3.5
    所以只要骰出大于3.5的值就停止 结果的总期望一定比表中大

    但是这种决策也只是一种局部最优决策 很难认为这是全局最优决策
  • f
    fcmorrowind
    天哪,概率论都是怎么学的……居然连A比B期望要高都出来了……
  • s
    strider_oy
    方案a和策略有关,重投和不重投当然有本质的区别。
    选择单次实验,重投策略为<6 那么期望就是 6*1/6 + 5/6*3.5 比不重投要高,重投策略≤3的期望是最大值。按照这个推广一下可以分析方案a了。

    — from LGE Nexus 4, Android 5.1.1