コード例 #1
0
    def groundtruth_paths_gen(self, random_state=None):
        groundtruth_paths = OrderedSet()
        time = self.initial_state.timestamp or datetime.datetime.now()
        random_state = random_state if random_state is not None else self.random_state

        for _ in range(self.number_steps):
            # Random drop tracks
            groundtruth_paths.difference_update(
                gttrack for gttrack in groundtruth_paths.copy()
                if random_state.rand() <= self.death_probability)

            # Move tracks forward
            for gttrack in groundtruth_paths:
                self.index = gttrack[-1].metadata.get("index")
                trans_state_vector = self.transition_model.function(
                    gttrack[-1], noise=True, time_interval=self.timestep)
                gttrack.append(
                    GroundTruthState(trans_state_vector,
                                     timestamp=time,
                                     metadata={"index": self.index}))

            # Random create
            for _ in range(random_state.poisson(self.birth_rate)):
                self.index = 0
                gttrack = GroundTruthPath()
                gttrack.append(
                    GroundTruthState(
                        self.initial_state.state_vector +
                        self.initial_state.covar @ random_state.randn(
                            self.initial_state.ndim, 1),
                        timestamp=time,
                        metadata={"index": self.index}))
                groundtruth_paths.add(gttrack)

            yield time, groundtruth_paths
            time += self.timestep