random class 随机类
rand 每次随机化这个类,这些变量都会赋一个值。
randc 随机化这个类,但是具有周期性。
constraint 约束,关系表达式,所选择的变量值必须为真。
例如:
变量src和dst为rand类型变量,随机值在[0,7]随机取值;变量kind为randc类型,随机值也是在[0,7]之间,但是只有将0-7内全部的值随机完成后在随机出原来的值。其中所随机的值必须符合约束constraint c中表达式。
既可以随机化2-status,可以随机化4-status,但是随机化生成的仅为2-status。
randomize()----随机化方法
randomize() 随机变量产生随机值,randomize是一个虚拟函数,它为对象中的所有活跃随机变量产生随机值,产生的随机值必须符合约束。
pre_randomize()和post_randomize()
每个类都包含了内建的pre_randomize()和post_randomize()函数,它们在计算新的随机值之前和之后被randomize()自动调用。所以在随机化过程中,pre_randomize、randomize和post_randomize函数的调用顺序为,pre_randomize---->randomize---->post_randomize
pre和post函数都可以被重写,但是pre和post并不是虚函数。pre函数执行对象被随机化之前的初始化和预处理,包括修改非随机值,例如权重和上下限等;post函数执行对象被随机化之后的清除和后处理,其中也可以包括对随机值随机之后的一些修改。
随机化函数
random() 平均分布,返回有符号的32位的值。
urandom() 平均分布,返回一个无符号32位的值、
urandom_range() 平均分布,但不能超过范围,例如urandom_range(seed,5,10)
dist_exponential() 指数分布 ,dist_exponential(seed,mean),mean为单位时间内事件发生的次数
dist_uniform() 平均分布,dist_uniform(seed, start, end)
dist_normal() 正态分布,dist_normal(seed, mean,std_dev), mean为期望,std_dev为标准差
dist_poisson() 泊松分布,dist_poisson(seed, mean),mean为期望。
约束 constraint
1. 简单表达式
约束中的表达式只能包含一个操作符,例如<=, ==, >=, <, >。
2. 等式表达式
仅仅包含表达式,不能使用赋值, 使用等价运算符将一个随机变量设置为一个值,例如,len==42。