【发布时间】:2013-06-07 09:28:11
【问题描述】:
Bash 脚本控制需要随机种子才能运行的 Python 脚本(“main.py”)。 为了获得模拟的几种实现,我想为它们中的每一个设置一个 random 随机种子。
我想初始化(在 Bash 脚本中)一个随机的 NEXP 整数数组,但我认为没有正确完成。确实,我对数组进行了错误的初始化。这是代码:
NEXP=10
array_seed = [$NEXP]
for j in `seq 0 1 $NEXP`; do
array_seed[$j]=$RANDOM
echo $array_seed[$j]
done
for A in `seq 0 0.1 1`; do #A is a parameter of the simulation
for i in `seq 0 1 $NEXP`; do #10 realiz. of the process for each A
SEED=$array_seed[$i]
./main.py $A $SEED > output-$A-$i.dat
done
done
这里是我得到的
23041[0]
23041[1]
23041[2]
23041[3]
...
问题 #1(已解决):我做错了什么?以及如何将 $NEXP - 1 放入 seq 以获取索引从 0 到 NEXP-1 的数组?我试过用双括号表示它不起作用。
答案(由约翰·查恩斯爵士):
NEXP=10
array_seed = [$NEXP]
for i in `seq 0 1 $(($NEXP-1))`; do
array_seed[$i]=$RANDOM
echo ${array_seed[$i]}
done
问题#2:这是解决获得模拟独立实现问题的好方法吗?我怎样才能进一步减少模拟/实验之间的相关性?
问题 #3:最后,我是否也应该处理 Bash 伪随机生成器的种子?
谢谢!
【问题讨论】:
-
关于问题 #3,
bash$RANDOM不是很准确(sh、ksh、zsh等也适用)...任何有效的播种方法。对于这种特殊用途,它可能就足够了,但如果可用,您最好使用/dev/[u]random,或者为严肃的模拟/建模提供更高质量的 PRNG/CRNG 的其他程序/库。