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