Test sampling using Monte Carlo integration
parent
8391c783bf
commit
b3b635cd94
|
@ -172,14 +172,18 @@ TEST( GaussianBayesNet, optimize3 )
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ************************************************************************* */
|
/* ************************************************************************* */
|
||||||
TEST(GaussianBayesNet, sample) {
|
namespace sampling {
|
||||||
GaussianBayesNet gbn;
|
static Matrix A1 = (Matrix(2, 2) << 1., 2., 3., 4.).finished();
|
||||||
Matrix A1 = (Matrix(2, 2) << 1., 2., 3., 4.).finished();
|
static const Vector2 mean(20, 40), b(10, 10);
|
||||||
const Vector2 mean(20, 40), b(10, 10);
|
static const double sigma = 0.01;
|
||||||
const double sigma = 0.01;
|
static const GaussianBayesNet gbn =
|
||||||
|
list_of(GaussianConditional::FromMeanAndStddev(X(0), A1, X(1), b, sigma))(
|
||||||
|
GaussianDensity::FromMeanAndStddev(X(1), mean, sigma));
|
||||||
|
} // namespace sampling
|
||||||
|
|
||||||
gbn.add(GaussianConditional::FromMeanAndStddev(X(0), A1, X(1), b, sigma));
|
/* ************************************************************************* */
|
||||||
gbn.add(GaussianDensity::FromMeanAndStddev(X(1), mean, sigma));
|
TEST(GaussianBayesNet, sample) {
|
||||||
|
using namespace sampling;
|
||||||
|
|
||||||
auto actual = gbn.sample();
|
auto actual = gbn.sample();
|
||||||
EXPECT_LONGS_EQUAL(2, actual.size());
|
EXPECT_LONGS_EQUAL(2, actual.size());
|
||||||
|
@ -195,6 +199,23 @@ TEST(GaussianBayesNet, sample) {
|
||||||
// EXPECT(assert_equal(Vector2(110.032083, 230.039811), actual[X(0)], 1e-5));
|
// EXPECT(assert_equal(Vector2(110.032083, 230.039811), actual[X(0)], 1e-5));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ************************************************************************* */
|
||||||
|
// Do Monte Carlo integration of square deviation, should be equal to 9.0.
|
||||||
|
TEST(GaussianBayesNet, MonteCarloIntegration) {
|
||||||
|
GaussianBayesNet gbn;
|
||||||
|
gbn.push_back(noisyBayesNet.at(1));
|
||||||
|
|
||||||
|
double sum = 0.0;
|
||||||
|
constexpr size_t N = 500;
|
||||||
|
// loop for N samples:
|
||||||
|
for (size_t i = 0; i < N; i++) {
|
||||||
|
const auto X_i = gbn.sample();
|
||||||
|
sum += pow(X_i[_y_].x() - 5.0, 2.0);
|
||||||
|
}
|
||||||
|
// Expected is variance = 3*3
|
||||||
|
EXPECT_DOUBLES_EQUAL(9.0, sum / N, 0.1);
|
||||||
|
}
|
||||||
|
|
||||||
/* ************************************************************************* */
|
/* ************************************************************************* */
|
||||||
TEST(GaussianBayesNet, ordering)
|
TEST(GaussianBayesNet, ordering)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue