46 int nNumParticlesToUse)
49 const int nRealNumParticles = m_nParticles;
50 if (nNumParticlesToUse > 0 && nNumParticlesToUse < m_nParticles)
52 m_nParticles = nNumParticlesToUse;
57 PredictNewBases(dSigmaFactor);
60#pragma omp parallel for num_threads(m_nNumParallelThreads) schedule(guided, 10)
61 for (
int i = 0; i < m_nParticles; i++)
63 const int nThreadNumber = omp_get_thread_num();
65 UpdateModel(i, nThreadNumber);
68 pi[i] = CalculateProbability(i, nThreadNumber);
71 CalculateFinalProbabilities();
74 for (
int i = 0; i < m_nParticles; i++)
80 ARMARX_WARNING_S <<
"CParticleFilterFrameworkParallelized::ParticleFilter(): "
81 "Error: double values has overrun!";
86 const double factor = 1 / c_total;
87 for (
int i = 0; i < m_nParticles; i++)
94 GetMeanConfiguration(pResultMeanConfiguration);
96 m_nParticles = nRealNumParticles;
98 return CalculateProbabilityForConfiguration(pResultMeanConfiguration);
CParticleFilterFrameworkParallelized(int nParticles, int nDimension, int nNumParallelThreads=1)
double ParticleFilter(double *pResultMeanConfiguration, double dSigmaFactor, int nNumParticlesToUse=-1)