Пример #1
0
        public void TestSolveOnce()
        {
            const string configString = @"{""solver"":""DWSSA"",""prng_seed"":123, ""prng_index"":1,""RNG"":{""type"":""PSEUDODES""},""dwSSA"":{""reExpressionName"":""reExpression"", ""reValName"":""reVal"", ""gamma"":[1, 1]}}";

            Configuration.CurrentConfiguration = Configuration.ConfigurationFromString(configString);
            RunResetRNGFactory();

            var          modelInfo = EmodlLoader.LoadEMODLFile("resources\\rever_isom.emodl");
            const double duration  = 10.0;
            const int    repeats   = 1000000;
            const int    samples   = 1;
            var          solver    = new dwSSA(modelInfo, duration, repeats, samples);

            solver.Initialize();
            var method = solver.GetType().GetMethod("SolveOnce", BindingFlags.NonPublic | BindingFlags.Instance, Type.DefaultBinder, new Type[] { }, null);

            method.Invoke(solver, null);
            var trajectoryCounter = GetHiddenField <int>("_trajectoryCounter", solver);
            var runningMean       = GetHiddenField <double>("_runningMean", solver);
            var currentTime       = GetHiddenField <double>("_currentTime", solver);

            Assert.AreEqual(1, trajectoryCounter);
            Assert.AreEqual(0.0, runningMean);
            Assert.GreaterOrEqual(currentTime, duration);
        }
Пример #2
0
        public void TestSelectAndFireReaction()
        {
            const string configString = @"{""solver"":""DWSSA"", ""prng_seed"":123, ""prng_index"":1, ""RNG"":{""type"":""PSEUDODES""}, ""dwSSA"":{""crossEntropyThreshold"":0.005, ""crossEntropyRuns"":100000, ""reExpressionName"":""reExpression"", ""reValName"":""reVal"", ""gamma"":[2.0, 0.5]}}";

            Configuration.CurrentConfiguration = Configuration.ConfigurationFromString(configString);
            RunResetRNGFactory();

            var          modelInfo = EmodlLoader.LoadEMODLFile("resources\\rever_isom.emodl");
            const double duration  = 10.0;
            const int    repeats   = 1;
            const int    samples   = 1;
            var          solver    = new dwSSA(modelInfo, duration, repeats, samples);

            solver.Initialize();

            var startRealization = GetHiddenMethod("StartRealization", solver);

            startRealization.Invoke(solver, null);

            var method      = solver.GetType().GetMethod("SelectAndFireReaction", BindingFlags.NonPublic | BindingFlags.Instance, Type.DefaultBinder, new[] { typeof(double) }, null);
            var inputArray1 = new object[] { 1.5 };

            method.Invoke(solver, inputArray1);

            var reactions = GetHiddenField <ReactionSet>("_reactions", solver);

            Assert.AreEqual(reactions.Reactions[0].Reactants[0].Value, 99);
        }
Пример #3
0
        public void TestSetRareEventType()
        {
            const string configString = @"{""solver"":""DWSSA"",""dwSSA"":{""gamma"": [1, 1]}}";

            Configuration.CurrentConfiguration = Configuration.ConfigurationFromString(configString);

            var          modelInfo = EmodlLoader.LoadEMODLFile("resources\\rever_isom.emodl");
            const double duration  = 10.0;
            const int    repeats   = 100000;
            const int    samples   = 1;
            var          solver    = new dwSSA(modelInfo, duration, repeats, samples);

            solver.Initialize();

            var method = FindMethod("SetRareEventType", typeof(dwSSA));

            method.Invoke(solver, null);

            var reExpression = GetHiddenField <Expression>("_reExpression", solver);
            var reEventValue = GetHiddenField <double>("_rareEventValue", solver);

            Assert.AreEqual(0, reExpression.Value);
            Assert.AreEqual(30.0, reEventValue);
            Assert.AreEqual(1, GetHiddenField <int>("_rareEventType", solver));
        }
Пример #4
0
        private static dwSSA InstantiateSolver()
        {
            const string configString = @"{""solver"":""DWSSA"",""prng_seed"":123, ""prng_index"":1,""RNG"":{""type"":""PSEUDODES""}}";

            Configuration.CurrentConfiguration = Configuration.ConfigurationFromString(configString);
            RunResetRNGFactory();

            var modelInfo = EmodlLoader.LoadEMODLFile("resources\\rever_isom.emodl");
            var solver    = new dwSSA(modelInfo, 10.0, 1000000, 1);

            return(solver);
        }
Пример #5
0
        private static dwSSA SetupCrossEntropy()
        {
            const string configString =
                @"{""solver"":""DWSSA"", ""prng_seed"":123, ""prng_index"":1, ""RNG"":{""type"":""PSEUDODES""}, ""dwSSA"":{""gamma"":[1, 1]}}";

            Configuration.CurrentConfiguration = Configuration.ConfigurationFromString(configString);
            RunResetRNGFactory();

            var          modelInfo = EmodlLoader.LoadEMODLFile("resources\\rever_isom.emodl");
            const double duration  = 10.0;
            const int    repeats   = 1;
            const int    samples   = 1;
            var          solver    = new dwSSA(modelInfo, duration, repeats, samples);

            solver.Initialize();

            var startRealization = GetHiddenMethod("StartRealization", solver);

            startRealization.Invoke(solver, null);
            return(solver);
        }
