Exemplo n.º 1
0
        public void TestStepOnceWithWeight()
        {
            const string configString = @"{""solver"":""SDWSSA"",""prng_seed"":123, ""prng_index"":1,""RNG"":{""type"":""PSEUDODES""},""sdwSSA"":{""biasingParametersFileName"":""resources\\rever_isom_CEinfo.json""}}";

            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 sdwSSA(modelInfo, duration, repeats, samples);

            solver.Initialize();

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

            startRealization.Invoke(solver, null);

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

            stepOnce.Invoke(solver, inputArray1);

            var currentTime = GetHiddenField <double>("_currentTime", solver);

            Assert.AreEqual(0.0075434142087234968, currentTime);
        }
Exemplo n.º 2
0
        public void TestLocaleAndReactionIndex()
        {
            const string configString = @"{""solver"":""SDWSSA"", ""sdwSSA"":{""crossEntropyThreshold"":0.005, ""crossEntropyRuns"":1000000, ""biasingParametersFileName"":""resources\\rever_isom_CEinfo.json""}}";

            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 sdwSSA(modelInfo, duration, repeats, samples);

            var reactionSet = GetHiddenField <StateDependentReactionSet>("_reactions", solver);
            var reaction1   = reactionSet.Reactions[0];
            var inputObject = new object[2];

            inputObject[0] = reaction1;
            inputObject[1] = 0;
            Assert.AreEqual(0, GetHiddenMethod("ReactionIndex", solver).Invoke(solver, inputObject));
            var inputObject2 = new object[1];

            inputObject2[0] = reaction1;
            Assert.AreEqual(0, GetHiddenMethod("LocaleIndex", solver).Invoke(solver, inputObject2));
        }
Exemplo n.º 3
0
        public void TestRunCrossEntropy()
        {
            const string configString = @"{""solver"":""SDWSSA"",""prng_seed"":123, ""prng_index"":1,""RNG"":{""type"":""PSEUDODES""}}";

            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 sdwSSA(modelInfo, duration, repeats, samples);

            solver.Initialize();

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

            startRealization.Invoke(solver, null);

            GetHiddenMethod("RunCrossEntropy", solver).Invoke(solver, null);
            var biasingParameters = GetHiddenField <BiasingParameters>("_biasingParameters", solver);

            Console.Error.WriteLine("** TestRunCrossEntropy gammas **");
            foreach (double value in biasingParameters.Locales[0].Reactions[0].RareEvents[0].Gammas)
            {
                Console.Error.WriteLine(value);
            }

            Assert.AreEqual(new[] { 2.0273575170009774, 1.6011280886463515, 1.2909305036960836, 1.1580792074159503, 1.1014233907817004, 1.0495114005076731, 1.0308762479433711, 1.01949884022247545, 1.0123811789981323, 1.013972793156378, 1.0147858262235918, 0.97835339270352839, 1.025712153478078 },
                            biasingParameters.Locales[0].Reactions[0].RareEvents[0].Gammas);
        }
Exemplo n.º 4
0
        public void TestSetRareEventType()
        {
            const string configString = @"{""solver"":""SDWSSA"",""sdwSSA"":{""biasingParametersFileName"":""resources\\rever_isom_CEinfo.json""}}";

            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 sdwSSA(modelInfo, duration, repeats, samples);

            solver.Initialize();

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

            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));
        }
Exemplo n.º 5
0
        public void TestUpdateBinEdges()
        {
            const string configString = @"{""solver"":""SDWSSA""}";

            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 sdwSSA(modelInfo, duration, repeats, samples);

            var          startPC          = new[] { 0.012, 0.432 };
            var          endPC            = new[] { 0.899, 0.2134 };
            const double a0               = 2.0;
            const int    mu               = 0;
            var          inputObjectArray = new object[4];

            inputObjectArray[0] = startPC;
            inputObjectArray[1] = endPC;
            inputObjectArray[2] = a0;
            inputObjectArray[3] = mu;

            GetHiddenMethod("UpdateBinEdges", solver).Invoke(solver, inputObjectArray);
            Assert.AreEqual(startPC[mu], 0.0);
        }
Exemplo n.º 6
0
        public void TestInitialize()
        {
            const string configString = @"{""solver"":""SDWSSA"",""sdwSSA"":{""biasingParametersFileName"":""resources\\rever_isom_CEinfo.json""}}";

            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 sdwSSA(modelInfo, duration, repeats, samples);

            solver.Initialize();

            Assert.AreEqual(30.0, GetHiddenField <double>("_rareEventValue", solver));
            Assert.AreEqual(0.0, GetHiddenField <Expression>("_reExpression", solver).Value);
            Assert.AreEqual(1, GetHiddenField <int>("_rareEventType", solver));

            var biasingParameters = GetHiddenField <BiasingParameters>("_biasingParameters", solver);
            var reaction1         = biasingParameters.Locales[0].Reactions[0];
            var reaction2         = biasingParameters.Locales[0].Reactions[1];
            var gammas            = GetHiddenField <List <double[]> >("_gamma", solver);
            var pcs = GetHiddenField <List <double[]> >("_propensityCutoff", solver);

            Assert.AreEqual(reaction1.RareEvents[1].Gammas, gammas[0]);
            Assert.AreEqual(reaction2.RareEvents[1].Gammas, gammas[1]);
            Assert.AreEqual(reaction1.RareEvents[1].Thresholds, pcs[0]);
            Assert.AreEqual(reaction2.RareEvents[1].Thresholds, pcs[1]);
        }
