37 int nNumParallelThreads) :
38 CParticleFilterFramework(nParticles, nDimension)
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);