Пример #6
0
        public void TestInitialize()
        {
            const string configString = @"{""solver"":""DWSSA"", ""dwSSA"":{""gamma"":[1.0, 1.0]}}";

            Configuration.CurrentConfiguration = Configuration.ConfigurationFromString(configString);

            ModelInfo    modelInfo = EmodlLoader.LoadEMODLFile("resources\\rever_isom.emodl");
            const double duration  = 10.0;
            const int    repeats   = 1000000;
            const int    samples   = 1;

            var solver = new dwSSA(modelInfo, duration, repeats, samples);

            solver.Initialize();

            var rareEventValue = GetHiddenField <double>("_rareEventValue", solver);
            var reExpression   = GetHiddenField <Expression>("_reExpression", solver);

            Assert.AreEqual(30.0, rareEventValue);
            Assert.AreEqual(0.0, reExpression.Value);
        }
Пример #7
0
        private static dwSSA StartStepOnce()
        {
            const string configString =
                @"{""solver"":""DWSSA"",""prng_seed"":123, ""prng_index"":1,""RNG"":{""type"":""PSEUDODES""},""dwSSA"":{""crossEntropyThreshold"":0.005, ""crossEntropyRuns"":100000, ""reExpressionName"":""reExpression"", ""reValName"":""reVal"", ""gamma"":[2.0, 0.5]}}";

            Configuration.CurrentConfiguration = Configuration.ConfigurationFromString(configString);
            RunResetRNGFactory();

            var         modelInfo = EmodlLoader.LoadEMODLFile("resources\\rever_isom.emodl");
            const float duration  = 10.0f;
            const int   repeats   = 1;
            const int   samples   = 1;
            var         solver    = new dwSSA(modelInfo, duration, repeats, samples);

            solver.Initialize();

            var startRealization = GetHiddenMethod("StartRealization", solver);

            startRealization.Invoke(solver, null);
            return(solver);
        }
Пример #8
0
        public void TestSolve()
        {
            const string configString = @"{""solver"":""DWSSA"",""prng_seed"":123, ""prng_index"":1,""RNG"":{""type"":""PSEUDODES""},""dwSSA"":{ ""reExpressionName"":""reExpression"", ""reValName"":""reVal"", ""gamma"":[1.3243964798992824, 0.73112035859010072 ]}}";

            Configuration.CurrentConfiguration = Configuration.ConfigurationFromString(configString);
            RunResetRNGFactory();

            var          modelInfo = EmodlLoader.LoadEMODLFile("resources\\rever_isom.emodl");
            const double duration  = 10.0;
            const int    repeats   = 100000;
            const int    samples   = 1;
            var          solver    = new dwSSA(modelInfo, duration, repeats, samples);

            solver.Solve();

            var trajectoryCounter = GetHiddenField <int>("_trajectoryCounter", solver);
            var runningMean       = GetHiddenField <double>("_runningMean", solver);
            var runningVariance   = GetHiddenField <double>("_runningVariance", solver);

            Assert.AreEqual(100000, trajectoryCounter);
            Assert.AreEqual(1.0419565264447506E-05d, runningMean);
            Assert.AreEqual(0.022171169128369424d, runningVariance);
        }
Пример #9
0
        public void TestCheckParameters6()
        {
            const string configString = @"{""solver"":""DWSSA"",""dwSSA"":{""reExpressionName"":""reExpNameCustom""}}";

            Configuration.CurrentConfiguration = Configuration.ConfigurationFromString(configString);

            var          modelInfo = EmodlLoader.LoadEMODLFile("resources\\rever_isom.emodl");
            const double duration  = 10.0;
            const int    repeats   = 1000000;
            const int    samples   = 1;
            var          solver    = new dwSSA(modelInfo, duration, repeats, samples);
            var          method    = GetHiddenMethod("CheckParameters", solver);

            try
            {
                method.Invoke(solver, null);
                Assert.Fail("CheckParameters should have thrown an Error");
            }
            catch (TargetInvocationException ex)
            {
                Assert.That(ex.GetBaseException().ToString(), Is.StringContaining("rare event expression field"));
            }
        }
