ランダム関数を使って、選択しているオブジェクトの中からランダムでオブジェクトを選択しなおすMELスクリプトです。引数の値を使って選択する量の分布をコントロールできますので、ランダムだけどこの程度の数のオブジェクトを選択したいというときに有効です。
理論はすごく簡単で、0から$randMaxの範囲で作られる一様分布の擬似乱数のうち、0から1の範囲に収まる数が取得できたときだけ、オブジェクトを選択するという理論です。
まず、オブジェクトを選択します。
$randMaxのパラメータに1.5を入れて実行。2/3程度に減りました。
$randMaxのパラメータに4を入れて実行。1/4程度にしぼられる。
$randMaxのパラメータに20を入れて実行。1/20程度の数にしぼられるので、ほとんど残らなくなりました。
global proc randomSelect(float $randMax)
{
string $targets[] = `ls -sl`;
float $c;
float $threshold=1;
select -cl;
for($sel in $targets)
{
$c = rand($randMax);
if($c<=$threshold){
select -tgl $sel;
}
}
}
$randMaxのパラメータに1.5を入れて実行。2/3程度に減りました。
randomSelect(1.5);
$randMaxのパラメータに4を入れて実行。1/4程度にしぼられる。
randomSelect(4);
$randMaxのパラメータに20を入れて実行。1/20程度の数にしぼられるので、ほとんど残らなくなりました。
randomSelect(20);