设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 3619|回复: 24
打印 上一主题 下一主题

[讨论] RM MV里一些关于随机量的玄学?

[复制链接]

Lv4.逐梦者

梦石
0
星屑
18537
在线时间
1029 小时
注册时间
2019-3-5
帖子
1418
跳转到指定楼层
1
发表于 2020-11-25 15:39:00 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
若一个物品中奖率为1/10,那么可设置“变量1 抽奖次数” = 1~10
然后判断结果是否等于数字1
如果等于,就算玩家中奖。
本人制作的《画师》中就大量采用了这种方法,来
判断随机问题。


比方说约稿网站平台上的委托金额就是随机的,甲方信誉和对色调的需求也是如此。按理来说这种随机方法是没什么问题的。


可不知道是不是我的错觉,从游戏制作开始到目前完成自己游玩了几遍,总感觉RM MV的随机量存在一个严重的问题。


即,随机结果存在“黏性”规律

以下述截图为例子,甲方对色调的需求每个都应该是1/8,事件逻辑上我也已经排除过没有任何bug:




可实际“青色”出现的概率却特别大。



这种“重复率”还存在在其他地方,整个制作过程我都深有体会,一度怀疑是自己脸黑还是如何。


于是刚才最终抽出了点时间,做了一个简短的实验,试着证明是自己一直以来的方法错误,或者是RM随机数的机制问题:






这个循环可以让RM自己报数出结果。






这是前三次循环出来的结果,每一组我都F5重新开始,
可以看出其中某些数字出现的频率比较


当然,这样本量还是太少了,很难说明问题。我们继续尝试。






又来三十次,这次随机是连续的,没有中途F5。
就结果来看,某些数字的重复度仍然很,而数字4居然从头到尾都没有出现过


我开始意识到这可能是一个区间问题,毕竟1~10这个随机区间撞车概率是挺大的。
而《画师》中大部分随机区间都不超过个位数,出现“甲方老是要求青色”的情况也并不奇怪。






来试试1~100,这次也是连续刷出,没有中途F5,
现在结果撞车的概率变小了。


毕竟这是1/10和1/100的区别。


也就是说,不管是不是因为RM机制导致的1/10撞车概率大,我们采用1~100这样扩大区间,是否就好解决撞车问题了呢?
但我们想要的是1/10中奖率,不是1/100啊,这该怎么办?


把判断条件从“小于等于1”改成“小于等于10”吗?


这样一来不又变成了1/10概率吗:






如果上述1~100的随机结果以1~10作为区间采样的话,我们还是会发现撞车率特别大(数字4依旧只出现一次)。


写到我脑子已经有些混乱了。


让我们来假设一下问题所在:


区间小的随机数结果撞车概率特别


先不论这是否是RM的底层逻辑问题。


这最终会导致一个致命情况,游戏里你希望是1/10概率才出现的事件实际上无法做到1/10概率出现。


这或许意味这人类对概率的直观感受实际情况之间的遥远差距。


通俗点说,做游戏别用“真随机”。如果你的游戏特别依赖随机数值产生的事件,别用随机。
一定要手动加一个能追踪玩家体验的“保底量”——伪随机——手游抽卡,检测玩家仓库那套,只是他们用来作恶,而我们可以把这种方法用在优化玩家体验上。


否则,不管是对你的玩家而言,还是你在测试游戏的过程中。


“真随机”都不会给你一个好的体验。


因为你完全无法捉摸得透。


最后,“随机结果撞车率大”这到底是不是RM的机制问题呢?




点评

我记得老师说过所有电脑随机值都是伪随机, 没有真随机, 不知有没记错  发表于 2020-11-27 11:18

Lv6.析梦学徒

老鹰

梦石
40
星屑
33407
在线时间
6552 小时
注册时间
2012-5-26
帖子
3178

极短24评委极短23参与极短22参与极短21评委老司机慢点开短篇十吟唱者组别冠军开拓者剧作品鉴家

