2013-05-04 49 views
0

我给出了一个介于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)) 

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

在此先感谢...

回答

1

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

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

我会质疑需要将漂亮因子转换为“像整数”。你可以简单地做'(>(随机)漂亮因素)''。 – 2013-05-04 19:43:35

+0

我熟悉的Scheme随机函数返回0和'limit'之间的整数。同意,有些人可能会返回0到1之间的实数。“随机”不是任何RnRS的一部分。 – GoZoner 2013-05-04 19:46:56

+0

OP用球拍标记。球拍语言定义了'(随机限制)'返回一个整数0..limit。和'(随机)'返回0到1之间的不准确数字。查看我的答案以获取参考链接。 (IMO的问题不应该有球拍标签和方案标签,除非使用R6RS或R5RS语言。球拍语言从方案演变而来,但不是方案)。 – 2013-05-07 00:47:08

0

解决此问题的一种方法是使用(随机1)。现在,如果结果< =好的因素,那么做“某事”别人做“没有”。

理由:

有范围为(0,1)包括获得数< = 0.2的20%的概率。

+0

我不明白你是什么意思。 – user2870 2013-05-04 19:16:07

+0

@GoZoner基本上创建了一个基于我所说的代码片段。 “某事”是“c”,“你的榜样没有”。说得通? – 2013-05-04 19:44:49

+0

好吧,现在感谢它变得明显 – user2870 2013-05-04 20:28:01

0

在模块球拍和球拍/碱(random k)生成从0-2的整数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))