【matlab】离散化启发式算法编程中生成随机数

在离散化编程,特别是启发式算法编程中,经常用到随机整数列的产生,然后再对整数列进行操作和迭代。下面介绍几个常用的函数。

1.randi函数

randi函数用于产生一定范围的随机数,而且同一个随机数可以再一次出现。

比如:

 randi(5,5) %生成数字为1-5的5*5的矩阵

ans =

     3     1     5     1     2
     1     5     1     1     5
     5     2     3     2     1
     1     4     5     3     3
     4     1     3     5     3

randi(5,5,2)  %生成数字为1-5的5*2的矩阵

ans =

     4     4
     2     3
     2     3
     4     5
     3     4

 randi(5)  % 生成1-5的一个随机数

ans =

     3

randi([-5,5],5) %生成[-5,5]大小为5*5的矩阵

ans =

    -4    -4    -2    -3     4
    -4    -5    -5     4    -1
     3    -4     5     3     0
     4    -5    -4     1     2
     3    -3     5    -3    -3

2. randperm函数

randperm函数主要生成不重复数字的序列,为一维数组。主要用于一些初始解的产生。

randperm(5)

ans =

     4     5     3     2     1

randperm(5,3)  % 1-5的数字取出不重复的三个

ans =

     4     2     5

注意:randi(5,1,3)  %产生可以有重复数字的序列

ans =

     4     2     4

3. rand 函数

虽然rand函数只能生成0-1的随机数,但是可以通过round,floor等取整函数转化为整数随机数。 

round(rand(m)*(n-1)+1)   生成m*m矩阵,1-n

floor(rand(m)*n+1) 生成m*m矩阵,1-n

 round(rand(5)*9+1)

ans =

    10     4     4     3     8
     6     5     4     2     3
     1    10     8     7     1
     3     4     8     3     5
     4     7     9     4     5

floor(rand(5)*10+1)

ans =

     7     6     8    10     7
     4     2     6     1     1
     4     5     8     6     2
     3     5     6     4     3
    10     8     9     3     7

4. 时间比较

比较 randi函数和rand函数同样生成5*5的矩阵,每个元素大小从1-10. 分别运行10000000次,比较其时间

tic

for i=1:10000000

    randi(10,5);   %Elapsed time is 14.953315 seconds.

    floor(rand(5)*10+1);  %Elapsed time is 9.559714 seconds.

end

toc

总结:如果需要大规模的产生随机数,使用rand还是一个不错的选择,但是对于数据量不是很大的情况,randi使用起来是很方便的选择。

    原文作者:启发式算法
    原文地址: https://blog.csdn.net/richard_yang2016/article/details/51823666
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