Пример #1
0
        private static Random GetNewRandom(SimulationManager lSimulationManager)
        {
            Random lRandom;

            switch (lSimulationManager.Rng)
            {
            case RandomNumberGenerator.DotNet:
                if (lSimulationManager.Randomize)
                {
                    lRandom = new Random();
                }
                else
                {
                    lRandom = new Random(34514325);
                }
                break;

            case RandomNumberGenerator.MersenneTwister:
                if (lSimulationManager.Randomize)
                {
                    throw new Exception("Support for randomization is not there for mersenne twister");
                }
                else
                {
                    lRandom = new jp.takel.PseudoRandom.MersenneTwister();
                }
                break;

            default: throw new Exception("You specified a RNG that is not implemented");
            }
            return(lRandom);
        }
Пример #2
0
        public static R DoParallelRun <RI, R>(Parameters parameters, int runs, Func <ParameterValues, RI> main, Func <IEnumerable <RI>, R> agg)
        {
            // Get best guess parameter values
            var parameterValues = parameters.GetBestGuess();

            var rand = new jp.takel.PseudoRandom.MersenneTwister();

            //int currentRun = 0;

            var results = new ConcurrentBag <RI>();

            Parallel.ForEach(
                parameters.GetRandom(rand, runs),
                () =>
            {
                Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
                Thread.CurrentThread.Priority       = ThreadPriority.BelowNormal;
                return(0);
            },
                (p, pls, dummy) =>
            {
                var r = main(p);
                results.Add(r);
                return(0);
            },
                (dummy) => { });

            var res = agg(results);

            return(res);
        }
Пример #3
0
        public static R DoMPIRun <RI, R>(Parameters parameters, int runs, Func <ParameterValues, RI> main, Func <IEnumerable <RI>, R> agg)
        {
            Intracommunicator comm = Communicator.world;

            int runsPerProc = runs / comm.Size;

            int startRun = comm.Rank * runsPerProc;

            var rand = new jp.takel.PseudoRandom.MersenneTwister();

            parameters.SkipNRandomRuns(rand, startRun);

            var results = new List <RI>();

            //Console.WriteLine("{0}: Doing {1} runs starting at {2}", comm.Rank, runsPerProc, startRun);

            foreach (var p in parameters.GetRandom(rand, runsPerProc, startRun))
            {
                var r = main(p);
                results.Add(r);
                //Console.WriteLine("{0}: Run {1} done", comm.Rank, p.RunId);
            }

            var allResults = comm.Allgather(results);

            //Console.WriteLine("{0}: Allgather", comm.Rank);

            var allResultsFlat = new List <RI>();

            foreach (var r in allResults)
            {
                foreach (var r2 in r)
                {
                    allResultsFlat.Add(r2);
                }
            }

            var aggResult = agg(allResultsFlat);


            return(aggResult);
        }
Пример #4
0
        private static Tuple <double, double> GetSCGasMonteCarlo(MarginalGas gas, double prtp, bool equityWeights, int monteCarloRuns)
        {
            var parameters = new Parameters();

            parameters.ReadDirectory(@"Data\Base");

            var fm = FundModel.GetModel();

            fm.Run(parameters.GetBestGuess());

            var rand = new jp.takel.PseudoRandom.MersenneTwister();

            var sccs = new System.Collections.Concurrent.ConcurrentBag <double>();

            Parallel.ForEach(parameters.GetRandom(rand, monteCarloRuns), pv =>
            {
                var m = new MarginalDamage3()
                {
                    EmissionYear     = Timestep.FromYear(2010),
                    Eta              = 1.0,
                    Gas              = gas,
                    Parameters       = pv,
                    Prtp             = prtp,
                    UseEquityWeights = equityWeights,
                    YearsToAggregate = 290
                };

                double scc = m.Start();

                sccs.Add(scc);
            });

            var stats = new DescriptiveStatistics(sccs);

            return(Tuple.Create(stats.Mean, Math.Sqrt(stats.Variance) / Math.Sqrt(stats.Count)));
        }
Пример #5
0
 private static Random GetNewRandom(SimulationManager lSimulationManager)
 {
     Random lRandom;
     switch (lSimulationManager.Rng)
     {
         case RandomNumberGenerator.DotNet:
             if (lSimulationManager.Randomize)
                 lRandom = new Random();
             else
                 lRandom = new Random(34514325);
             break;
         case RandomNumberGenerator.MersenneTwister:
             if (lSimulationManager.Randomize)
                 throw new Exception("Support for randomization is not there for mersenne twister");
             else
                 lRandom = new jp.takel.PseudoRandom.MersenneTwister();
             break;
         default: throw new Exception("You specified a RNG that is not implemented");
     }
     return lRandom;
 }
Пример #6
0
 public RandomData()
 {
     _rng  = new jp.takel.PseudoRandom.MersenneTwister((uint)DateTime.Now.Ticks);
     _prev = 0;
 }
Пример #7
0
        private static Tuple<double, double> GetSCGasMonteCarlo(MarginalGas gas, double prtp, bool equityWeights, int monteCarloRuns)
        {
            var parameters = new Parameters();
            parameters.ReadDirectory(@"Data\Base");

            var fm = FundModel.GetModel();
            fm.Run(parameters.GetBestGuess());

            var rand = new jp.takel.PseudoRandom.MersenneTwister();

            var sccs = new System.Collections.Concurrent.ConcurrentBag<double>();

            Parallel.ForEach(parameters.GetRandom(rand, monteCarloRuns), pv =>
            {
                var m = new MarginalDamage3()
                {
                    EmissionYear = Timestep.FromYear(2010),
                    Eta = 1.0,
                    Gas = gas,
                    Parameters = pv,
                    Prtp = prtp,
                    UseEquityWeights = equityWeights,
                    YearsToAggregate = 290
                };

                double scc = m.Start();

                sccs.Add(scc);
            });

            var stats = new DescriptiveStatistics(sccs);

            return Tuple.Create(stats.Mean, Math.Sqrt(stats.Variance) / Math.Sqrt(stats.Count));
        }
Пример #8
0
        //---------------------------------------------------------------------

        /// <summary>
        /// Initializes the random-number generator with a specific seed.
        /// </summary>
        public static void Initialize(uint seed)
        {
            generator = new jp.takel.PseudoRandom.MersenneTwister(seed);
        }
Пример #9
0
		//---------------------------------------------------------------------

		static Random()
		{
			generator = new jp.takel.PseudoRandom.MersenneTwister();
		}
Пример #10
0
        //---------------------------------------------------------------------

        static Random()
        {
            generator = new jp.takel.PseudoRandom.MersenneTwister();
        }