/** * */ package eu.quanticol.carma.examples.gc; import org.apache.commons.math3.random.RandomGenerator; import org.cmg.ml.sam.sim.SimulationEnvironment; import org.cmg.ml.sam.sim.sampling.SamplingLog; import eu.quanticol.carma.simulator.CarmaComponent; import eu.quanticol.carma.simulator.CarmaPredicate; import eu.quanticol.carma.simulator.CarmaStore; import eu.quanticol.carma.simulator.CarmaSystem; /** * @author loreti * */ public class GroupiesAndCelebrities extends CarmaSystem { @Override public String toString() { int kindA = this.count(new CarmaPredicate() { @Override public boolean satisfy(double now,CarmaStore store) { Integer aType = GroupiesCelebritiesDefinitions.KIND_A; return aType.equals(store.get(GroupiesCelebritiesDefinitions.KIND_ATTRIBUTE, Integer.class)); } }); int kindB = this.count(new CarmaPredicate() { @Override public boolean satisfy(double now,CarmaStore store) { Integer aType = GroupiesCelebritiesDefinitions.KIND_B; return aType.equals(store.get(GroupiesCelebritiesDefinitions.KIND_ATTRIBUTE, Integer.class)); } }); return "<"+kindA+","+kindB+">"; } public static final int KIND_A = 0; public static final int KIND_B = 1; public static final int ACT_ID = 0; public static final double BROADCAST_LOST_PROBABILITY = 0.75; public static final double UNICAST_LOST_PROBABILITY = 0; public static final double BROADCAST_RATE = 0.1; public static final double UNICAST_RATE = 1.0; public GroupiesAndCelebrities(int groupies, int celebrities) { for( int i=0 ; i<groupies ; i++ ) { CarmaComponent c = new CarmaComponent(); c.addAgent( GroupiesCelebritiesDefinitions.getGroupyProcess(c) ); c.set(GroupiesCelebritiesDefinitions.KIND_ATTRIBUTE, i%2); addComponent( c ); } for( int i=0 ; i<celebrities ; i++ ) { CarmaComponent c = new CarmaComponent(); c.addAgent( GroupiesCelebritiesDefinitions.getCelebrityProcess(c) ); c.set(GroupiesCelebritiesDefinitions.KIND_ATTRIBUTE, i%2); addComponent( c ); } } @Override public double broadcastProbability(CarmaStore sender, CarmaStore receiver, int action) { return 1-BROADCAST_LOST_PROBABILITY; } @Override public double unicastProbability(CarmaStore sender, CarmaStore receiver, int action) { return 1-UNICAST_LOST_PROBABILITY; } @Override public double broadcastRate(CarmaStore sender, int action) { return BROADCAST_RATE; } @Override public double unicastRate(CarmaStore sender, int action) { return UNICAST_RATE; } @Override public void broadcastUpdate(RandomGenerator r , CarmaStore sender, int action, Object value) { } @Override public void unicastUpdate(RandomGenerator r , CarmaStore sender, CarmaStore receiver, int action, Object value) { } public static void main(String[] main) { SimulationEnvironment<CarmaSystem> simEnv = new SimulationEnvironment<CarmaSystem>(new GroupiesAndCelebritiesFactory(100,0)); simEnv.setSampling(new SamplingLog<CarmaSystem>(0.1)); simEnv.simulate(100.0); } }