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

Project1

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

[已经过期] 有两个关于随机数几率的问题

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
231 小时
注册时间
2007-12-17
帖子
541
跳转到指定楼层
1
发表于 2014-11-26 08:12:22 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式

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

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

x
本帖最后由 stella 于 2014-11-26 08:16 编辑

1):是rand(301)得到300的几率大,还是rand(101)+rand(101)+rand(101)得到300的几率大?

2):是rand(101)+rand(101)+rand(101)得到300的几率大,还是rand(101)*3得到300的几率大?

Lv1.梦旅人

梦石
0
星屑
50
在线时间
231 小时
注册时间
2007-12-17
帖子
541
17
 楼主| 发表于 2014-11-26 22:10:03 | 只看该作者
用来作为随机装备中生成str_plus的一个算法,数值大概在3~400之间,rand(角色等级)*(rand(2)+1)+rand(角色等级)+rand(角色等级),各位看看还有没有更好玩的算法?
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
50 小时
注册时间
2006-11-16
帖子
3409
16
发表于 2014-11-26 14:56:37 | 只看该作者
金圭子 发表于 2014-11-26 14:31
现在看到公式就头疼,说实话上次玩我之前推荐的那个游戏我突然发现我连傅里叶级数和拉格朗日中值法都忘光 ...
把高数放到游戏里面真是无力吐槽,不过Fourier级数和Lagrange定理还是很重要的


好像就是这个题目:



据说是里面最容易的一题了,不过我还是不知道他在说啥(唉)
其实这个游戏真的是蛮有意思的,配合了那画面和那背景音乐的这种台词,真的是非常让人哈哈哈哈哈哈哈哈……
http://www.66rpg.com/game/6738?s ... 1a374a433f596ad1440

(我会告诉你其实我是在刷积分么)

点评

答案是第二个,这个游戏我好像玩过  发表于 2014-11-26 17:38
最近好多想到PM的问题……不会嫌我烦了吧……
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
50 小时
注册时间
2006-11-16
帖子
3409
15
发表于 2014-11-26 14:31:39 | 只看该作者
本帖最后由 金圭子 于 2014-11-26 14:48 编辑
RyanBern 发表于 2014-11-26 14:27
利用中心极限定理来产生服从正态分布的方法比较少见,因为中心极限定理描述的是极限行为,而n=5明显太小 ...


现在看到公式就头疼,说实话上次玩我之前推荐的那个游戏我突然发现我连傅里叶级数和拉格朗日中值法都忘光了,无比惊讶(好吧我当年小学数学好中学物理化学好而到了大学就只剩下计算机码代码了)。
另外n=5是小了点,不过好像图形还是有点正太的……嗯,换个大点的n来跑下……

n=10和n=20的比照


VB 代码复制
  1. Private Sub Command7_Click()
  2.   Me.Cls
  3.   Dim x As Single, y As Single
  4.   Dim i As Integer, j As Integer
  5.   Dim a As Integer, b As Integer
  6.   Dim arr(500) As Integer, arr2(500) As Integer
  7.   Me.DrawWidth = 2
  8.   For i = 1 To 30000
  9.     x = 0
  10.     For j = 1 To 10
  11.       Randomize
  12.       x = x + Rnd * 1000
  13.     Next j
  14.     a = Math.Round(x / 20)
  15.  
  16.     y = 0
  17.     For j = 1 To 20
  18.       Randomize
  19.       y = y + Rnd * 1000
  20.     Next j
  21.     b = Math.Round(y / 40)
  22.     arr(a) = arr(a) + 1
  23.     arr2(b) = arr2(b) + 1
  24.     Me.PSet (a * 10, 5000 - arr(a) * 10)
  25.     Me.PSet (5000 + b * 10, 5000 - arr2(b) * 10)
  26.   Next i
  27. End Sub

点评

把高数放到游戏里面真是无力吐槽,不过Fourier级数和Lagrange定理还是很重要的  发表于 2014-11-26 14:35
最近好多想到PM的问题……不会嫌我烦了吧……
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

