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); }
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); }
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); }
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))); }
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; }
public RandomData() { _rng = new jp.takel.PseudoRandom.MersenneTwister((uint)DateTime.Now.Ticks); _prev = 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)); }
//--------------------------------------------------------------------- /// <summary> /// Initializes the random-number generator with a specific seed. /// </summary> public static void Initialize(uint seed) { generator = new jp.takel.PseudoRandom.MersenneTwister(seed); }
//--------------------------------------------------------------------- static Random() { generator = new jp.takel.PseudoRandom.MersenneTwister(); }
//--------------------------------------------------------------------- static Random() { generator = new jp.takel.PseudoRandom.MersenneTwister(); }