|
121 | 121 |
|
122 | 122 | ### Noise Scaling ###
|
123 | 123 |
|
124 |
| -# Tests with a single noise scaling parameter. |
| 124 | +# Tests where a single noise scaling parameter is given directly to the SDEProblem. |
125 | 125 | let
|
126 | 126 | noise_scaling_network = @reaction_network begin (k1, k2), X1 ↔ X2 end
|
127 | 127 | for repeat in 1:5
|
|
144 | 144 | end
|
145 | 145 | end
|
146 | 146 |
|
| 147 | +# Tests with multiple noise scaling parameters directly in the macro. |
| 148 | +let |
| 149 | + noise_scaling_network_1 = @reaction_network begin |
| 150 | + @noise_scaling_parameters η1 η2 |
| 151 | + (k1, k2), X1 ↔ X2 |
| 152 | + end |
| 153 | + u0 = [:X1 => 1000.0, :X2 => 3000.0] |
| 154 | + sol_1_1 = solve(SDEProblem(noise_scaling_network_1, u0, (0.0, 1000.0), [:k1 => 2.0, :k2 => 0.66, :η1 => 2.0, :η2 => 2.0]), ImplicitEM(); saveat=1.0) |
| 155 | + sol_1_2 = solve(SDEProblem(noise_scaling_network_1, u0, (0.0, 1000.0), [:k1 => 2.0, :k2 => 0.66, :η1 => 2.0, :η2 => 0.2]), ImplicitEM(); saveat=1.0) |
| 156 | + sol_1_3 = solve(SDEProblem(noise_scaling_network_1, u0, (0.0, 1000.0), [:k1 => 2.0, :k2 => 0.66, :η1 => 0.2, :η2 => 0.2]), ImplicitEM(); saveat=1.0) |
| 157 | + @test var(sol_1_1[1,:]) > var(sol_1_2[1,:]) > var(sol_1_3[1,:]) |
| 158 | + |
| 159 | + noise_scaling_network_2 = @reaction_network begin |
| 160 | + @noise_scaling_parameters η[1:2] |
| 161 | + (k1, k2), X1 ↔ X2 |
| 162 | + end |
| 163 | + @unpack η = noise_scaling_network_2 |
| 164 | + sol_2_1 = solve(SDEProblem(noise_scaling_network_2, u0, (0.0, 1000.0), [:k1 => 2.0, :k2 => 0.66, η[1] => 2.0, η[2] => 2.0]), ImplicitEM(); saveat=1.0) |
| 165 | + sol_2_2 = solve(SDEProblem(noise_scaling_network_2, u0, (0.0, 1000.0), [:k1 => 2.0, :k2 => 0.66, η[1] => 2.0, η[2] => 0.2]), ImplicitEM(); saveat=1.0) |
| 166 | + sol_2_3 = solve(SDEProblem(noise_scaling_network_2, u0, (0.0, 1000.0), [:k1 => 2.0, :k2 => 0.66, η[1] => 0.2, η[2] => 0.2]), ImplicitEM(); saveat=1.0) |
| 167 | + @test var(sol_2_1[1,:]) > var(sol_2_2[1,:]) > var(sol_2_3[1,:]) |
| 168 | +end |
| 169 | + |
| 170 | +# Tests using default values for nosie scaling. |
| 171 | +let |
| 172 | + noise_scaling_network = @reaction_network begin |
| 173 | + @noise_scaling_parameters η=0.0 |
| 174 | + (k1, k2), X1 ↔ X2 |
| 175 | + end |
| 176 | + u0 = [:X1 => 1100.0, :X2 => 2900.0] |
| 177 | + p = [:k1 => 2.0, :k2 => 0.66] |
| 178 | + ss = solve(SDEProblem(noise_scaling_network, u0, (0.0, 1000.0), p), ImplicitEM())[end] |
| 179 | + @test ss ≈ [1000.0, 3000.0] |
| 180 | +end |
| 181 | + |
| 182 | +# Complicated test with many combinations of options. |
| 183 | +let |
| 184 | + noise_scaling_network = @reaction_network begin |
| 185 | + @parameters k1 par1 [description="Parameter par1"] par2 η1 [noisescalingparameter=true] |
| 186 | + @noise_scaling_parameters η2=0.0 [description="Parameter η2"] η3=1.0 η4 [description="Parameter η4"] |
| 187 | + (p, d), 0 ↔ X1 |
| 188 | + (k1, k2), X1 ↔ X2 |
| 189 | + end |
| 190 | + @unpack X1, η4 = noise_scaling_network |
| 191 | + u0 = [X1 => 500.0, :X2 => 500.0] |
| 192 | + p = [p => 20.0, :d => 0.1, :η1 => 0.0, :η3 => 0.0, η4 => 0.0, :k1 => 2.0, :k2 => 2.0, :par1 => 1000.0, :par2 => 1000.0] |
| 193 | + |
| 194 | + ss = solve(SDEProblem(noise_scaling_network, u0, (0.0, 1000.0), p), ImplicitEM())[end] |
| 195 | + ss ≈ [200.0, 200.0] |
| 196 | +end |
| 197 | + |
| 198 | +# Tests that nosie scaling wor |
| 199 | + |
147 | 200 | ### Checks Simulations Don't Error ###
|
148 | 201 |
|
149 | 202 | #Tries to create a large number of problem, ensuring there are no errors (cannot solve as solution likely to go into negatives).
|
|
0 commit comments