38 using Generator = std::default_random_engine;
46 virtual T get(Generator&)
const = 0;
48 void to_json(Json& j)
const override {
54 virtual void reset() {}
65 T get(Generator& g)
const override {
return distribution(g); }
67 void reset()
override { distribution = std::normal_distribution<T>{mean, std_deviation}; }
69 void to_json(Json& j)
const override {
72 j[
"std_deviation"] = std_deviation;
84 {
"mean", make_schema(&mean,
"mean value of normal distribution")},
85 {
"std_deviation", make_schema(&std_deviation,
"standard deviation of normal distribution")},
93 double std_deviation = 0.1;
96 mutable std::normal_distribution<double> distribution{mean, std_deviation};
99 using DistributionPtr = std::shared_ptr<Distribution<double>>;
101 template <
typename T>
104 Random(
const unsigned long& seed, DistributionPtr dist) : engine_(seed), d(dist) {}
106 virtual ~
Random() noexcept =
default;
108 T get()
const {
return d->get(engine_); }
110 void reset(
const unsigned long& seed) { engine_ = std::default_random_engine(seed); }
112 void reset(DistributionPtr dist) {
121 mutable std::default_random_engine engine_;
122 DistributionPtr d{
nullptr};
131 this->add_default_factory<NormalDistribution<double>>(
"normal");
142 double get()
const {
return rnd_.get(); }
144 virtual void reset(
unsigned long seed) {
145 rnd_.reset(distr_default);
154 {
"distribution",
DistributionFactory(&distr_default,
"set distribution binding and arguments")},
159 void to_json(Json& j)
const override {
161 {
"distribution", distr_default},
166 DistributionPtr distr_default{
nullptr};
192 {
"seed",
Schema(&
seed,
"set random engine seed (effective on reset)")},
196 void to_json(Json& j)
const override {
Definition: entity.hpp:50
const std::string & name() const
Definition: entity.hpp:67
Definition: noise_data.hpp:125
Definition: noise_data.hpp:41
Definition: noise_data.hpp:136
Definition: noise_data.hpp:60
Schema schema_impl() override
Definition: noise_data.hpp:81
void from_conf(const Conf &c) override
Definition: noise_data.hpp:75
Definition: noise_data.hpp:102
Definition: confable.hpp:43
virtual void from_conf(const Conf &c)
Definition: confable.cpp:70
Json to_json() const
Definition: confable.cpp:78
Definition: schema.hpp:175
void set_factory_key(const std::string &keyword)
Definition: factory.hpp:177
void set_args_key(const std::string &keyword)
Definition: factory.hpp:192
Definition: factory.hpp:425
Definition: noise_data.hpp:170
unsigned long seed
Definition: noise_data.hpp:186
bool enabled
Definition: noise_data.hpp:174
bool reuse_seed
Definition: noise_data.hpp:181