2014年9月7日 星期日

亂,也要找對方法 - bash shell 隨機亂數產生方法

# random.sh
#!/bin/bash

# 想要產生 1..500之間的亂數
n=500
echo $n

# 執行隨機亂數 500 x 100 = 50000 回合
for ((i=1; i<=50000; i++))
do
  # 顯示是第幾回合
  echo $i

  # 方法1
  RANDOM=`date +%s`
  echo $(( RANDOM % n + 1 )) >> 1.list

  # 方法2
  RANDOM=$$
  echo $(( RANDOM % n + 1 )) >> 2.list

  # 方法3
  # 目前相對好的bash隨機亂數方法, 隨機結果相對比較平衡
  echo $(( $(od -An -N3 -i /dev/random) % n + 1)) >> 3.list


done

----------
以R來檢驗亂數產生結果

方法1產生結果:

> d1<-read.table('1.list', header = F)
> d1=as.martix(d1)
> summary(d1)
       V1       
 Min.   :  1.0  
 1st Qu.:136.0  
 Median :256.0  
 Mean   :234.9  
 3rd Qu.:316.0  
 Max.   :500.0

> hist(d1)














方法2產生結果:

> summary(d2)
       V1       
 Min.   :  0.0  
 1st Qu.:263.0  
 Median :263.0  
 Mean   :258.7  
 3rd Qu.:321.0  
 Max.   :472.0 

> hist(d2)
















> summary(d3)
       V1     
 Min.   :  0  
 1st Qu.:125  
 Median :250  
 Mean   :250  
 3rd Qu.:375  
 Max.   :500


> hist(d3)
















ps. 其實上述範例產生出來的亂數範圍有點小錯 XD

沒有留言: