示例#1
0
    def update(self, measurements: np.array):
        weights = self._calculate_weights(measurements)
        self._updated = NaiveSampleDistribution(self._predicted.samples,
                                                weights)

        if self.neff(weights) < self._resampling_threshold:
            self._resample()
示例#2
0
    def test_sample(self):
        mean = [10.0, 15.0]
        variances = [0.1, 0.5]

        multi_distr = GaussDistribution.create_independent(mean, variances)

        n = 100
        samples = np.zeros((n, 2))
        weights = np.zeros((n, ))
        for i in range(0, n):
            samples[i] = multi_distr.sample()
            weights[i] = 1.0

        sample_distr = NaiveSampleDistribution(samples, weights)

        for i in range(0, n):
            self.assertTrue(sample_distr.sample() in samples)
示例#3
0
    def __init__(self, initial: BaseDistribution, sample_size: int,
                 resampling_threshold: float):

        samples = np.zeros((sample_size, len(initial.mean)))
        for i in range(0, sample_size):
            samples[i] = initial.sample()

        weights = np.full((sample_size, 1), 1.0)
        sample_distr = NaiveSampleDistribution(samples, weights)

        self._resampling_threshold = resampling_threshold

        self._predicted = sample_distr
        self._updated = sample_distr
示例#4
0
    def _resample(self):
        samples = self._updated.samples
        weights = self._updated.weights

        n = samples.shape[0]
        cumulative_sum = np.cumsum(weights)
        cumulative_sum[-1] = 1.0
        indexes = np.searchsorted(cumulative_sum, np.random.random(n))

        new_samples = np.zeros((len(indexes), samples.shape[1]))
        for i in range(0, len(indexes)):
            new_samples[i] = samples[indexes[i]]

        new_weights = np.full(weights.shape, 1 / n)

        self._updated = NaiveSampleDistribution(new_samples, new_weights)
示例#5
0
    def test_mean(self):
        mean = [10.0, 15.0]
        variances = [0.1, 0.5]

        multi_distr = GaussDistribution.create_independent(mean, variances)

        n = 100
        samples = np.zeros((n, 2))
        weights = np.zeros((n, ))
        for i in range(0, n):
            samples[i] = multi_distr.sample()
            weights[i] = 1.0

        sample_distr = NaiveSampleDistribution(samples, weights)
        sample_mean = sample_distr.mean

        for i in range(0, len(mean)):
            self.assertTrue(
                abs(mean[0] - sample_mean[0]) < math.sqrt(variances[0]))
示例#6
0
    def predict(self, control: np.array):
        samples = self._sample_state(control)

        weights = np.full((samples.shape[0], 1), 1.0)
        self._predicted = NaiveSampleDistribution(samples, weights)