cMHN 1.2
C++ library for learning MHNs with pRC
Loading...
Searching...
No Matches
generate_theta.hpp
Go to the documentation of this file.
1// SPDX-License-Identifier: BSD-2-Clause
2
3#ifndef cMHN_UTILITY_GENERATE_THETA_H
4#define cMHN_UTILITY_GENERATE_THETA_H
5
6#include <prc.hpp>
7
8namespace cMHN
9{
37 template<pRC::Size D, class T = pRC::Float<>, class F>
38 static inline auto generateTheta(pRC::RandomEngine<F> &rng,
39 pRC::Float<> const &fullness = 0.5, T const &diagonalMean = -2,
40 T const &diagonalStd = 2, T const &offDiagonalMean = 0,
41 T const &offDiagonalB = 0.75)
42 {
43 // diagonal
44 pRC::GaussianDistribution<T> diagonalDist(diagonalMean, diagonalStd);
45 auto diagonalTheta =
46 pRC::random<pRC::Tensor<T, D, D>>(rng, diagonalDist);
47
48 // off diagonal
49 pRC::LaplaceDistribution<T> offDiagonalDist(offDiagonalMean,
50 offDiagonalB);
51 auto offDiagonalTheta =
52 pRC::random<pRC::Tensor<T, D, D>>(rng, offDiagonalDist);
53
54 // combine both
55 auto theta =
56 eval(diagonal(diagonalTheta) + offDiagonal(offDiagonalTheta));
57
58 // add sparsity
60 auto allowedPlaces = offDiagonal(
61 pRC::random<pRC::Tensor<pRC::Float<>, D, D>>(rng, sparsityDist));
62 for(pRC::Index i = 0; i < D; ++i)
63 {
64 for(pRC::Index j = 0; j < D; ++j)
65 {
66 if(allowedPlaces(i, j) > fullness)
67 {
68 theta(i, j) = pRC::zero();
69 }
70 }
71 }
72
73 return theta;
74 }
75
102 template<pRC::Size D, class T = pRC::Float<>>
103 static inline auto generateTheta(pRC::Float<> const &fullness = 0.5,
104 T const &diagonalMean = -2, T const &diagonalStd = 2,
105 T const &offDiagonalMean = 0, T const &offDiagonalB = 0.75)
106 {
107 // rng setup
108 pRC::SeedSequence seq(8, 16);
110
111 return generateTheta<D>(rng, fullness, diagonalMean, diagonalStd,
112 offDiagonalMean, offDiagonalB);
113 }
114}
115
116#endif // cMHN_UTILITY_GENERATE_THETA_H
pRC::Size const D
Definition CalculatePThetaTests.cpp:9
Definition value.hpp:12
Definition gaussian.hpp:14
Definition laplace.hpp:19
Definition engine.hpp:13
Definition seq.hpp:13
Definition tensor.hpp:25
Definition threefry.hpp:22
Definition uniform.hpp:18
int i
Definition gmock-matchers-comparisons_test.cc:603
Definition calculate_pTheta.hpp:20
static auto generateTheta(pRC::RandomEngine< F > &rng, pRC::Float<> const &fullness=0.5, T const &diagonalMean=-2, T const &diagonalStd=2, T const &offDiagonalMean=0, T const &offDiagonalB=0.75)
Generates a random theta matrix according to given distributions, and with given fullness.
Definition generate_theta.hpp:38
Size Index
Definition basics.hpp:32
static constexpr auto zero()
Definition zero.hpp:12
static constexpr auto random(URNG &rng, D &distribution)
Definition random.hpp:13