2017-01-23 2 views
0

n個の競合するカメが異なる決定ルールを使用する動作スペースを使用して、netlogoで一連のシナリオを実行します。私はそれが意味することは、私はコイン投げシナリオでメトリックを測定したいと言うことです。各プレイヤーはすべてのダニ、つまり2カメの状況でヘッドまたはテールをコールするようにプログラムされています。プレーヤーは常にヘッドを呼び、プレイヤーBは常にテールをコールします。 。netlogoの動作スペースで一意のシナリオのみをフィルタリングする方法

カメの数が3より大きい場合、ABCまたはACBまたはBCDがヘッドを呼び出す一方で、もう1つがテールを​​呼び出す場合があります。本質的にHHTHはHHHTと同じです。

だから私は、サンプル空間でHまたはTの位置を考慮せずに、一意の発生をフィルタリングするだけです。すなわち、1Hと3T、2Hしかない場合のみを望みます。& 2T 、3H & 1T。

ご協力いただきありがとうございます。よろしく。

答えて

1

あなたの質問には動作スペースが含まれていないようです。リスト内のヘッドをカウントするには、table拡張子を使用します。 (あなたが与える例がバイナリで、長配列を固定しているので、あなたはそれらの一方のみをカウントする必要があるので、ヘッド数は、尾の数を決定します。)

extensions [table] 

to-report nHeads01 [#lst] 
    let _t table:counts #lst 
    report ifelse-value (table:has-key? _t "H") [ 
    table:get _t "H" ;case sensitive ... 
    ][ 
    0 
    ] 
end 

例えば、我々はいくつかのランダムに生成することができます長さ4のシーケンス(あなたの例から)、長さ2のもの(または他のもの)のフィルタあなたは文字列としてシーケンスを保存している場合、あなたは上記のコードを使用する前に、文字列の拡張子とexplode文字列をインストールすることができ、またはあなたは、文字リストに文字列を変換するNetLogo read in file as list of charactersに従うことができます

to-report randomHT [#n] 
    report n-values #n [[?] -> one-of ["H" "T"]] 
end 

to test 
    let _xss n-values 20 [[?] -> randomHT 4] ;20 lists to filter 
    print filter [[?] -> (2 = nHeads01 ?)] _xss ;print those with 2 heads 
end 

。例:

to-report nHeads02 [#str] 
    let _lst map [[?] -> item ? #str] n-values length #str [[?] -> ?] 
    report nHeads01 _lst 
end 
+0

回答ありがとうございました。 – Yuvaraj

関連する問題