Ejemplo n.º 1
0
    def simulate_hawkes(self, model_name):
        self.model_name = model_name

        def y_func_pos(t_values):
            y_values = 0.02 * np.exp(-t_values)
            return y_values

        def y_func_neg(t_values):
            y_values = -0.1 * np.exp(-t_values)
            return y_values

        if model_name == 'hawkes_neg':
            y_func = y_func_neg
        elif model_name == 'hawkes_pos':
            y_func = y_func_pos

        t_values = np.linspace(0, 101, 100)
        y_values = y_func(t_values)
        tf = TimeFunction([t_values, y_values],
                          inter_mode=TimeFunction.InterLinear,
                          dt=0.1)

        tf_kernel = HawkesKernelTimeFunc(tf)

        N_enodes = self.G_e2n.number_of_nodes()  # regarded as 'N_enodes' types

        base_int = 0.2
        baselines = [base_int for i in range(N_enodes)]
        kernels = [[] for i in range(N_enodes)]
        for i in range(N_enodes):
            for j in range(N_enodes):
                if i == j:
                    # kernels[i].append(HawkesKernel0())
                    kernels[i].append(HawkesKernelExp(.1, 4))  # self influence
                else:
                    if self.G_e2n.has_edge(self.idx_elabel_map[i],
                                           self.idx_elabel_map[j]):
                        kernels[i].append(tf_kernel)
                    else:
                        kernels[i].append(HawkesKernel0())

        hawkes = SimuHawkes(kernels=kernels,
                            baseline=baselines,
                            verbose=False,
                            seed=self.seed)
        hawkes.threshold_negative_intensity(allow=True)

        run_time = 100
        hawkes.end_time = run_time
        hawkes.simulate()
        timestamps = hawkes.timestamps

        self.save(timestamps, self.model_name)
Ejemplo n.º 2
0
    def test_hawkes_negative_intensity(self):
        """...Test simulation with negative kernel
        """
        run_time = 40

        hawkes = SimuHawkes(n_nodes=1, end_time=run_time, verbose=False,
                            seed=1398)
        kernel = HawkesKernelExp(-1.3, .8)
        hawkes.set_kernel(0, 0, kernel)
        hawkes.set_baseline(0, 0.3)
        hawkes.threshold_negative_intensity()

        dt = 0.1
        hawkes.track_intensity(dt)
        hawkes.simulate()

        self.assertAlmostEqual(hawkes.tracked_intensity[0].min(), 0)
        self.assertAlmostEqual(hawkes.tracked_intensity[0].max(),
                               hawkes.baseline[0])
        self.assertGreater(hawkes.n_total_jumps, 1)