随机过程需要方案中的精确整数

时间:2013-05-04 18:19:07

标签: random scheme racket

我得到一个介于0和1之间的实数。这是我的好处因素。这个因素是一种概率。我的意思是如果它是0.2,那就意味着会发生一些事情,概率为1/5。

我尝试使用

random 

程序。这是我的代码:

  (if (eq? 'c (tit-for-tat my-history other-history))
   'c
   (if (= (random (/ 1 niceness-factor)) 0) 'c 'd))

然而,“随机”程序要我给出一个确切的整数。我怎么解决这个问题?有没有类似随机的程序?

提前致谢...

3 个答案:

答案 0 :(得分:1)

只需将niceness-factor转换为类似整数的值(类似于random的结果)。例如:

(if (eq? 'c (tit-for-tat my-history other-history))
    'c
    (if (> (random 100) (* 100 niceness-factor)) 
        'c 
        'd)))

答案 1 :(得分:0)

解决这个问题的一种方法是使用(随机1)。现在,如果结果< = niceness-factor然后做“某事”,否则做“什么都没有”。

理由:

在(0,1)范围内获得数字<= 0.2的可能性为20%。

答案 2 :(得分:0)

在模块中,球拍和球拍/基座(random k)生成0到k-1(含)的整数。 (k必须介于1和4294967087之间)(random给出0到1之间的不精确数字。 reference guide: random provided by racket and racket/base

假设您正在使用球拍,而不是其他任何一种语言的球拍支持,那么您开始添加对exact-round的呼叫将最接近您的开始:

(if (eq? 'c (tit-for-tat my-history other-history))
    'c
    (if (= (random (exact-round (/ 1 niceness-factor))) 0) 'c 'd))

但我发现以下内容更简单:

(if (eq? 'c (tit-for-tat my-history other-history))
    'c
    (if (<= (random) niceness-factor) 'c 'd))