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};
129 this->set_factory_key(
"binding");
130 this->set_args_key(
"");
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};
181 bool reuse_seed =
true;
186 unsigned long seed = 0;
190 {
"enable",
Schema(&enabled,
"enable or disable component")},
191 {
"reuse_seed",
Schema(&reuse_seed,
"whether to get a new seed on reset")},
192 {
"seed",
Schema(&seed,
"set random engine seed (effective on reset)")},
196 void to_json(Json& j)
const override {
199 {
"reuse_seed", reuse_seed},
Schema schema_impl() override
Definition: noise_data.hpp:81
Definition: confable.hpp:46
Definition: noise_data.hpp:136
Definition: noise_data.hpp:60
Definition: noise_data.hpp:41
Definition: coordinator.hpp:36
Json to_json() const
Definition: confable.cpp:74
Definition: schema.hpp:178
Definition: entity.hpp:51
std::string name() const
Definition: entity.hpp:68
virtual void from_conf(const Conf &c)
Definition: confable.cpp:66
void from_conf(const Conf &c) override
Definition: noise_data.hpp:75
Definition: noise_data.hpp:125
Definition: noise_data.hpp:102
Definition: factory.hpp:375
Definition: noise_data.hpp:170