def theta_prior_rqmc(i, dim=5, n=1): random_seed = random.randrange(10**9) u_generator = np.array(randtoolbox.sobol(n=n, dim=dim, init=(i==0), scrambling=1, seed=random_seed)) # randtoolbox for sobol sequence #if u_generator.shape[1] != 5: # raise ValueError("Input random generator has wrong size ! ") lam = gaussian(u_generator[:,0]) delt = gaussian(u_generator[:,1]) barrier1 = np.exp(lam) barrier2 = np.exp(lam+delt) s = gaussian(u_generator[:,2]) drift1 = -0.1+u_generator[:,3]*0.2 drift2 = -0.1+u_generator[:,4]*0.2 if dim>5: extra_drift = -0.1+u_generator[:,5:]*0.2 return np.expand_dims(np.hstack((np.array([barrier1, barrier2, s, drift1, drift2]), extra_drift.squeeze())),1) else: return np.expand_dims(np.array([barrier1, barrier2, s, drift1, drift2]),1)
def theta_prior_mc(i, dim=5, n=1): random_seed = random.randrange(10**9) np.random.seed(seed=random_seed) u_generator = np.asarray(np.random.uniform(size=dim*n).reshape((n,dim))) #if u_generator.shape[1] != 5: # raise ValueError("Input random generator has wrong size ! ") lam = gaussian(u_generator[:,0]) delt = gaussian(u_generator[:,1]) barrier1 = np.exp(lam) barrier2 = np.exp(lam+delt) s = gaussian(u_generator[:,2]) drift1 = -0.1+u_generator[:,3]*0.2 drift2 = -0.1+u_generator[:,4]*0.2 if dim>5: extra_drift = -0.1+u_generator[:,5:]*0.2 return np.expand_dims(np.hstack((np.array([barrier1, barrier2, s, drift1, drift2]), extra_drift.squeeze())),1) else: return np.expand_dims(np.array([barrier1, barrier2, s, drift1, drift2]),1)
def brownian_self(steps): u = random_sequence_mc(steps) brownian_increments = np.cumsum(gaussian(u)) return brownian_increments