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); }
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)); }
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); }
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)); }
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); }
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]); }
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 }); }
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); }
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); }
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); }
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); }
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); }
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")); } }
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]); }
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); }