/** * */ package eu.quanticol.carma.simulator2; import java.util.LinkedList; import java.util.Map.Entry; import java.util.function.BiFunction; import java.util.stream.Collectors; import java.util.stream.Stream; import org.apache.commons.math3.random.RandomGenerator; import org.cmg.ml.sam.sim.pm.PopulationRule; import org.cmg.ml.sam.sim.pm.PopulationTransition; /** * @author loreti * */ public class BroadcastRule implements PopulationRule<Component, CarmaPopulationState>{ private final OutputActionData output; private final LinkedList<InputActionData> inputs; private TransitionFunctionGenerator transitionGenerationFunction; private RateFunction rate; private ProbabilityFunction probability; private UpdateFunction update; public BroadcastRule( OutputActionData output , LinkedList<InputActionData> inputs , RateFunction rate , ProbabilityFunction probability , UpdateFunction update ) { this.output = output; this.inputs = inputs; this.transitionGenerationFunction = new TransitionFunctionGenerator(); this.probability = probability; this.rate = rate; this.update = update; } @Override public LinkedList<PopulationTransition<Component, CarmaPopulationState>> apply(RandomGenerator r, CarmaPopulationState state) { LinkedList<PopulationTransition<Component, CarmaPopulationState>> toReturn = new LinkedList<>(); /* * Retrieve all the components involved in the rule. These are the ones that * have the same componendId of this.output.componentId and that have the * process in position this.output.getAgentIndex() equal to output.getAgentId() * */ Stream<Entry<Component, Integer>> activeComponents = state.select(s -> ( (s.getConfiguration().getComponentId()==output.getComponentId())&& (s.getConfiguration().getAgentId(output.getAgentIndex())==output.getAgentId())) ); return toReturn; } public class TransitionFunctionGenerator implements BiFunction<CarmaPopulationState,Entry<Component, Integer> , LinkedList<PopulationTransition<Component, CarmaPopulationState>>> { @Override public LinkedList<PopulationTransition<Component, CarmaPopulationState>> apply(CarmaPopulationState s, Entry<Component, Integer> e) { // Component c = e.getKey(); // int multiplicity = e.getValue(); // LinkedList<OutputStepData> steps = output.getSteps().apply(c.getStore()); // // // steps.stream().map(mapper) // TODO Auto-generated method stub return null; } } }