|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectfern.simulation.Simulator
fern.simulation.algorithm.GibsonBruckSimulator
public class GibsonBruckSimulator
Implementation of the algorithm of Gibson and Bruck. They made two major improvements
to Gillespie's Direct method (GillespieSimple
):
In order to do that the perspective of viewing the simulators time has to be changed from relative to absolute. As a consequence, a new random number has to be drawn for each reaction whose propensity has changed by a firing. To avoid this inefficient permanent discarding of random numbers (drawing a random number is a time expensive operation) Gibson and Bruck developed a method for reusing unused random numbers.
One pitfall remains: What happens, when a propensity decreases to 0 and after a time
ceases to be 0. Then the propensity from the pre-0 state can be reused which is tricky
to implement. Some implementations (including Dizzy) just draw a new random number which
is always valid but slow. Actually may these extra random numbers spoil the whole
improvement of the indexed priority queue in certain networks and it would be faster to
use the Direct method with the dependency graph (as in GillespieEnhanced
).
For reference see M.A.Gibson and J.Bruck, Efficient Exact Stochastic Simulation of Chemical Systems with Many Species and Many Channels, J.Phys.Chem.A., Vol 104, no 9, 2000
GillespieSimple
,
GillespieEnhanced
,
DependencyGraph
,
IndexedPriorityQueue
Nested Class Summary |
---|
Nested classes/interfaces inherited from class fern.simulation.Simulator |
---|
Simulator.FireType |
Constructor Summary | |
---|---|
GibsonBruckSimulator(Network net)
|
Method Summary | |
---|---|
String |
getName()
Gets the name of the algorithm. |
void |
initialize()
Initializes the algorithm: set t=0reset the AmountManager recalculate the propensities
Gets called at the very beginning of start |
void |
performStep(SimulationController control)
Performs one simulation step. |
void |
reinitialize()
Reset propensities when a event has been executed. |
void |
setAmount(int species,
long amount)
Sets the amount of the given species. |
void |
setVolume(double volume)
Sets the volume of the reaction network. |
Methods inherited from class fern.simulation.Simulator |
---|
addObserver, getAmount, getNet, getNextThetaEvent, getPropensity, getPropensityCalculator, getTime, getVolume, isInterpolateTheta, registerNewTheta, setInterpolateTheta, start, start |
Methods inherited from class java.lang.Object |
---|
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Constructor Detail |
---|
public GibsonBruckSimulator(Network net)
Method Detail |
---|
public void reinitialize()
Simulator
reinitialize
in class Simulator
public void performStep(SimulationController control)
Simulator
Simulator.setAmount(int, long)
and Simulator.setVolume(double)
if they need correct values!
performStep
in class Simulator
control
- the simulators controllerpublic void initialize()
Simulator
AmountManager
start
initialize
in class Simulator
public String getName()
Simulator
getName
in class Simulator
public void setVolume(double volume)
Simulator
setVolume
in class Simulator
volume
- the volumepublic void setAmount(int species, long amount)
Simulator
setAmount
in class Simulator
species
- species indexamount
- amount of speciesAmountManager.setAmount(int, long)
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |