def normal(self, seed, vals): if Aleatorio.rX2 and seed == Aleatorio.seed: Aleatorio.rX2 = False return Aleatorio.nX2 Aleatorio.seed = seed i = random.randint(0, 1) m = vals[0] d = vals[1] while (True): v1 = 2 * rg.rand(seed) - 1 v2 = 2 * rg.rand(seed) - 1 w = v1**2 + v2**2 if w < 1: break aux = math.sqrt(((-2 * (math.log(w))) / w)) y1 = v1 * aux y2 = v2 * aux Aleatorio.nX1 = m + y1 * d Aleatorio.nX2 = m + y2 * d Aleatorio.rX2 = True #print('Aleatório rX1: ', Aleatorio.nX1) return Aleatorio.nX1
def normal(self, dist): if self.has_next_normal: self.has_next_normal = False return self.next_normal v1 = 1 v2 = 2 while (v1**2 + v2**2 > 1): #print 'start' v1 = 2 * rand_generator.rand(self.stream) - 1 v2 = 2 * rand_generator.rand(self.stream) - 1 # print(self.stream) # print(v1) # print(v2) w = math.pow(v1, 2) + math.pow(v2, 2) y1 = v1 * math.sqrt(-2 * math.log(w) / w) y2 = v2 * math.sqrt(-2 * math.log(w) / w) x1 = dist[0] + y1 * dist[1] x2 = dist[0] + y2 * dist[1] self.next_normal = x2 self.has_next_normal = True return x1
def normal(m, d, stream): v1 = 2 * rand_generator.rand(stream) - 1 v2 = 2 * rand_generator.rand(stream) - 1 w = pow(v1, 2) + pow(v2, 2) if w > 1 or w == 0: return normal(m, d, stream) y1 = v1 * math.sqrt((-2 * math.log(w)) / w) y2 = v2 * math.sqrt((-2 * math.log(w)) / w) return (m + y1 * d, m + y2 * d)
def exponencial(self, seed, media): # """Gera um número segundo uma distribui��o exponencial negativa de m�dia m""" rnd = rg.rand(seed) return (-media * math.log(rnd))
def exponencial(media, stream): """Gera um número segundo uma distribuição exponencial negativa de média m""" #return (-media*math.log(random.random())) return (-media * math.log(rand_generator.rand(stream)))
def exponencial(self, media): # """Gera um n�mero segundo uma distribui��o exponencial negativa de m�dia m return (-media * math.log(rand_generator.rand(self.stream)))