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);
        }
예제 #3
0
        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();
            }
        }
예제 #4
0
 //--------------------------------------------------------------------------------------------------
 //初期値をランダムに設定 (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;
 }
예제 #5
0
 /// <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);
     }
 }
예제 #6
0
        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));
            }
        }
예제 #7
0
        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;
                    }
                }
            }
        }
예제 #8
0
        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);
        }
예제 #9
0
        //----------------------------------------------------------------------------------
        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);
        }
예제 #10
0
        //----------------------------------------------------------------------------------
        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));
        }
예제 #11
0
        //----------------------------------------------------------------------------
        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;
        }
예제 #12
0
 public static void SeedRNG(string seedString)
 {
     seed = seedString.GetHashCode ();
     RNG = new RandomMT((ulong)seed);
 }
예제 #13
0
 //--------------------------------------------------------------------------------
 //ガンマ分布に従う乱数生成
 static double gamma_rnd(RandomMT rand, double shape, double scale)
 {
     double output;
     double input = rand.Double();
     output = scale * Mt.InverseIncompleteGamma(input, shape);
     return output;
 }
예제 #14
0
        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();
                //    }

                //}
        }