Python example: mrpt_bayes_example.py

Configures particle filter options and algorithms with mrpt.bayes.

Modules: mrpt.bayes

 1#!/usr/bin/env python3
 2"""
 3Configures particle filter options and algorithms with mrpt.bayes.
 4
 5Demonstrates:
 6  - TParticleFilterOptions: configure algorithm, resampling, ESS threshold
 7  - TParticleFilterAlgorithm / TParticleResamplingAlgorithm enums
 8  - CParticleFilter: inspect and modify the filter object
 9
10NOTE: CParticleFilter.executeOn() requires a C++ CParticleFilterCapable PDF
11object which cannot be constructed from pure Python.  For a full RBPF SLAM
12example see rbpf_slam.py, which drives CMetricMapBuilderRBPF from C++.
13This example focuses on what CAN be done directly: configuring the filter
14parameters before passing them to a C++ algorithm.
15"""
16
17from mrpt.bayes import (
18    CParticleFilter,
19    TParticleFilterOptions,
20    TParticleFilterAlgorithm,
21    TParticleResamplingAlgorithm,
22    TParticleFilterStats,
23)
24
25# ---------------------------------------------------------------------------
26# Enumerations
27# ---------------------------------------------------------------------------
28print("TParticleFilterAlgorithm values:")
29for name in ["pfStandardProposal", "pfAuxiliaryPFStandard",
30             "pfOptimalProposal", "pfAuxiliaryPFOptimal"]:
31    val = getattr(TParticleFilterAlgorithm, name)
32    print(f"  {name} = {int(val)}")
33
34print("\nTParticleResamplingAlgorithm values:")
35for name in ["prMultinomial", "prResidual", "prStratified", "prSystematic"]:
36    val = getattr(TParticleResamplingAlgorithm, name)
37    print(f"  {name} = {int(val)}")
38
39# ---------------------------------------------------------------------------
40# CParticleFilter — configuration
41# ---------------------------------------------------------------------------
42pf = CParticleFilter()
43print(f"\nDefault CParticleFilter: {pf}")
44
45# Tune options
46pf.options.BETA           = 0.75         # resample when ESS drops below 75%
47pf.options.sampleSize     = 200          # number of particles
48pf.options.PF_algorithm   = TParticleFilterAlgorithm.pfStandardProposal
49pf.options.resamplingMethod = TParticleResamplingAlgorithm.prStratified
50
51print(f"After tuning: BETA={pf.options.BETA}, sampleSize={pf.options.sampleSize}")
52print(f"  algorithm = {pf.options.PF_algorithm}")
53print(f"  resampling = {pf.options.resamplingMethod}")
54print(f"  {pf.options}")
55
56# ---------------------------------------------------------------------------
57# TParticleFilterStats — result statistics container
58# ---------------------------------------------------------------------------
59stats = TParticleFilterStats()
60print(f"\nTParticleFilterStats (empty): ESS={stats.ESS_beforeResample:.4f}")
61# In a real run, stats would be filled by executeOn()
62stats.ESS_beforeResample = 0.42
63print(f"After setting: {stats}")