2
发表于 2020-11-25 16:50:23 | 只看该作者
我觉得这个应该是样本数量太少的缘故

我用va试了试,默认的随机应该是没有问题的



当改成100个样本时,随机数弊端立刻显现(

点评

不,那只是单纯的ssr数量太多了···  发表于 2020-11-26 21:25
看来真的存在撞车问题?突然好奇很多游戏把游戏概率设置为千分之几是不是就是为了避免这种情况……  发表于 2020-11-25 23:10

评分

参与人数 1星屑 +30 收起 理由
回转寿司 + 30 赞认真的试验

查看全部评分

回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
37794
在线时间
5400 小时
注册时间
2006-11-10
帖子
6546
3
发表于 2020-11-25 17:44:29 | 只看该作者
本帖最后由 灯笼菜刀王 于 2020-11-25 17:58 编辑

用XP, 1000次,  测试三次结果



我是觉得随机的结果在短时间内很接近(传说中的窗口期?), 而且靠近中间的数随到的几率总是比人家略多些~~


像这种姐妹舰(成长率差不多)在同时升级的时候随机加的点非常接近~ 曾经让我很头疼~ 不过解决方法很简单, 不同时升级就好了,笑, 改了经验获取规则,现在是不会同时升级了

目前我是用洗牌+随机抽的方式来以求"更随机", 不过被人家说这种做法没太大意义, 嘛,随两次总比一次强吧...

点评

就是你, 我印象中你说过抽会有近似值这个问题  发表于 2020-11-27 11:14
果然rm的随机有这方面的“特性”吗……看来以后都得注意下了  发表于 2020-11-25 23:11

评分

参与人数 1星屑 +30 收起 理由
回转寿司 + 30 赞认真的试验

查看全部评分

回复 支持 反对

使用道具 举报

Lv5.捕梦者 (暗夜天使)

梦石
18
星屑
12166
在线时间
2048 小时
注册时间
2012-12-12
帖子
541
4
发表于 2020-11-25 21:14:19 | 只看该作者
概率就是这样吧?十分之一概率,肯定不可能每十次都中一次,只是平均下来是十次中一次。
我也觉得中间的数字比较容易抽到,所以判定都会写中间数字……

点评

奇妙的概率学  发表于 2020-11-25 23:13

葱兔の游戏列表 (´・ω・`)
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
34870
在线时间
4148 小时
注册时间
2007-12-15
帖子
9981
5
发表于 2020-11-26 08:35:39 | 只看该作者
随机问题取样率要高才有实际意义,样本数量越大结果越接近真实。
下次从十万次起抽就稳定了。
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3118
在线时间
276 小时
注册时间
2019-4-23
帖子
202
6
发表于 2020-11-26 11:28:24 | 只看该作者
  1. function randomTest(max, count) {
  2.     const a = []
  3.     for (let i = 0; i < count; i++) {
  4.         let number = Math.randomInt(max);
  5.         a[number] = a[number] || 0
  6.         a[number] += 1
  7.     }
  8.     a.forEach((v,index)=>{
  9.         const text = `${index}=> times:${v},rate:${v/count}`
  10.         console.log(text)
  11.     })
  12. }
复制代码


这是一段随机测试代码,
randomTest(10,10000000);大致数据都在 10%,所以在大样本测试下...随机是均衡的,
但是这种测试可能存在,某段时间重复出现某个区间值,这就像运气差的时候各种非酋,运气好的时候,各种欧皇

点评

顺便说下测试代码使用,f12打开console,输入上面代码。然后执行 randomTest(10,100),最大值10,测试100次  发表于 2020-11-26 11:29

评分

参与人数 1星屑 +30 收起 理由
回转寿司 + 30 赞提供测试代码

查看全部评分

回复 支持 反对

使用道具 举报

Lv5.捕梦者 (暗夜天使)

梦石
1
星屑
20321
在线时间
4876 小时
注册时间
2014-12-22
帖子
1525

开拓者

7
发表于 2020-11-26 11:32:10 | 只看该作者
正好最近在做抽卡游戏,一开始做1~100随机抽数字,有一次连续抽到3个33↓

惊得我都截图了(x)
要说这个概率是小得很,但纯随机就是这样吧~概率再小运气到了都能给你弄出来XD
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9275
在线时间
2504 小时
注册时间
2011-5-20
帖子
15389

开拓者

8
发表于 2020-11-26 21:29:04 | 只看该作者
因为这个随机和老虎机类似吧
有特定的算法可以算出来在什么时候会出现什么结果
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
8
星屑
2832
在线时间
474 小时
注册时间
2010-9-11
帖子
519
9
发表于 2020-11-27 08:51:46 | 只看该作者
本帖最后由 phunmung5173 于 2020-11-27 15:34 编辑

不确定RM的底层逻辑。但是电脑其实是没有办法自己随便生成一堆数字的,它必须依赖一个根 (root) 并以其为基础生成乱数。如果每次使用的根是一样的,那么每次出来的结果都会是一样的。
最常见的解决方法是取得电脑的时钟时间,毕竟不太可能每次开游戏都是同一小时同一秒,这样某种意义上就实现了所谓的 「真乱数」

游戏设计方面,真乱数并不适合用在会影响游戏核心体验的地方。
这样设计会严重影响游戏体验,现实生活因为不可控所以常常会感到无力感,难不成来到游戏世界还要体验这种无力感吗?

——————————————————————————————————————————————————————————————————————————
补充:
还有一种机制叫 Pseudorandom number (伪随机数)
例如虽然告诉玩家A卡的掉落几率是10% , 但是实际计算内每一次抽不中A的时候就提升A的几率,并重置已经抽中的卡的掉落几率。
可以有效的减少卡牌掉落的重复性,抽不到想要的卡,多抽几次总会出来。

评分

参与人数 2星屑 +30 +1 收起 理由
Zeldashu + 1 精品文章
回转寿司 + 30 赞认真的讨论

查看全部评分

Paku
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
14048
在线时间
2070 小时
注册时间
2016-9-20
帖子
844
10
发表于 2020-11-27 11:16:05 | 只看该作者
本帖最后由 ppspssss 于 2020-11-27 11:33 编辑

https://rpg.blue/thread-406406-1-1.html
印像中@灯笼菜刀王 老师 說过这个問題

我记得以前电脑老师说过所有电脑随机值都是伪随机, 没有真随机, 不知有没记错
为什么电脑能抽随机数,这个问题确实难想,毕竟不会凭空生成随机值?  看随机数抽取的原理,老师举过例比如自制小装置 6个小灯轮换,通过不同时间断点, 停下的灯就是随机的值, 那时间相近, 抽取的值我就不知道了 , 不过难免有些情况要同一帧抽多个元素, 比如初始化卡组, 十连抽
举例网游中的抽卡那些 , 确实依然是伪随机, 是有规律 , 我发现比如接近同一时间内抽取出的角色比较接近 , 一些网游戏是这样 , 抽过卡肯定有这种感觉 有时抽好多都不出, 有时有人连抽几个好东西, 除了人为改动公式, 比如 如果抽到相近的数字则触发再抽一次,  当然很多人为操纵因素就不算了 , 被套路了也不知道

点评

抽卡那个都是发到服务器去取随机数的 所以不可能说同一个时间点抽出来很多 只能说是因为大家都相信特殊时间段出货率高所以一起抽 基数大了  发表于 2020-11-29 02:28
电脑确实是可以生成真随机数的 比方汇编指令 rdrand 比方linux /dev/random 但一般出于效率和通用性用伪随机算法 但那些算法随机性一般也非常好了  发表于 2020-11-29 02:16

评分

参与人数 3星屑 +30 +2 收起 理由
Zeldashu + 1 塞糖
SixRC + 1 别的我也不懂
回转寿司 + 30 赞认真的讨论

查看全部评分

内容仅供参考,
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-4-26 08:35

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表