我得到一个介于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))
然而,“随机”程序要我给出一个确切的整数。我怎么解决这个问题?有没有类似随机的程序?
提前致谢...
答案 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))