0

こんにちは私は再設定を行いました、そして私がこのスレッドにたどり着いたとき私は正しい方向に終わったと信じています:

http://code.activestate.com/recipes/117241/

基本的に私の質問は、リンク内のコードが1行ずつ実行されていることです。あなたの説明が私にリンクのコードが満足のいく程度に何をするかを理解させるならば、あなたは私が以下に書いたすべてを潜在的に無視することができます。

そのリンクのコードが乱数を生成すると信じていますが、乱数は確率に直接関係しています。

私自身のコードでは、「数値」とその出現確率を取得し、確率に従って表示される出力「数値」を取得しようとしています。これは紛らわしいことですが、上のリンクを見ると、私が何をしようとしているのかが明確になることを願っています。以下の私のコードは、上記のリンクを参照しています。

したがって、私のプログラムでは、これらは私のグローバル変数です。

HIGH= 3
MED= 2
LOW= 1

これは私が取り組んでいるリストです:

n= [LOW,lowAttackProb).(MED,medAttackProb),(HIGH,highAttackProb)]
#lowAttackProb,med...,etc. are based on user input are just percents converted to decimals that add up to 1 in every case

上記のリンクに従って、ランダムコードを実装した方法は次のとおりです。

x= random.uniform(0,1)
for alevel,probability in n:
    if x<probability:
        break
    x=x-probability
return alevel

forループ内で何が起こっているのか、x=x-probabilityが何をしているのか正確にはわかりません。

x=0.90としましょう

私のリストでは、2番目のリストエントリが発生する可能性は0.60です。したがって、x(未満)の確率はFalseであるため(x(未満)の確率が発生するかどうかはわかりません)、コードは移動します。 n=n-確率に移ります。

これが理にかなっていることを本当に願っています。それがわからない場合は、不明な点をお知らせください。修正を試みます。助けてくれてありがとう。

4

1 に答える 1

4

このコードは、発生する可能性のあるイベントの確率を考慮したイベントの選択を実装します。これがその背後にある考え方です。

3つのイベント(またはそれらを呼び出すレベル) 、、、、がありLOW、それぞれ特定の非ゼロの確率があり、すべての確率の合計は正確に1になります。Pythonの標準的な手段を使用すると、0から1までの乱数を生成できます。それらを互いに「マッピング」しますか?次のように数直線に沿って確率を揃えましょう(簡潔にするためにL、M、Hと呼びます)。MEDHIGH

0__________________L______________L+M_________________________L+M+H ( = 1)

ランダムに生成された数xをとると、次のように言えます。

  1. xが区間[0、L]にある場合、最初のイベントが発生しました。
  2. xが半間隔(L、L + M]にある場合、2番目のイベントが発生しました。
  3. xが半間隔(L + M、L + M + H]にある場合、3番目のイベントが発生しました。

質問しているコードは、単にx間隔の1つに一致し、対応するイベント(またはレベル)を返します。

于 2012-12-07T09:55:20.947 に答える