This commit is contained in:
k-a-z-u
2018-01-17 16:30:04 +01:00
89 changed files with 6232 additions and 70 deletions

View File

@@ -69,7 +69,33 @@ TEST(Distribution, VonMises) {
}
TEST(Distribution, normalCDF1) {
Distribution::NormalCDF<double> nd(0,1);
ASSERT_NEAR(0.5, nd.getProbability(0), 0.00001);
ASSERT_NEAR(0.5, Distribution::NormalCDF<double>::getProbability(0, 1, 0), 0.00001);
ASSERT_NEAR(1.0, nd.getProbability(5), 0.00001);
ASSERT_NEAR(1.0, Distribution::NormalCDF<double>::getProbability(0, 1, 5), 0.00001);
ASSERT_NEAR(0.0, nd.getProbability(-5), 0.00001);
ASSERT_NEAR(0.0, Distribution::NormalCDF<double>::getProbability(0, 1, -5), 0.00001);
}
TEST(Distribution, normalCDF2) {
Distribution::NormalCDF<double> nd(3,1);
ASSERT_NEAR(0.5, nd.getProbability(3), 0.00001);
ASSERT_NEAR(0.5, Distribution::NormalCDF<double>::getProbability(3, 1, 3), 0.00001);
ASSERT_NEAR(1.0, nd.getProbability(3+5), 0.00001);
ASSERT_NEAR(1.0, Distribution::NormalCDF<double>::getProbability(3, 1, 3+5), 0.00001);
ASSERT_NEAR(0.0, nd.getProbability(3-5), 0.00001);
ASSERT_NEAR(0.0, Distribution::NormalCDF<double>::getProbability(3, 1, 3-5), 0.00001);
}
//#include <fstream>

View File

@@ -79,7 +79,7 @@ TEST(Barometer, LIVE_tendence) {
}
sleep(1);
sleep(1);
}

View File

@@ -0,0 +1,44 @@
/*
* TestParticles.cpp
*
* Created on: Sep 18, 2013
* Author: Frank Ebner
*/
#ifdef FIXME
#ifdef WITH_TESTS
#include "../../../Tests.h"
#include "../particles/ParticleFilter.h"
#include "../particles/ParticleModel.h"
#include "../particles/ParticleSensor.h"
#include "../wifi/math/WiFiMath.h"
#include "../lib/gnuplot/Gnuplot.h"
#include <iostream>
#include "../floorplan/FloorPlan.h"
#include "../floorplan/FloorPlanFactory.h"
#include "../lib/misc/File.h"
#include "../particles/ParticleMath.h"
#include "../particles/resampling/ParticleResamplingSimple.h"
#include "../particles/resampling/ParticleResamplingNone.h"
#include "../wifi/factory/WiFiHelper.h"
#include <chrono>
#include <thread>
typedef Point TestState;
TEST(Particles, init) {
//create filter
}
#endif
#endif

View File

@@ -0,0 +1,146 @@
#ifdef WITH_TESTS
#include "../../../../smc/merging/mixing/MixingSamplerDivergency.h"
#include "../../../../smc/filtering/ParticleFilterMixing.h"
#include "../../../Tests.h"
namespace K {
struct MyState {
double x;
double y;
MyState() : x(0), y(0) {;}
MyState(double x, double y) : x(x), y(y) {;}
MyState& operator += (const MyState& other) {
x += other.x;
y += other.y;
return *this;
}
MyState& operator /= (double d) {
x /= d;
y /= d;
return *this;
}
MyState operator * (double d) const {
return MyState(x*d, y*d);
}
MyState& operator = (const MyState& other) {
this->x = other.x;
this->y = other.y;
return *this;
}
double distance(const MyState& o) const {
return std::sqrt( (x-o.x)*(x-o.x) + (y-o.y)*(y-o.y) ) / 4.9;
}
bool belongsToRegion(const MyState& o) const {
return distance(o) <= 1.0;
}
};
struct MyControl {
};
struct MyObservation {
double x;
double y;
MyObservation() : x(0), y(0) {;}
void set(double x, double y) {this->x = x; this->y = y;}
};
class MyInitializer1 : public SMC::ParticleFilterInitializer<MyState> {
void initialize(std::vector<SMC::Particle<MyState>>& particles) override {
for (SMC::Particle<MyState>& p : particles) {
p.state.x = 0;
p.state.y = 0;
p.weight = 1.0 / particles.size();
}
}
};
class MyInitializer2 : public SMC::ParticleFilterInitializer<MyState> {
void initialize(std::vector<SMC::Particle<MyState>>& particles) override {
for (SMC::Particle<MyState>& p : particles) {
p.state.x = 1;
p.state.y = 1;
p.weight = 1.0 / particles.size();
}
}
};
TEST(Mixing, standard) {
//init particle filters
int numParticles = 1000;
Eigen::MatrixXd transition(2,2);
transition << 0.8, 0.2, 0.2, 0.8;
SMC::ParticleFilterMixing<MyState, MyControl, MyObservation> mode1(numParticles, std::unique_ptr<MyInitializer1>(new MyInitializer1()), 0.5);
SMC::ParticleFilterMixing<MyState, MyControl, MyObservation> mode2(numParticles, std::unique_ptr<MyInitializer2>(new MyInitializer2()), 0.5);
std::vector<SMC::ParticleFilterMixing<MyState, MyControl, MyObservation>> modes;
modes.push_back(mode1);
modes.push_back(mode2);
SMC::MixingSamplerDivergency<MyState, MyControl, MyObservation> mixer;
//run the mixing and check results
for(int t = 0; t < 100; ++t){
mixer.mixAndSample(modes, transition);
int cnt_zero = 0;
int cnt_ones = 0;
for(int i = 0; i < modes[0].getParticles().size(); ++i){
if(modes[0].getParticles()[i].state.x == 0){
cnt_zero++;
}else{
cnt_ones++;
}
}
std::cout << "MODE1 Zeros: " << (double) cnt_zero / numParticles<< std::endl;
std::cout << "MODE1 Ones: " << (double) cnt_ones/ numParticles << std::endl;
cnt_zero = 0;
cnt_ones = 0;
for(int i = 0; i < modes[0].getParticles().size(); ++i){
if(modes[1].getParticles()[i].state.x == 0){
cnt_zero++;
}else{
cnt_ones++;
}
}
std::cout << "MODE2 Zeros: " << (double) cnt_zero / numParticles<< std::endl;
std::cout << "MODE2 Ones: " << (double) cnt_ones/ numParticles << std::endl;
}
}
TEST(Mixing, differentParticleSize) {
}
TEST(Mixing, dynamicTransitionMatrix) {
}
TEST(Mixing, ThreeFilters) {
}
}
#endif