def test_gbm_log_euler_step_nd_output_changes_with_t(self):
        drift = np.asarray([0.1, 0.3, -0.05], dtype=np.float32)
        vol_matrix = 0.2 * np.asarray(
            [[1.5, 0.2, 0.3], [0.2, 1.1, -0.1], [0.3, -0.1, 0.8]],
            dtype=np.float32)
        dt = 0.01
        t_0 = 0.0
        num_samples = 8
        num_dims = drift.shape[0]
        t_1 = t_0 + dt

        log_states = tf.zeros([num_samples, num_dims])

        next_log_states_0 = dynamics.gbm_log_euler_step_nd(
            log_states, drift, vol_matrix, t_0, dt)
        next_log_states_1 = dynamics.gbm_log_euler_step_nd(
            log_states, drift, vol_matrix, t_1, dt)

        with self.session() as session:
            next_log_states_0_eval, next_log_states_1_eval = session.run(
                (next_log_states_0, next_log_states_1))

        self.assertEqual(next_log_states_0_eval.shape, (num_samples, num_dims))
        self.assertEqual(next_log_states_1_eval.shape, (num_samples, num_dims))

        # The step is a bijection w.r.t. dw_t, all terms should be different.
        self.assertAllDistinct(next_log_states_0_eval, next_log_states_1_eval)
Пример #2
0
  def test_gbm_log_euler_step_nd_is_deterministic(self):
    drift = np.asarray([0.1, 0.3, -0.05], dtype=np.float32)
    vol_matrix = 0.2 * np.asarray(
        [[1.5, 0.2, 0.3], [0.2, 1.1, -0.1], [0.3, -0.1, 0.8]], dtype=np.float32)
    dt = 0.01
    t = 0.0
    num_samples = 8
    num_dims = drift.shape[0]
    key = 128

    log_states = tf.zeros([num_samples, num_dims])
    eps_t = contrib_stateless.stateless_random_normal(
        shape=[num_samples, num_dims], seed=[key, int(t / dt)])

    next_log_states = dynamics.gbm_log_euler_step_nd(
        log_states, drift, vol_matrix, t, dt, random_normal_op=lambda: eps_t)
    next_log_states_bis = dynamics.gbm_log_euler_step_nd(
        log_states, drift, vol_matrix, t, dt, key=key)

    with self.session() as session:
      next_log_states_eval, next_log_states_bis_eval = session.run(
          (next_log_states, next_log_states_bis))

    self.assertEqual(next_log_states_eval.shape, (num_samples, num_dims))
    self.assertEqual(next_log_states_bis_eval.shape, (num_samples, num_dims))

    self.assertAllClose(next_log_states_eval, next_log_states_bis_eval)
Пример #3
0
  def test_gbm_log_euler_step_nd_expects_static_shape(self):
    drift = np.asarray([0.1, 0.3, -0.05], dtype=np.float32)
    vol_matrix = 0.2 * np.asarray(
        [[1.5, 0.2, 0.3], [0.2, 1.1, -0.1], [0.3, -0.1, 0.8]], dtype=np.float32)
    dt = 0.01
    t = 0.0
    num_dims = drift.shape[0]

    log_states = tf.placeholder(dtype=tf.float32, shape=[None, num_dims])
    with self.assertRaises(ValueError):
      dynamics.gbm_log_euler_step_nd(log_states, drift, vol_matrix, t, dt)
    def test_gbm_log_euler_step_nd_output_is_correct(self):
        drift = np.asarray([0.1, 0.3, -0.05], dtype=np.float32)
        vol_matrix = 0.2 * np.asarray(
            [[1.5, 0.2, 0.3], [0.2, 1.1, -0.1], [0.3, -0.1, 0.8]],
            dtype=np.float32)
        dt = 0.01
        t = 0.0
        num_samples = 8
        num_dims = drift.shape[0]

        log_states = tf.zeros([num_samples, num_dims])
        eps_t = np.ndarray.astype(
            np.random.normal(size=[num_samples, num_dims]), dtype=np.float32)

        next_log_states = dynamics.gbm_log_euler_step_nd(
            log_states,
            drift,
            vol_matrix,
            t,
            dt,
            random_normal_op=lambda: eps_t)

        with self.session() as session:
            next_log_states_eval = session.run(next_log_states)

        self.assertEqual(next_log_states_eval.shape, (num_samples, num_dims))

        for i in range(num_samples):
            self.assertAllClose(
                next_log_states_eval[i],
                np.zeros([num_dims], dtype=np.float32) +
                (drift - 0.5 * np.sum(vol_matrix**2, axis=0)) * dt +
                np.matmul(vol_matrix, eps_t[i] * np.sqrt(dt)))
Пример #5
0
 def _dynamics_op(log_s, t, dt):
     return dynamics.gbm_log_euler_step_nd(log_s, r, vol, t, dt, key=1)
 def _dynamics_op(log_s, t, dt):
     return gbm_log_euler_step_nd(log_s, sim_drift, sim_vol_matrix, t, dt)