/**
*
*/
package org.cmg.ml.sam.sim.pm;
import java.util.function.Consumer;
import java.util.function.Function;
import org.apache.commons.math3.random.RandomGenerator;
import org.cmg.ml.sam.sim.Activity;
/**
* @author loreti
*
*/
public abstract class PopulationTransition<S,T extends PopulationState<S>> implements Activity {
private Function<RandomGenerator,PopulationDrift<S>> transitionDriftFunction;
private Consumer<T> postTransitionAction;
private double rate;
private PopulationModel<S, T> model;
public PopulationTransition(
PopulationModel<S, T> model,
double rate,
Function<RandomGenerator,PopulationDrift<S>> transitionDriftFunction,
Consumer<T> postTransitionAction
) {
this.model = model;
this.rate = rate;
this.transitionDriftFunction = transitionDriftFunction;
this.postTransitionAction = postTransitionAction;
this.rate = rate;
}
public double getRate() {
return rate;
}
@Override
public String getName() {
return getInfo();
}
public abstract String getInfo();
@Override
public boolean execute(RandomGenerator r) {
PopulationDrift<S> drift = transitionDriftFunction.apply(r);
model.apply(drift,postTransitionAction);
return false;
}
}