Matlab计算时为了提高运行速度需要通过parfor,或者option选项并行进行计算。但有些时候需要在并行计算中建立不可重复的文件名或者生成随机数,而有些内嵌的app中是无法多输入随机数的。同时并行计算,尤其第一步计算时,是同时调用进程的。导致生成的随机数一致;在某些计算过程中,变量也是一致的,就导致了无法区分多个进程,生成的随机数也相同。
近期计算过程中遇到此类问题。利用ga调用外部数据进行优化计算。需要对每一个个体建立文件夹,而生成的个体中会出现个体值是相同的情况,同时并行计算时触发时间相同,利用伪随机生成的数也相同,这些就导致无法创建文件名,顺利调用个体。
思考时发现并行计算时:
输入参数 | 相同 | √ |
触发时间 | 相同 | √ |
进程编号 | 不同 | × |
因此,利用读取进程编号可以为不同的计算路径取名,或者利用进程编号为seed生成随机数列。
%%%%利用输入参数和进程编号生成文件名
A=[mo1,mo2,mo3,mo4] %输入参数
TMD=get(getCurrentTask(),'ID'); %读取进程
A1=[num2str(mo1) '_' num2str(mo2) '_' num2str(mo3) '_' num2str(mo4) '_' num2str(TMD)];%生成文件名
%%%%利用进程编号生成随机数列
TMD=get(getCurrentTask(),'ID'); %读取进程
randn('seed',TMD);
randn(5); %生成随机数 或利用 rng