Exemplo n.º 7
0
        public void TestRunCrossEntropy()
        {
            const string configString = @"{""solver"":""SDWSSA"",""prng_seed"":123, ""prng_index"":1,""RNG"":{""type"":""PSEUDODES""}}";

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

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

            solver.Initialize();

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

            startRealization.Invoke(solver, null);

            GetHiddenMethod("RunCrossEntropy", solver).Invoke(solver, null);
            var biasingParameters = GetHiddenField <BiasingParameters>("_biasingParameters", solver);

            Assert.AreEqual(biasingParameters.Locales[0].Reactions[0].RareEvents[0].Gammas, new[]
                            { 2.0631374260651874, 1.6275260813957282, 1.2852465989965649, 1.1551778002545692, 1.0896852429443773, 1.0597861285148038, 1.0521305608249278, 1.0491667590772435, 1.0058609338670563, 1.0114445292874816, 1.0208331777734598, 1.01513053565442, 1.0298844136066307 });
        }
Exemplo n.º 8
0
        private static sdwSSA InstantiateSolver()
        {
            const string configString = @"{""solver"":""SDWSSA"",""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 sdwSSA(modelInfo, 10.0, 1000000, 1);

            return(solver);
        }
Exemplo n.º 9
0
        public void TestsdwSSAConstructorWithBiasingParameters()
        {
            const string configString = @"{""solver"":""SDWSSA"",""prng_seed"":123, ""prng_index"":1,""RNG"":{""type"":""PSEUDODES""}, ""sdwSSA"":{""crossEntropyThreshold"":0.005, ""crossEntropyRuns"":1000000, ""biasingParametersFileName"":""resources\\rever_isom_sdwSSA_CEinfo.json""}}";

            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 sdwSSA(modelInfo, duration, repeats, samples);

            Assert.AreEqual(1000000, GetHiddenField <int>("_crossEntropyRuns", solver));
            Assert.AreEqual(0.005, GetHiddenField <double>("_crossEntropyThreshold", solver));
            Assert.AreEqual("resources\\rever_isom_sdwSSA_CEinfo.json", GetHiddenField <string>("_biasingParametersFileName", solver));
            Assert.AreEqual(false, GetHiddenField <Boolean>("_biasingParametersFlag", solver));

            var biasingParameters = GetHiddenField <BiasingParameters>("_biasingParameters", solver);

            Assert.AreEqual("global", biasingParameters.Locales[0].Name);
            Assert.AreEqual(2, biasingParameters.Locales[0].ReactionCount);
            Assert.AreEqual("reExpression", biasingParameters.RareEvent.ExpressionName);
            Assert.AreEqual("global", biasingParameters.RareEvent.ExpressionLocale);
            Assert.AreEqual(2, biasingParameters.RareEvent.IntermediateRareEventCount);
            Assert.That(new float[] { 23, 30 }, Is.EquivalentTo(biasingParameters.RareEvent.Thresholds));

            var reaction1 = biasingParameters.Locales[0].Reactions[0];

            Assert.AreEqual("interconvert1", reaction1.Name);
            Assert.AreEqual(13, reaction1.RareEvents[0].BinCount);
            Assert.AreEqual(new[] { 2.06313742606519, 1.62752608139573, 1.28524659899656, 1.1551778002545701, 1.08968524294438, 1.05978612851480, 1.05213056082493, 1.04916675907724, 1.00586093386706, 1.01144452928748, 1.02083317777346, 1.01513053565442, 1.02988441360663 }, reaction1.RareEvents[0].Gammas);
            Assert.AreEqual(new[] { 0.330135030236500, 0.381663104833693, 0.433191179430885, 0.484719254028077, 0.536247328625270, 0.587775403222462, 0.639303477819654, 0.690831552416846, 0.742359627014039, 0.845415776208423, 0.896943850805615, 0.948471925402808 }, reaction1.RareEvents[0].Thresholds);
            Assert.AreEqual(13, reaction1.RareEvents[1].BinCount);
            Assert.AreEqual(new[] { 2.476968001615, 1.64117464971143, 1.30252163933866, 1.16127755928718, 1.10320326699327, 1.06106835822293, 1.04512721554582, 1.03240567633747, 1.01985869635349, 1.01823044314009, 1.02103023510684, 1.01935203218744, 1.01472718645925 }, reaction1.RareEvents[1].Gammas);
            Assert.AreEqual(new[] { 0.3301350302365, 0.381663104833693, 0.433191179430885, 0.484719254028077, 0.53624732862527, 0.587775403222462, 0.639303477819654, 0.690831552416846, 0.742359627014039, 0.845415776208423, 0.896943850805615, 0.948471925402808 }, reaction1.RareEvents[1].Thresholds);

            var reaction2 = biasingParameters.Locales[0].Reactions[1];

            Assert.AreEqual("interconvert2", reaction2.Name);
            Assert.AreEqual(14, reaction2.RareEvents[0].BinCount);
            Assert.AreEqual(new[] { 0.98850417047106398, 0.917309756657961, 1.03395184011107, 0.975731835263174, 1.00611856107535, 0.984970326735658, 0.94726738124926602, 0.96614763699818795, 0.93530750400835505, 0.910799215582815, 0.86803893648544395, 0.77448007324552304, 0.613574832946266, 0.499713830449480 }, reaction2.RareEvents[0].Gammas);
            Assert.AreEqual(new[] { 0.123991842069282, 0.170343933275611, 0.216696024481939, 0.263048115688268, 0.309400206894597, 0.355752298100925, 0.402104389307254, 0.448456480513583, 0.494808571719912, 0.541160662926240, 0.587512754132569, 0.633864845338898, 0.680216936545227 }, reaction2.RareEvents[0].Thresholds);
            Assert.AreEqual(14, reaction2.RareEvents[1].BinCount);
            Assert.AreEqual(new[] { 0.98423158970711, 1.01498329340952, 0.990253088665499, 0.975106365160516, 0.986861478077715, 0.978625997732093, 0.962392697806862, 0.949116411528197, 0.936334221304811, 0.909940261969898, 0.85882305727793, 0.76550824189768, 0.611330117387254, 0.413838468692494 }, reaction2.RareEvents[1].Gammas);
            Assert.AreEqual(new[] { 0.123991842069282, 0.170343933275611, 0.216696024481939, 0.263048115688268, 0.309400206894597, 0.355752298100925, 0.402104389307254, 0.448456480513583, 0.494808571719912, 0.54116066292624, 0.587512754132569, 0.633864845338898, 0.680216936545227 }, reaction2.RareEvents[1].Thresholds);
        }
