コード例 #1
0
 public Dictionary <long, ResultPosition> ProcessEvent(int eventID,
                                                       Dictionary <string, Dictionary <int, Dictionary <long, Tuple <double, uint, List <float> > > > > EventOccurrenceDRs,
                                                       bool ShouldAllocate,
                                                       int MaxConcurrencyContracts,
                                                       params long[] exposureIDs)
 {
     return(_handleNGFMPrototype.ProcessEvent(eventID, EventOccurrenceDRs, ShouldAllocate, MaxConcurrencyContracts, exposureIDs));
 }
コード例 #2
0
        static void Main(string[] args)
        {
            ProcessCommandLineArgs(args);

            NGFMPrototypeDLL_Handle = new NGFMPrototype();

            if (InputFile != null)
            {
                NGFMPrototypeDLL_Handle.UploadContractExposures(new string[] { InputFile });
            }
            else
            {
                NGFMPrototypeDLL_Handle.UploadContractExposures(Directory.GetFiles(InputDirectory, "*.dat"));
            }

            Dictionary <long, Task> tasks = null;

            NGFMPrototypeDLL_Handle.BuildParsingContext();

            tasks = NGFMPrototypeDLL_Handle.Prepare_OLDAPI();

            if (tasks != null)
            {
                Task.WaitAll(tasks.Select(kv => kv.Value).ToArray());
            }

            NGFMPrototypeDLL_Handle.DisposeParsingContext();

            // Iterate through all events

            foreach (string _GUInputFile in Directory.GetFiles(GUInputDirectory, GUInputFile))
            {
                Dictionary <string, Dictionary <int, Dictionary <long, Tuple <double, uint, List <float> > > > > dr = null;

                dr = NGFMPrototypeDLL_Handle.ReadDamageRatiosFromFile(_GUInputFile);

                NGFMPrototypeDLL_Handle.TransformDamageRatios(dr);

                Dictionary <long, ResultPosition> Results = NGFMPrototypeDLL_Handle.ProcessEvent((int)_GUInputFile.GetHashCode(),
                                                                                                 NGFMPrototypeDLL_Handle.DamageRatiosPerSubPeril, true, 1);

                string InputPrefix = (InputFile != null) ? Path.GetFileNameWithoutExtension(InputFile) : "";

                string OutputFileName = "_" + InputPrefix +
                                        Path.GetFileNameWithoutExtension(_GUInputFile) + "_Output.csv";

                Utilities.WriteResultsToCSVFile(OutputDirectory + "\\" + OutputFileName, Results);
            }
        }
コード例 #3
0
        public static void TestReferenceSpeed(GraphType type, PartitionData PD, int conIndex, COLCollection COLSet)
        {
            RAPSettings settings = new RAPSettings(COLSet.GetSubperils());

            //Default SubSampling Settings
            SubSamplingAnalysisSetting subSamplingSettings = new SubSamplingAnalysisSetting(false, 1, 0, 250, "", "");

            //NGFMPrototype NGFM = new NGFMPrototype(PD);
            ReferencePrototype Reference = new ReferencePrototype(PD, settings, subSamplingSettings);

            Reference.ReferencePrepare(GraphType.Auto);

            NGFMPrototype NGFM = new NGFMPrototype();

            NGFM.Prepare(PD);  //NGFM result is cached, so create another object for each event

            double    MicroSecondTicks = Stopwatch.Frequency / 1000000.0;
            Stopwatch stopwatch        = new Stopwatch();

            stopwatch.Start();
            NGFM.Prepare(PD);  //NGFM result is cached, so create another object for each event
            stopwatch.Stop();
            double NGFMGraphTime = Convert.ToDouble(stopwatch.ElapsedTicks) / MicroSecondTicks;

            PartitionDataAdpator PDataAdap = new PartitionDataAdpator(PD, subSamplingSettings);
            ExposureDataAdaptor  expData   = PDataAdap.GetExposureAdaptor(conIndex);

            GUInputGeneratorFactory generatorFactory = new GUInputGeneratorFactory(PD, COLSet, subSamplingSettings, TimeStyle.ConstantTimeStamps, LossStyle.DamagaeRatio);
            GUInputGenerator        NGFMEventGen     = generatorFactory.GetGeneratorForContract(conIndex);

            VectorGUInputGeneratorFactory vectorgeneratorFactory = new VectorGUInputGeneratorFactory(PD, COLSet.GetSubperils(), TimeStyle.ConstantTimeStamps, LossStyle.GroundUp, true, subSamplingSettings);
            VectorGUInputGenerator        ReferenceEventGen      = vectorgeneratorFactory.GetGeneratorForContract(conIndex);


            int counter = 0;
            int total   = 0;

            Console.WriteLine("State at: " + DateTime.Now.ToString("h:mm:ss tt"));
            //NGFMPrototype NGFM = new NGFMPrototype(PD);
            for (int i = 1; i < 100; i += 1)
            {
                Dictionary <string, Dictionary <int, Dictionary <long, Tuple <double, uint, List <float> > > > > NGFMguLoss;
                //Dictionary<string, Dictionary<int, Dictionary<long, Tuple<double, uint, List<float>>>>> RefguLoss;
                if (NGFMEventGen.GenerateRITELoss(i))
                {
                    NGFMguLoss = NGFMEventGen.GULosses;
                }
                else
                {
                    throw new InvalidOperationException("Cannot get ground-up loss for event: " + i);
                }

                IVectorEvent RefguLoss = ReferenceEventGen.GenerateRITELoss(i);

                stopwatch = new Stopwatch();

                stopwatch.Start();
                double ReferencePayout = Reference.Execute(conIndex, type, RefguLoss).TotalPayout;
                stopwatch.Stop();
                double ReferenceTime = Convert.ToDouble(stopwatch.ElapsedTicks) / MicroSecondTicks;

                stopwatch.Reset();
                stopwatch.Start();
                double NGFMpayout = 0;
                //double NGFMpayout = NGFM.ExecuteFM(NGFMguLoss)[conIndex];
                RMS.ContractObjectModel.ResultPosition result = NGFM.ProcessEvent(i, NGFMguLoss, true, 1, new long[] { conIndex })[conIndex];
                NGFMpayout = result.PayOut;
                stopwatch.Stop();
                double NGFMTime = Convert.ToDouble(stopwatch.ElapsedTicks) / MicroSecondTicks;

                double diff = NGFMTime - ReferenceTime;

                Console.WriteLine("Event ID: " + i + " || " + "NGFM: " + NGFMTime + " || " + "Reference: " + ReferenceTime + " || " + diff);
            }

            Console.WriteLine("total event = " + total);
            Console.WriteLine("NGFM Graph Building Time = " + NGFMGraphTime);
            Console.WriteLine("End at: " + DateTime.Now.ToString("h:mm:ss tt"));
            Console.ReadLine();
        }