梦石
0
星屑
9532
在线时间
5073 小时
注册时间
2013-6-21
帖子
3580

开拓者贵宾剧作品鉴家

14
发表于 2014-11-26 14:27:52 | 只看该作者
本帖最后由 RyanBern 于 2014-11-26 14:31 编辑
金圭子 发表于 2014-11-26 14:08
嗯,做了个模拟正太分布(好吧,翻了下百度发现“指数律”这个名字好像不是人家的学名,人家叫“正态分布” ...


利用中心极限定理来产生服从正态分布的方法比较少见,因为中心极限定理描述的是极限行为,而n=5明显太小,n取太大又不现实。
因此可以参考下面的方法(需要初等概率论的知识)。
这里假设计算机能生成(0,1)之间的随机数,即随机变量X~U(0, 1),设F(x)为你要模拟的随机变量的分布函数(这里为正态分布的分布函数),那么,Y=F-1(X)就服从标准正态分布。其中F-1(x)为F(x)的广义逆(在正态分布的条件下,这个也是F的严格逆)
由于一维正态分布的分布函数F不容易算出,这里运用2维正态分布来处理一维的情况。

1.事实:如果X是(0, 1)均匀分布,那么Y=-ln(X)服从参数为1的指数分布

2.二维正态分布,相关系数为0,均值为(0, 0)方差为(1 ,1)的正态分布,其密度为exp(-(x^2+y^2)/2)/2pi,极坐标下为rexp(-r^2/2)/2pi,这说明r服从一个指数分布,θ服从(0. 2pi)上的均匀分布,所以

按照上述公式产生的X和Y都满足N(0, 1),而且相互独立。
其中ξ1和ξ2服从(0, 1)均匀分布,且相互独立。

(科普一下,请勿认真)
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
50 小时
注册时间
2006-11-16
帖子
3409
13
发表于 2014-11-26 14:21:45 | 只看该作者
参考Command2写了个对比的:

VB 代码复制
  1. Private Sub Command6_Click()
  2.   Me.Cls
  3.   Dim x As Single, y As Single
  4.   Dim i As Integer, a As Integer, b As Integer
  5.   Dim arr(500) As Integer, arr2(500) As Integer
  6.   Me.DrawWidth = 2
  7.   For i = 1 To 30000
  8.     Randomize
  9.     x = Rnd * 1000 + Rnd * 1000 + Rnd * 1000 + Rnd * 1000 + Rnd * 1000
  10.     Randomize
  11.     y = (Rnd * 5000 + Rnd * 5000 + Rnd * 5000 + Rnd * 5000 + Rnd * 5000) / 5
  12.     a = Math.Round(x / 10)
  13.     b = Math.Round(y / 10)
  14.     arr(a) = arr(a) + 1
  15.     arr2(b) = arr2(b) + 1
  16.     Me.PSet (a * 10, 5000 - arr(a) * 10)
  17.     Me.PSet (5000 + b * 10, 5000 - arr2(b) * 10)
  18.   Next
  19. End Sub
最近好多想到PM的问题……不会嫌我烦了吧……
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
50 小时
注册时间
2006-11-16
帖子
3409
12
发表于 2014-11-26 14:08:07 | 只看该作者
本帖最后由 金圭子 于 2014-11-26 14:17 编辑

嗯,做了个模拟正太分布(好吧,翻了下百度发现“指数律”这个名字好像不是人家的学名,人家叫“正态分布”,当然前面那个是我故意写错的囧),
跑了下果然还是很符合我预测的:

(我不会隐藏,就直接显示啦)



VB 代码复制
  1. Private Sub Command4_Click()
  2.   Me.Cls
  3.   Dim x As Single
  4.   Dim i As Integer, a As Integer
  5.   Dim arr(500) As Integer
  6.   Me.DrawWidth = 2
  7.   For i = 1 To 30000
  8.     Randomize
  9.     x = Rnd * 1000 + Rnd * 1000 + Rnd * 1000 + Rnd * 1000 + Rnd * 1000
  10.     a = Math.Round(x / 10)
  11.     arr(a) = arr(a) + 1
  12.     Me.PSet (a * 10, 5000 - arr(a) * 10)
  13.   Next
  14. End Sub

(好吧,上面公布了Command2,我这里就改成Command4吧,不过图我懒得换了,自己领悟吧)

再来个Command5:



VB 代码复制
  1. Private Sub Command5_Click()
  2.   Me.Cls
  3.   Dim x As Single
  4.   Dim i As Integer, a As Integer
  5.   Dim arr(500) As Integer
  6.   Me.DrawWidth = 2
  7.   For i = 1 To 30000
  8.     Randomize
  9.     x = Rnd * 5000
  10.     a = Math.Round(x / 10)
  11.     arr(a) = arr(a) + 1
  12.     Me.PSet (a * 10, 5000 - arr(a) * 10)
  13.   Next
  14. End Sub
最近好多想到PM的问题……不会嫌我烦了吧……
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
50 小时
注册时间
2006-11-16
帖子
3409
11
发表于 2014-11-26 13:53:28 | 只看该作者
龙和许也 发表于 2014-11-26 12:41
啊!!!!!我不懂数学!我不懂数学!为啥在水区出现!

你玩过对面橙光的《本座倒要看看你能活几天》么:

http://www.66rpg.com/game/6738?s ... 1a374a433f596ad1440

我觉得是个很不错的游戏,宫斗和“高等”数学混合在一起的“笑果”很不错,第一次玩到皇后问那个问题的时候我简直笑疯了╮(╯▽╰)╭

点评

嘿嘿~我会找个时间玩玩的,话说我很就没玩橙光游戏了呢。  发表于 2014-11-26 13:58
最近好多想到PM的问题……不会嫌我烦了吧……
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
50 小时
注册时间
2006-11-16
帖子
3409
10
发表于 2014-11-26 13:51:29 | 只看该作者
本帖最后由 金圭子 于 2014-11-26 13:58 编辑
myownroc 发表于 2014-11-26 12:03
不过我还想说的是编程中的随机数是伪随机数,样本数量一大会有规律的……
于是单纯的rand(x)规律比较明显, ...


我擦,第一个也太明显了吧,典型的线性代数啊╮(╯o╰)╭
第二个倒是很符合指数律的。

嗯,拷贝到VB6实测了一下(我一直觉得vb6是个好东西,平时开个解密码玩配对算24点之类的直接用vb6写个程序跑下多快),
第一个点过去简直就是波浪一样的感觉(汗),
第二个倒是有点星云团的感觉(笑)。

很好奇Command2是啥……

先沉下去想想怎么写一个模拟指数律效果东东出来……

点评

@小传子:真正的随机是完全不受任何影响,但实际很难,伪随机就是比如以当时时间的微秒(百万分之一秒)为随机值这种并非真正随机。  发表于 2014-11-30 21:11
伪随机是什么,大雾  发表于 2014-11-29 14:33
采用LCG产生随机数本身就有这个问题,公式X_n = aX_n-1 + c (mod M)。为此可以采用ICG,公式为X_n = a/X_n-1 + c (mod M)  发表于 2014-11-26 14:01
所有编程语言中的随机数函数都是伪随机吧  发表于 2014-11-26 14:01
Command2是(rnd * 5000 + rnd * 5000 + rnd * 5000 + rnd * 5000 + rnd * 5000) / 5  发表于 2014-11-26 14:01
最近好多想到PM的问题……不会嫌我烦了吧……
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
4
星屑
4459
在线时间
6784 小时
注册时间
2014-1-6
帖子
5052

开拓者

9
发表于 2014-11-26 12:41:36 | 只看该作者
啊!!!!!我不懂数学!我不懂数学!为啥在水区出现!{:2_270:}
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-10-4 03:24

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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