ARCS6 AR6-REV.24062600
読み取り中…
検索中…
一致する文字列を見つけられません
RandomGenerator.hh
[詳解]
1
8//
9// Copyright (C) 2011-2020 Yokokura, Yuki
10// This program is free software;
11// you can redistribute it and/or modify it under the terms of the FreeBSD License.
12// For details, see the License.txt file.
13
14#ifndef RANDOMGENERATOR
15#define RANDOMGENERATOR
16
17#include <random>
18#include "Matrix.hh"
19
20namespace ARCS { // ARCS名前空間
23 public:
27 RandomGenerator(const double MinOrMean, const double MaxOrStdDev)
28 : RandomDevice(), MersenneTwister(RandomDevice()),
29 RandomInt(MinOrMean, MaxOrStdDev),
30 RandomDouble(MinOrMean, MaxOrStdDev),
31 GaussianRandom(MinOrMean, MaxOrStdDev)
32 {
33
34 }
35
39 : RandomDevice(), MersenneTwister(r.MersenneTwister),
40 RandomInt(r.RandomInt), RandomDouble(r.RandomDouble), GaussianRandom(r.GaussianRandom)
41 {
42
43 }
44
47
48 }
49
53 return RandomInt(MersenneTwister);
54 }
55
58 double GetDoubleRandom(void){
59 return RandomDouble(MersenneTwister);
60 }
61
64 double GetGaussianRandom(void){
65 return GaussianRandom(MersenneTwister);
66 }
67
69 void ResetSeed(void){
70 RandomDevice.entropy();
71 MersenneTwister.seed(RandomDevice());
72 }
73
76 template <size_t N, size_t M>
78 for(size_t n = 1; n <= N; ++n){
79 for(size_t m = 1; m <= M; ++m){
80 Y.SetElement(n, m, GetDoubleRandom()); // 行列の各要素に乱数値を書き込む
81 }
82 }
83 }
84
87 template <size_t N, size_t M>
89 for(size_t n = 1; n <= N; ++n){
90 for(size_t m = 1; m <= M; ++m){
91 Y.SetElement(n, m, GetGaussianRandom());// 行列の各要素に乱数値を書き込む
92 }
93 }
94 }
95
96 private:
97 RandomGenerator(const RandomGenerator&) = delete;
98 const RandomGenerator& operator=(const RandomGenerator&) = delete;
99 std::random_device RandomDevice;
100 std::mt19937 MersenneTwister;
101 std::uniform_int_distribution<> RandomInt;
102 std::uniform_real_distribution<> RandomDouble;
103 std::normal_distribution<> GaussianRandom;
104 };
105}
106
107#endif
108
行列/ベクトル計算クラス(テンプレート版)
行列/ベクトル計算クラス(テンプレート版)
Definition Matrix.hh:44
constexpr void SetElement(size_t n, size_t m, TT val)
指定した要素番号に値を設定する関数
Definition Matrix.hh:480
乱数生成器
Definition RandomGenerator.hh:22
void GetGaussianRandomMatrix(Matrix< N, M > &Y)
ガウシアン乱数行列を生成する関数
Definition RandomGenerator.hh:88
~RandomGenerator()
デストラクタ
Definition RandomGenerator.hh:46
void GetRandomMatrix(Matrix< N, M > &Y)
乱数行列を生成する関数
Definition RandomGenerator.hh:77
double GetGaussianRandom(void)
正規分布(ガウシアン)乱数を返す関数
Definition RandomGenerator.hh:64
double GetDoubleRandom(void)
一様乱数を返す関数(浮動小数点版)
Definition RandomGenerator.hh:58
RandomGenerator(RandomGenerator &&r)
ムーブコンストラクタ
Definition RandomGenerator.hh:38
RandomGenerator(const double MinOrMean, const double MaxOrStdDev)
コンストラクタ
Definition RandomGenerator.hh:27
void ResetSeed(void)
乱数シードのリセット
Definition RandomGenerator.hh:69
int GetIntegerRandom(void)
一様乱数を返す関数(整数版)
Definition RandomGenerator.hh:52