コード例 #4
0
        public static void TestReference(GraphType type, PartitionData PD, int conID, COLCollection COLSet)
        {
            RAPSettings settings = new RAPSettings(COLSet.GetSubperils());

            //Default SubSampling Settings
            SubSamplingAnalysisSetting subSamplingSettings = new SubSamplingAnalysisSetting(false, 1, 0, 250, "", "");

            //NGFMPrototype NGFM = new NGFMPrototype(PD);
            ReferencePrototype Reference = new ReferencePrototype(PD, settings, subSamplingSettings);

            Reference.ReferencePrepare(GraphType.Auto);

            NGFMPrototype NGFM = new NGFMPrototype();

            NGFM.Prepare(PD);  //NGFM result is cached, so create another object for each event

            PartitionDataAdpator PDataAdap = new PartitionDataAdpator(PD, subSamplingSettings);
            ExposureDataAdaptor  expData   = PDataAdap.GetExposureAdaptor(conID);

            GUInputGeneratorFactory generatorFactory = new GUInputGeneratorFactory(PD, COLSet, subSamplingSettings, TimeStyle.RandomTimeStamps, LossStyle.DamagaeRatio);
            GUInputGenerator        NGFMEventGen     = generatorFactory.GetGeneratorForContract(conID);

            GUInputGenerator ReferenceEventGen = generatorFactory.GetGeneratorForContract(conID);


            int counter = 0;
            int total   = 0;

            Console.WriteLine("State at: " + DateTime.Now.ToString("h:mm:ss tt"));
            //NGFMPrototype NGFM = new NGFMPrototype(PD);
            for (int i = 247; i < 248; i += 1)
            {
                Dictionary <string, Dictionary <int, Dictionary <long, Tuple <double, uint, List <float> > > > > NGFMguLoss;
                Dictionary <string, Dictionary <int, Dictionary <long, Tuple <double, uint, List <float> > > > > RefguLoss;
                if (NGFMEventGen.GenerateRITELoss(i))
                {
                    NGFMguLoss = NGFMEventGen.GULosses;
                }
                else
                {
                    throw new InvalidOperationException("Cannot get ground-up loss for event: " + i);
                }
                if (ReferenceEventGen.GenerateRITELoss(i))
                {
                    RefguLoss = ReferenceEventGen.GULosses;
                }
                else
                {
                    throw new InvalidOperationException("Cannot get ground-up loss for event: " + i);
                }

                //Contract ID 11236672 hard coded.. 11324656
                double ReferencePayout = Reference.Execute(conID, type, RefguLoss).TotalPayout;
                //double ReferencePayout2 = Reference.Execute(conIndex, GraphType.FixedGraph1, RefguLoss);
                //double NGFMpayout = NGFM.ExecuteFM(NGFMguLoss)[11324656];
                RMS.ContractObjectModel.ResultPosition result = NGFM.ProcessEvent(i, NGFMguLoss, true, 1, new long[] { conID })[conID];
                double NGFMpayout = result.PayOut;
                //double NGFMpayout = 0;
                double diff = NGFMpayout - ReferencePayout;

                total += 1;
                if (Math.Abs(diff) > 0.1)
                {
                    counter += 1;
                    Console.WriteLine("Event ID: " + i + " || " + "NGFM: " + Math.Round(NGFMpayout, 5) + " || " + "Reference: " + Math.Round(ReferencePayout, 5) + " || " + Math.Round(diff, 5));
                }
                Console.WriteLine("Event ID: " + i + " || " + "NGFM: " + Math.Round(NGFMpayout, 2) + " || " + "Reference: " + Math.Round(ReferencePayout, 2) + " || " + Math.Round(diff, 2));
            }

            Console.WriteLine("Number of difference: " + counter);
            Console.WriteLine("total event = " + total);
            Console.WriteLine("End at: " + DateTime.Now.ToString("h:mm:ss tt"));
            Console.ReadLine();
        }