Exemplo n.º 10
0
        public void TestSelectAndFireReaction()
        {
            const string configString = @"{""solver"":""SDWSSA"",""sdwSSA"":{""biasingParametersFileName"":""resources\\rever_isom_CEinfo.json""}}";

            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 sdwSSA(modelInfo, duration, repeats, samples);

            solver.Initialize();

            var method     = FindMethod("SelectAndFireReaction", typeof(sdwSSA));
            var inputArray = new object[] { 0.1 };
            var mu         = (int)method.Invoke(solver, inputArray);

            Assert.AreEqual(0, mu);
        }
Exemplo n.º 11
0
        public void TestUpdateReactionInfo()
        {
            const string configString = @"{""solver"":""SDWSSA"", ""sdwSSA"":{""crossEntropyThreshold"":0.005, ""crossEntropyRuns"":1000000, ""biasingParametersFileName"":""resources\\rever_isom_CEinfo.json""}}";

            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 sdwSSA(modelInfo, duration, repeats, samples);

            var biasingParameters = GetHiddenField <BiasingParameters>("_biasingParameters", solver);
            var tempREInfo        = biasingParameters.Locales[0].Reactions[0].RareEvents[0];
            var inputArray        = new object[] { tempREInfo, 0 };

            GetHiddenMethod("UpdateReactionInfo", solver).Invoke(solver, inputArray);

            Assert.AreEqual(tempREInfo.Thresholds, biasingParameters.Locales[0].Reactions[0].RareEvents[2].Thresholds);
        }
Exemplo n.º 12
0
        public void TestSolve()
        {
            const string configString = @"{""solver"":""SDWSSA"",""prng_seed"":123, ""prng_index"":1,""RNG"":{""type"":""PSEUDODES""},""sdwSSA"":{""biasingParametersFileName"":""resources\\rever_isom_CEinfo.json""}}";

            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 sdwSSA(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(0.000011777283310510327, runningMean);
            Assert.AreEqual(0.00017388263350241653, runningVariance);
        }
Exemplo n.º 13
0
        public void TestCheckParameters7()
        {
            const string configString = @"{""solver"":""SDWSSA"",""sdwSSA"":{""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 sdwSSA(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"));
            }
        }
Exemplo n.º 14
0
        public void TestUpdateBiasingParameters()
        {
            const string configString = @"{""solver"":""SDWSSA"", ""sdwSSA"":{""crossEntropyThreshold"":0.005, ""crossEntropyRuns"":1000000, ""biasingParametersFileName"":""resources\\rever_isom_CEinfo.json""}}";

            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 sdwSSA(modelInfo, duration, repeats, samples);

            var gammaInfo        = new StateDependentGammaInfo(2, 10, 20);
            var method           = GetHiddenMethod("UpdateBiasingParameters", solver);
            var inputObjectArray = new object[2];

            inputObjectArray[0] = gammaInfo;
            inputObjectArray[1] = 35;
            method.Invoke(solver, inputObjectArray);

            var biasingParameters = GetHiddenField <BiasingParameters>("_biasingParameters", solver);

            Assert.AreEqual(35, biasingParameters.RareEvent.Thresholds[2]);
        }
Exemplo n.º 15
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);
        }