Пример #10
0
        public void TestdwSSAConstructor()
        {
            const string configString = @"{""solver"":""DWSSA"", ""dwSSA"": { ""crossEntropyThreshold"":0.005, ""crossEntropyRuns"":1000000, ""reExpressionName"":""reExpNameCustom"", ""reValName"":""reValNameCustom"", ""outputFileName"":""rever_isom_dwSSA_1e6_Custom.txt"", ""gamma"":[1.0, 1.0]}}";

            Configuration.CurrentConfiguration = Configuration.ConfigurationFromString(configString);

            var          modelInfo = EmodlLoader.LoadEMODLFile("resources\\rever_isom_custom.emodl");
            const double duration  = 20.0;
            const int    repeats   = 222;
            const int    samples   = 2;
            var          solver    = new dwSSA(modelInfo, duration, repeats, samples);

            Assert.AreEqual(0, GetHiddenField <int>("_trajectoryCounter", solver));
            Assert.AreEqual(0.0, GetHiddenField <double>("_runningMean", solver));
            Assert.AreEqual(0.0, GetHiddenField <double>("_runningVariance", solver));
            Assert.AreEqual(1000000, GetHiddenField <int>("_crossEntropyRuns", solver));
            Assert.AreEqual(0.005, GetHiddenField <double>("_crossEntropyThreshold", solver));
            Assert.AreEqual(200, GetHiddenField <int>("_crossEntropyMinDataSize", solver));
            Assert.AreEqual("reExpNameCustom", GetHiddenField <string>("_reExpressionName", solver));
            Assert.AreEqual("reValNameCustom", GetHiddenField <string>("_reValName", solver));
            Assert.AreEqual(0.0, GetHiddenField <double>("_rareEventValue", solver));
            Assert.AreEqual("rever_isom_dwSSA_1e6_Custom.txt", GetHiddenField <string>("_outputFileName", solver));

            var expression = GetHiddenField <Expression>("_reExpression", solver);

            Assert.AreEqual("reExpNameCustom", expression.Name);
            var equalto = GetHiddenField <EqualTo>("_rareEventTest", solver);

            Assert.AreEqual(true, equalto.Value);
            var gamma = GetHiddenField <double[]>("_gamma", solver);

            Assert.That(gamma, Is.All.EqualTo(1.0));
            var reactions = GetHiddenField <ReactionSet>("_reactions", solver);

            Assert.AreEqual(gamma.Length, reactions.NumReactions);
        }
Пример #11
0
        public static ISolver CreateSolver(string solverName, ModelInfo model, int repeats, double duration, int samples)
        {
            ISolver solver;

            switch (solverName.ToUpper())
            {
            /*
             * SSA and variants
             */
            case "SSA":
            case "GILLESPIE":
            case "GILLESPIEDIRECT":
                solver = new Gillespie(model, duration, repeats, samples);
                break;

            case "FIRST":
            case "FIRSTREACTION":
            case "GILLESPIEFIRSTREACTION":
                solver = new GillespieFirstReaction(model, duration, repeats, samples);
                break;

            case "NEXT":
            case "NEXTREACTION":
            case "GIBSONBRUCK":
                solver = new GibsonBruck(model, duration, repeats, samples);
                break;

            case "HYBRID":
                solver = new HybridSSA(model, duration, repeats, samples);
                break;

            /*
             * Leaping solvers
             */
            case "TAU":
            case "TAULEAPING":
                solver = new TauLeaping(model, duration, repeats, samples);
                break;

            case "MID":
            case "MP":
            case "MIDPOINT":
                solver = new MidPoint(model, duration, repeats, samples);
                break;

            case "R":
            case "RLEAPING":
                solver = new RLeaping(model, duration, repeats, samples);
                break;

            case "RF":
            case "RFAST":
            case "RLEAPINGFAST":
                solver = new RLeapingFast(model, duration, repeats, samples);
                break;

            case "BLEAP":
            case "BLEAPING":
            case "B":
                solver = new BLeaping(model, duration, repeats, samples);
                break;

            /*
             * Diffusion/migration solvers
             */
            case "TSSA":
            case "TRANSPORTSSA":
            case "DIFFUSIONSSA":
            case "ISSA":
                solver = new TransportSSA(model, duration, repeats, samples);
                break;

            case "DFSP":
            case "DIFFUSIONFSP":
            case "TRANSPORTFSP":
                solver = new DFSP(model, duration, repeats, samples);
                break;

            case "DFSPPRIME":
            case "OTSSA":
            case "OPTIMALTRANSPORTSSA":
                solver = new OptimalTransportSSA(model, duration, repeats, samples);
                break;

            case "LEVY":
            case "LEVYFLIGHT":
            case "FRACTIONAL":
            case "FRACTIONALDIFFUSION":
            case "FD":
                solver = new FractionalDiffusion(model, duration, repeats, samples);
                break;

            /*
             * Specialty solvers
             */
            case "ET":
            case "EXITTIME":
            case "EXITTIMES":
            case "TS":
            case "TIMESTRETCHING":
                solver = new ExitTimes(model, duration, repeats, samples);
                break;

            case "DWSSA":
                solver = new dwSSA(model, duration, repeats, samples);
                break;

            case "SDWSSA":
                solver = new sdwSSA(model, duration, repeats, samples);
                break;

            default:
                Console.Error.WriteLine("Unknown solver selection '{0}'.", solverName);
                throw new ArgumentException(string.Format("Unknown solver '{0}'", solverName), "solverName");
            }

            return(solver);
        }