public void CompareSequencesOfMersennes() { Random rnd = new Random(); for (int i = 0; i < 10; i++) { int seed = rnd.Next(); var m1 = new MT19937(); m1.init_genrand((ulong)seed); var m2 = new RandomMT((ulong)seed); var m3 = new SharpDevs.Randomization.MersenneTwister(seed); var m4 = new Random(seed); for (int j = 0; j < 10; j++) { var r1 = m1.genrand_int32(); var r2 = m2.RandomInt(); var r3 = m3.GetNextULong(); var r4 = m4.Next(); Console.WriteLine("{0}\t{1}\t{2}\t{3}", r1, r2, r3, r4); //Assert.AreEqual(r1, r2); //Assert.AreEqual(r2, r3); } Console.WriteLine(); } }
public void CompareDistributionOfMersennes() { Random rnd = new Random(); int baseSeed = rnd.Next(); var m1 = new MT19937(); m1.init_genrand((ulong)baseSeed); var m2 = new RandomMT((ulong)baseSeed); var m3 = new SharpDevs.Randomization.MersenneTwister(baseSeed); var m4 = new Random(baseSeed); var maxRange = 1000; var iterations = 10000000; var dist1 = CalculateDistribution(() => m1.RandomRange(0, maxRange - 1), maxRange, iterations); var dist2 = CalculateDistribution(() => m2.RandomRange(0, maxRange - 1), maxRange, iterations); var dist3 = CalculateDistribution(() => m3.GetNext(0, maxRange), maxRange, iterations); var dist4 = CalculateDistribution(() => m4.Next(0, maxRange), maxRange, iterations); var distribution1 = AnalyzeDistribution(dist1, iterations); var distribution2 = AnalyzeDistribution(dist2, iterations); var distribution3 = AnalyzeDistribution(dist3, iterations); var distribution4 = AnalyzeDistribution(dist4, iterations); Console.WriteLine("{0}\t{1}\t{2}\t{3}", distribution1, distribution2, distribution3, distribution4); var expectedFill = (decimal)iterations / maxRange; Console.WriteLine("Przy oczekiwanym napełnieniu: " + expectedFill); Console.WriteLine("Co daje procentowo:"); Console.WriteLine("{0}\t{1}\t{2}\t{3}", distribution1 / expectedFill * 100, distribution2 / expectedFill * 100, distribution3 / expectedFill * 100, distribution4 / expectedFill * 100); }
//-------------------------------------------------------------------------------------------------- //初期値をランダムに設定 (0,1] public static double[,] initMatrix(int N, int M) { RandomMT rand = new RandomMT(); double[,] A = new double[N, M]; for (int i = 0; i < N; i++) for (int j = 0; j < M; j++) A[i, j] = 10 * rand.Double32OC(); return A; }
/// <summary> /// ステージ初期化の処理を書く。 /// </summary> private void _initialize() { _rand = new RandomMT(); _player = new GameObject(ClientSize.Width / 2, ClientSize.Height * 3 / 4); _enemies = new List <Enemy2>(); _bullets = new List <Bullet>(); _createBullet = false; _enter = false; for (var i = 0; i < 20; i++) { var newEnemy = new Enemy2(_rand.Int(ClientSize.Width - 20), _rand.Int(ClientSize.Height / 2 - 20)); _enemies.Add(newEnemy); } }
static void Main(string[] args) { RandomMT mt = new RandomMT(0x7449BBFF801FED0B); for (int i = 0; i < 781; ++i) { if (i % 4 == 0) { Console.WriteLine(); Trace.WriteLine(""); } Console.Write("0x{0:X}UL,", mt.RandomInt() | mt.RandomInt() << 32); Trace.Write(string.Format("0x{0:X}UL,", mt.RandomInt() | mt.RandomInt() << 32)); } }
private void MAKEDATA(ref double[,] _designmatrix, ref double[] _t, ref double[] _X) { var r = new RandomBoxMuller(); RandomMT rand = new RandomMT(1); for (int i = 0; i < CONST.N; i++) { _X[i] = rand.Double() * Math.PI * 2; _t[i] = System.Math.Sin(_X[i]) + r.next(); } for (int j = 0; j < CONST.N; j++) { for (int i = 0; i < CONST.M; i++) { _designmatrix[j, i] = System.Math.Pow(_X[j], i); if (i == 0) { _designmatrix[j, i] = 1; } } } }
public void CompareDistributionOfMersennes() { Random rnd = new Random(); int baseSeed = rnd.Next(); var m1 = new MT19937(); m1.init_genrand((ulong)baseSeed); var m2 = new RandomMT((ulong)baseSeed); var m3 = new SharpDevs.Randomization.MersenneTwister(baseSeed); var m4 = new Random(baseSeed); var maxRange = 1000; var iterations = 10000000; var dist1 = this.CalculateDistribution(() => m1.RandomRange(0, maxRange - 1), maxRange, iterations); var dist2 = this.CalculateDistribution(() => m2.RandomRange(0, maxRange - 1), maxRange, iterations); var dist3 = this.CalculateDistribution(() => m3.GetNext(0, maxRange), maxRange, iterations); var dist4 = this.CalculateDistribution(() => m4.Next(0, maxRange), maxRange, iterations); var distribution1 = this.AnalyzeDistribution(dist1, iterations); var distribution2 = this.AnalyzeDistribution(dist2, iterations); var distribution3 = this.AnalyzeDistribution(dist3, iterations); var distribution4 = this.AnalyzeDistribution(dist4, iterations); Console.WriteLine("{0}\t{1}\t{2}\t{3}", distribution1, distribution2, distribution3, distribution4); var expectedFill = (decimal)iterations / maxRange; Console.WriteLine("Przy oczekiwanym napełnieniu: " + expectedFill); Console.WriteLine("Co daje procentowo:"); Console.WriteLine("{0}\t{1}\t{2}\t{3}", distribution1 / expectedFill * 100, distribution2 / expectedFill * 100, distribution3 / expectedFill * 100, distribution4 / expectedFill * 100); }
//---------------------------------------------------------------------------------- static void Update(out double[] alpha, out double[] beta, double[] gamma, out double[][] u, out double[][,] V) { RandomMT rnd = new RandomMT(); double[,] lo = new double[S, M]; double[,] r = new double[S, M]; double[] ita = new double[M]; alpha = new double[M]; beta = new double[M]; gamma = new double[M]; u = new double[M][]; V = new double[M][,]; for (int m = 0; m < M; m++) { alpha[m] = alpha0; beta[m] = beta0; gamma[m] = gamma0; //u[m] = (double[])u0.Clone(); V[m] = (double[,])V0.Clone(); } u = New.Array(M, m => matrixTojag(X)[rnd.Int(S)].ToArray()); double[] old_alpha = new double[M], old_beta = new double[M], old_gamma = new double[M]; var old_V = (double[][,])V.Clone(); double error; do { //Update lo for (int s = 0; s < S; s++) for (int m = 0; m < M; m++) { double a = diGamma(alpha[m]); double b = Enumerable.Range(1, D).Sum(dd => diGamma((gamma[m] + 1 - dd) / 2.0)); double c = Math.Log(Mt.Det(V[m])); double d = -D / beta[m]; double e = -gamma[m] * Mt.QuadraticForm(V[m], Mt.Sub(getRow(X, s), u[m])); lo[s, m] = Math.Exp(a + 0.5 * (b + c + d + e)); } //Update r for (int i = 0; i < S; i++) { double lo_sum = sumOfmatrix_row(lo, i); for (int j = 0; j < M; j++) { if (lo_sum != 0) r[i, j] = lo[i, j] / lo_sum; } } //Update ita for (int j = 0; j < M; j++) ita[j] = sumOfmatrix_column(r, j); //Update alpha,beta,gamma old_alpha = (double[])alpha.Clone(); old_beta = (double[])beta.Clone(); old_gamma = (double[])gamma.Clone(); for (int j = 0; j < M; j++) { alpha[j] = alpha0 + ita[j]; beta[j] = beta0 + ita[j]; gamma[j] = gamma0 + ita[j]; } //Update u for (int j = 0; j < M; j++) { double[,] rX = Mt.Mul(X.T(), r); for (int i = 0; i < D; i++) u[j][i] = (beta0 * u0[i] + rX[i, j]) / beta[j]; } //Update V V.CopyTo(old_V); double[,] A = new double[D, D]; double[,] B = new double[D, D]; double[,] rXsubu_adamar = new double[S, D]; double[,] Xsubu = new double[S, D]; for (int j = 0; j < M; j++) { for (int i = 0; i < D; i++) for (int ii = 0; ii < D; ii++) A[i, ii] = beta0 * (u[j][i] - u0[i]) * (u[j][ii] - u0[ii]); for (int s = 0; s < S; s++) for (int d = 0; d < D; d++) { rXsubu_adamar[s, d] = (X[s, d] - u[j][d]) * r[s, j]; Xsubu[s, d] = X[s, d] - u[j][d]; } B = Mt.Mul(Xsubu.T(), rXsubu_adamar); V[j] = Mt.Add(Mt.Add(V0_inv, A), B); V[j] = V[j].Inverse(); } error = errorCalc(alpha, old_alpha) + errorCalc(beta, old_beta) + errorCalc(gamma, old_gamma) + errorCalc(V, old_V); } while (error > 1e-10); }
//---------------------------------------------------------------------------------- static void predicted_Distribution_output(double[][] u, double[][,] V) { int Num = 300; //等高線描画用プロット数 int Ratio = 10000000; RandomMT rand = new RandomMT(); double[][] x_toukou = new double[Num][]; //等高線描画用プロット点 for (int m = 0; m < M; m++) { double[,] U; //直交固有ベクトル行列 double[] lambda; //固有値 Tuple<double[,], double[]> tu; tu = Mt.EigenValueDecompositionM(V[m]); lambda = tu.Item2; U = tu.Item1; bool sign_flag = true; for (int n = 0; n < Num; n++) { sign_flag = !sign_flag; double[] y = new double[2]; y[1] = 2.0 * Math.Sqrt(lambda[0] * Ratio) * rand.Double() - Math.Sqrt(lambda[0] * Ratio); //楕円の定義域内に if (sign_flag) y[0] = Math.Sqrt(lambda[1] * Ratio - y[1] * y[1] * lambda[1] / lambda[0]); //次元を逆にしたら上手く等高線が書けたが...たぶん直交行列Uの構成の仕方が原因 else y[0] = -Math.Sqrt(lambda[1] * Ratio - y[1] * y[1] * lambda[1] / lambda[0]); x_toukou[n] = Mt.Add(Mt.Mul(U.Inverse(), y), u[m]); } CsvFileIO.CsvFileIO.WriteData("x_toukou(M=" + m + ").csv", jagTomatrix(x_toukou)); } CsvFileIO.CsvFileIO.WriteData("mu_matrix.csv", jagTomatrix(u)); }
//---------------------------------------------------------------------------- static void init(int shift_flag, int fixed_flag, int baseNumForNoise) { //string input_filename = @"C:\Users\優\Desktop\音素材\GaPNMF\君の知らない_cq.csv"; string input_filename = @"C:\Users\優\Desktop\音素材\cq(mix4).csv"; string fixed_T_filename = @"C:\Users\優\Desktop\音素材\GaPNMF\Base_mix4.csv"; //string fixed_T_filename = @"C:\Users\優\Desktop\音素材\GaPNMF\piano_c4_cq_w.csv"; X = CsvFileIO.CsvFileIO.ReadData(input_filename); I = X.GetLength(0); J = X.GetLength(1); if (fixed_flag == 0) K = 4; tau = 7; fai = 48; //36がbetter XdiviXhat = new double[I, J]; //T,Vの初期化 switch (shift_flag) { // only f shift case 0: tau = 1; if (fixed_flag == 0) T.Add(initMatrix(I, K)); else { double[,] baseMat=CsvFileIO.CsvFileIO.ReadData(fixed_T_filename); RandomMT rand = new RandomMT(); T.Add(New.Array(I, baseMat.GetLength(1) + baseNumForNoise, (i, j) => { if (j < baseMat.GetLength(1)) return baseMat[i, j]; else { return 10 * rand.Double32OC(); } })); K = T[0].GetLength(1); } break; // f and time shift case 1: for (int tt = 0; tt < tau; tt++) T.Add(initMatrix(I, K)); break; } for (int ff = 0; ff < fai; ff++) V.Add(initMatrix(K, J)); //onesの初期化 ones = new double[I, J]; for (int i = 0; i < I; i++) for (int j = 0; j < J; j++) ones[i, j] = 1; }
public static void SeedRNG(string seedString) { seed = seedString.GetHashCode (); RNG = new RandomMT((ulong)seed); }
//-------------------------------------------------------------------------------- //ガンマ分布に従う乱数生成 static double gamma_rnd(RandomMT rand, double shape, double scale) { double output; double input = rand.Double(); output = scale * Mt.InverseIncompleteGamma(input, shape); return output; }
static void Main(string[] args) { var v = Environment.TickCount; var rand = new RandomMT(); for (int i = 0; i < 100; i++) { random_(rand); } //string arenaRankingKey_ = "hwal2.ranking.arena"; //long start = 0; //long stop = start + 101 - 1; //int accountNo = 1; //Order order = Order.Descending; //var redis = ConnectionMultiplexer.Connect("10.11.35.12:6379").GetDatabase(); //var list = redis.SortedSetRangeByRankWithScores(arenaRankingKey_, start, stop, order); //var rank = redis.SortedSetRank(arenaRankingKey_, accountNo, order); //var total = redis.SortedSetLength(arenaRankingKey_); //var val1 = (Convert.ToDouble(rank + 1) / total) * 100; //var val2 = Convert.ToInt32(Math.Round(val1)); //var rating = Convert.ToInt32(((Convert.ToDouble(rank + 1) / total) * 100) + 0.5); //var val3 = DateTime.Now.DayOfYear; //GregorianCalendar cal = new GregorianCalendar(GregorianCalendarTypes.Localized); //var val4 = cal.GetWeekOfYear(DateTime.Now, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday); //var val5 = getWeekNum(); //var total = redis.SortedSetLength("hwal2:ranking:league:global:w:20151219"); //var list2 = redis.SortedSetRangeByRankWithScores("hwal2:ranking:league:global:w:20151219", 0, 100, Order.Descending); //var rank = start; //foreach (var item in list2) //{ // ++rank; // var key = Convert.ToInt32(item.Element); // var val = Convert.ToDouble(item.Score); // var rate = Math.Round((Convert.ToDouble(rank) / 10000) * 100, 5); //} // // // return; //int max = 50000000; //int[] nums1 = Enumerable.Range(1, max).ToArray<int>(); //int[] nums2 = Enumerable.Range(1, max).ToArray<int>(); //ParallelFor(nums1); //RangeParallelForEach(nums2); //Presence presence = new Presence(); //t_Account account = new t_Account(); //account.Acctidx = 1; //LobbyUser user = new LobbyUser(); //user.EnterPresence_(); //PresenceConnector presence = new PresenceConnector("10.11.35.21", 6379); //presence.Connect(); //presence.Add("hwal2.1", new t_Account() { Acctidx = 1 }, DateTimeOffset.Now.AddSeconds(3000000)); //presence.Add("hwal2.2", new t_Account() { Acctidx = 2 }, DateTimeOffset.Now.AddSeconds(3000000)); //var account1 = presence.Get<t_Account>("hwal2.1"); //List<string> keys = new List<string>() //{ // "hwal2.1", // "hwal2.2", // "hwal2.3" //}; //var list = presence.Get<t_Account>(keys.ToArray()); //var exist = presence.Exist(keys[0]); //var existList = presence.Exist(keys); //var server = RedisConnectionMultiplexer.GetServer("10.11.35.21:6379"); //System.Console.WriteLine("******************************"); //using (var redis = ConnectionMultiplexer.Connect("10.11.35.21:6379")) //{ // var db = redis.GetDatabase(); // using (var redis1 = ConnectionMultiplexer.Connect("10.11.35.21:6379")) // { // var db1 = redis.GetDatabase(); // } //} }