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))

ただし、「ランダム」手順では、正確な整数を指定する必要があります。どうすればこの問題を解決できますか? ランダムに似た手順はありますか?

前もって感謝します...

4

3 に答える 3

1

niceness-factoryourを整数のような値 (の結果に匹敵するもの) に変換するだけrandomです。例えば:

(if (eq? 'c (tit-for-tat my-history other-history))
    'c
    (if (> (random 100) (* 100 niceness-factor)) 
        'c 
        'd)))
于 2013-05-04T19:20:11.927 に答える
0

これを解決する 1 つの方法は、(ランダム 1) を使用することです。結果 <= niceness-factor の場合、「何か」を実行し、それ以外の場合は「何も実行」しません。

根拠:

(0,1) の範囲内で <=0.2 の数値を取得する確率は 20% です。

于 2013-05-04T18:36:33.887 に答える
0

モジュールracketおよびracket/baseでは(random k)、0からk-1までの整数を生成します。(k は 1 から 4294967087 までの範囲でなければなりません)(randomは、0 から 1 までの不正確な数値を返します。参考ガイド:ラケットとラケット/ベースによってランダムに提供されます

ラケットを使用していて、ラケットがサポートする他の言語のいずれでもないと仮定すると、 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))
于 2013-05-07T00:44:40.140 に答える