Commit d6e05af0 authored by Julian Zobel's avatar Julian Zobel
Browse files

Put all other ITransition Strategies useing the abstract class

parent 74fef9c4
...@@ -29,6 +29,8 @@ import java.util.List; ...@@ -29,6 +29,8 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Random; import java.util.Random;
import java.util.Set; import java.util.Set;
import de.tud.kom.p2psim.api.scenario.ConfigurationException;
import de.tud.kom.p2psim.api.topology.movement.SimLocationActuator; import de.tud.kom.p2psim.api.topology.movement.SimLocationActuator;
import de.tudarmstadt.maki.simonstrator.api.Randoms; import de.tudarmstadt.maki.simonstrator.api.Randoms;
import de.tudarmstadt.maki.simonstrator.api.component.sensor.location.AttractionPoint; import de.tudarmstadt.maki.simonstrator.api.component.sensor.location.AttractionPoint;
...@@ -51,6 +53,12 @@ public abstract class AbstractAttractionBasedTransitionStrategy implements ITran ...@@ -51,6 +53,12 @@ public abstract class AbstractAttractionBasedTransitionStrategy implements ITran
private List<AttractionAssignmentListener> listeners = new LinkedList<>(); private List<AttractionAssignmentListener> listeners = new LinkedList<>();
private long pauseTimeMin = 0;
private long pauseTimeMax = 0;
protected final static int EVENT_PAUSE_ENDED = 1;
@Override @Override
public AttractionPoint getAssignment(SimLocationActuator comp) { public AttractionPoint getAssignment(SimLocationActuator comp) {
return assignments.get(comp); return assignments.get(comp);
...@@ -100,4 +108,24 @@ public abstract class AbstractAttractionBasedTransitionStrategy implements ITran ...@@ -100,4 +108,24 @@ public abstract class AbstractAttractionBasedTransitionStrategy implements ITran
this.assignments.put(comp, attractionPoint); this.assignments.put(comp, attractionPoint);
notifyListenersOfAssignmentUpdate(comp, attractionPoint); notifyListenersOfAssignmentUpdate(comp, attractionPoint);
} }
protected long getPauseTime() {
return (long) (rnd.nextDouble() * (pauseTimeMax-pauseTimeMin)) + pauseTimeMin;
}
public void setMinPauseTime(long minPauseTime) {
if (minPauseTime < 0) {
throw new ConfigurationException(
"MinPauseTime should be >= 0!");
}
this.pauseTimeMin = minPauseTime;
}
public void setMaxPauseTime(long maxPauseTime) {
if (maxPauseTime < 0) {
throw new ConfigurationException(
"MaxPauseTime should be >= 0!");
}
this.pauseTimeMax = maxPauseTime;
}
} }
...@@ -20,20 +20,14 @@ ...@@ -20,20 +20,14 @@
package de.tud.kom.p2psim.impl.topology.movement.modularosm.transition; package de.tud.kom.p2psim.impl.topology.movement.modularosm.transition;
import java.util.Collection;
import java.util.HashMap;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set;
import de.tud.kom.p2psim.api.common.SimHost; import de.tud.kom.p2psim.api.common.SimHost;
import de.tud.kom.p2psim.api.common.SimHostComponent; import de.tud.kom.p2psim.api.common.SimHostComponent;
import de.tud.kom.p2psim.api.topology.movement.SimLocationActuator; import de.tud.kom.p2psim.api.topology.movement.SimLocationActuator;
import de.tud.kom.p2psim.impl.topology.movement.modularosm.ModularMovementModel; import de.tud.kom.p2psim.impl.topology.movement.modularosm.ModularMovementModel;
import de.tud.kom.p2psim.impl.topology.movement.modularosm.transition.ITransitionStrategy.AttractionAssignmentListener;
import de.tudarmstadt.maki.simonstrator.api.component.sensor.location.AttractionPoint; import de.tudarmstadt.maki.simonstrator.api.component.sensor.location.AttractionPoint;
/** /**
...@@ -43,14 +37,10 @@ import de.tudarmstadt.maki.simonstrator.api.component.sensor.location.Attraction ...@@ -43,14 +37,10 @@ import de.tudarmstadt.maki.simonstrator.api.component.sensor.location.Attraction
* @author Martin Hellwig * @author Martin Hellwig
* @version 1.0, 07.07.2015 * @version 1.0, 07.07.2015
*/ */
public class FixedAssignmentStrategy implements ITransitionStrategy { public class FixedAssignmentStrategy extends AbstractAttractionBasedTransitionStrategy {
private List<SimLocationActuator> comps = new LinkedList<SimLocationActuator>(); private List<SimLocationActuator> comps = new LinkedList<SimLocationActuator>();
private LinkedHashSet<AttractionPoint> aPoints = new LinkedHashSet<AttractionPoint>();
private Map<SimLocationActuator, AttractionPoint> assignments = new LinkedHashMap<SimLocationActuator, AttractionPoint>();
private Map<SimLocationActuator, SimHost> mappingMSHost = new LinkedHashMap<SimLocationActuator, SimHost>(); private Map<SimLocationActuator, SimHost> mappingMSHost = new LinkedHashMap<SimLocationActuator, SimHost>();
private Map<SimHost, SimLocationActuator> mappingHostMS = new LinkedHashMap<SimHost, SimLocationActuator>(); private Map<SimHost, SimLocationActuator> mappingHostMS = new LinkedHashMap<SimHost, SimLocationActuator>();
...@@ -58,36 +48,8 @@ public class FixedAssignmentStrategy implements ITransitionStrategy { ...@@ -58,36 +48,8 @@ public class FixedAssignmentStrategy implements ITransitionStrategy {
private Map<String, AttractionPoint> mappingGroupIdAP = new LinkedHashMap<String, AttractionPoint>(); private Map<String, AttractionPoint> mappingGroupIdAP = new LinkedHashMap<String, AttractionPoint>();
private Map<AttractionPoint, String> mappingAPGroupId = new LinkedHashMap<AttractionPoint, String>(); private Map<AttractionPoint, String> mappingAPGroupId = new LinkedHashMap<AttractionPoint, String>();
private List<AttractionAssignmentListener> listeners = new LinkedList<>();
@Override
public AttractionPoint getAssignment(SimLocationActuator comp) {
return assignments.get(comp);
}
@Override
public void setAttractionPoints(Collection<AttractionPoint> attractionPoints) {
aPoints.addAll(attractionPoints);
}
@Override
public Set<AttractionPoint> getAllAttractionPoints() {
return aPoints;
}
@Override
public void addAttractionAssignmentListener(
AttractionAssignmentListener listener) {
listeners.add(listener);
}
@Override
public void removeAttractionAssignmentListener(
AttractionAssignmentListener listener) {
listeners.remove(listener);
}
@Override @Override
public void addComponent(SimLocationActuator ms) { public void addComponent(SimLocationActuator ms) {
comps.add(ms); comps.add(ms);
...@@ -95,14 +57,14 @@ public class FixedAssignmentStrategy implements ITransitionStrategy { ...@@ -95,14 +57,14 @@ public class FixedAssignmentStrategy implements ITransitionStrategy {
// No assignments been done before. // No assignments been done before.
if (assignments.isEmpty()) { if (assignments.isEmpty()) {
AttractionPoint aPoint = aPoints.iterator().next(); AttractionPoint aPoint = attractionPoints.iterator().next();
assignments.put(ms, aPoint); assignments.put(ms, aPoint);
mappingGroupId(ms, aPoint); mappingGroupId(ms, aPoint);
} }
// GroupId is not mapped. // GroupId is not mapped.
else if (!mappingGroupIdAP.containsKey(mappingMSHost.get(ms) else if (!mappingGroupIdAP.containsKey(mappingMSHost.get(ms)
.getProperties().getGroupID())) { .getProperties().getGroupID())) {
for (AttractionPoint actAP : aPoints) { for (AttractionPoint actAP : attractionPoints) {
if (!mappingAPGroupId.containsKey(actAP)) { if (!mappingAPGroupId.containsKey(actAP)) {
assignments.put(ms, actAP); assignments.put(ms, actAP);
mappingGroupId(ms, actAP); mappingGroupId(ms, actAP);
...@@ -120,7 +82,7 @@ public class FixedAssignmentStrategy implements ITransitionStrategy { ...@@ -120,7 +82,7 @@ public class FixedAssignmentStrategy implements ITransitionStrategy {
throw new Error("Should not happen."); throw new Error("Should not happen.");
} }
listeners.forEach(listener -> listener.updatedAttractionAssignment(ms, assignments.get(ms))); notifyListenersOfAssignmentUpdate(ms, assignments.get(ms));
} }
...@@ -133,7 +95,7 @@ public class FixedAssignmentStrategy implements ITransitionStrategy { ...@@ -133,7 +95,7 @@ public class FixedAssignmentStrategy implements ITransitionStrategy {
public void updateTargetAttractionPoint(SimLocationActuator comp, public void updateTargetAttractionPoint(SimLocationActuator comp,
AttractionPoint attractionPoint) { AttractionPoint attractionPoint) {
assignments.put(comp, attractionPoint); assignments.put(comp, attractionPoint);
listeners.forEach(listener -> listener.updatedAttractionAssignment(comp, attractionPoint)); notifyListenersOfAssignmentUpdate(comp, attractionPoint);
} }
private void mappingHost(SimLocationActuator ms) { private void mappingHost(SimLocationActuator ms) {
......
...@@ -24,7 +24,6 @@ import java.util.LinkedHashMap; ...@@ -24,7 +24,6 @@ import java.util.LinkedHashMap;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import de.tud.kom.p2psim.api.scenario.ConfigurationException;
import de.tud.kom.p2psim.api.topology.movement.SimLocationActuator; import de.tud.kom.p2psim.api.topology.movement.SimLocationActuator;
import de.tud.kom.p2psim.impl.topology.movement.modularosm.ModularMovementModel; import de.tud.kom.p2psim.impl.topology.movement.modularosm.ModularMovementModel;
import de.tudarmstadt.maki.simonstrator.api.Event; import de.tudarmstadt.maki.simonstrator.api.Event;
...@@ -43,15 +42,9 @@ public class InAreaRoamingTransitionStrategy extends AbstractAttractionBasedTran ...@@ -43,15 +42,9 @@ public class InAreaRoamingTransitionStrategy extends AbstractAttractionBasedTran
public static enum roamingTransitionState { public static enum roamingTransitionState {
ROAMING, ROAMING,
TRANSITION TRANSITION
} }
private final static int EVENT_ROAMING_ENDED = 1;
protected Map<SimLocationActuator, roamingTransitionState> roamingStates = new LinkedHashMap<>(); protected Map<SimLocationActuator, roamingTransitionState> roamingStates = new LinkedHashMap<>();
private long pauseTimeMin = 0;
private long pauseTimeMax = 0;
@Override @Override
public void addComponent(SimLocationActuator comp) { public void addComponent(SimLocationActuator comp) {
...@@ -66,7 +59,7 @@ public class InAreaRoamingTransitionStrategy extends AbstractAttractionBasedTran ...@@ -66,7 +59,7 @@ public class InAreaRoamingTransitionStrategy extends AbstractAttractionBasedTran
// start roaming // start roaming
if(roamingStates.get(comp) == roamingTransitionState.TRANSITION) { if(roamingStates.get(comp) == roamingTransitionState.TRANSITION) {
// schedule the end of the roaming phase, which will make a new transition // schedule the end of the roaming phase, which will make a new transition
Event.scheduleWithDelay(getPauseTime(), this, comp, EVENT_ROAMING_ENDED); Event.scheduleWithDelay(getPauseTime(), this, comp, EVENT_PAUSE_ENDED);
this.roamingStates.put(comp, roamingTransitionState.ROAMING); this.roamingStates.put(comp, roamingTransitionState.ROAMING);
} }
...@@ -93,31 +86,12 @@ public class InAreaRoamingTransitionStrategy extends AbstractAttractionBasedTran ...@@ -93,31 +86,12 @@ public class InAreaRoamingTransitionStrategy extends AbstractAttractionBasedTran
@Override @Override
public void eventOccurred(Object content, int type) { public void eventOccurred(Object content, int type) {
assert type == EVENT_ROAMING_ENDED; assert type == EVENT_PAUSE_ENDED;
SimLocationActuator comp = (SimLocationActuator) content; SimLocationActuator comp = (SimLocationActuator) content;
this.addComponent(comp); this.addComponent(comp);
} }
private long getPauseTime() {
return (long) (rnd.nextDouble() * (pauseTimeMax-pauseTimeMin)) + pauseTimeMin;
}
public void setMinPauseTime(long minPauseTime) {
if (minPauseTime < 0) {
throw new ConfigurationException(
"MinPauseTime should be >= 0!");
}
this.pauseTimeMin = minPauseTime;
}
public void setMaxPauseTime(long maxPauseTime) {
if (maxPauseTime < 0) {
throw new ConfigurationException(
"MaxPauseTime should be >= 0!");
}
this.pauseTimeMax = maxPauseTime;
}
private AttractionPoint getNewAttractionPoint(SimLocationActuator component) { private AttractionPoint getNewAttractionPoint(SimLocationActuator component) {
double score = rnd.nextDouble(); double score = rnd.nextDouble();
......
...@@ -24,16 +24,13 @@ import java.util.ArrayList; ...@@ -24,16 +24,13 @@ import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashSet; import java.util.LinkedHashSet;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
import java.util.Random;
import java.util.Set; import java.util.Set;
import java.util.Vector; import java.util.Vector;
import de.tud.kom.p2psim.api.common.SimHost; import de.tud.kom.p2psim.api.common.SimHost;
import de.tud.kom.p2psim.api.common.SimHostComponent; import de.tud.kom.p2psim.api.common.SimHostComponent;
import de.tud.kom.p2psim.api.scenario.ConfigurationException; import de.tud.kom.p2psim.api.scenario.ConfigurationException;
...@@ -41,12 +38,10 @@ import de.tud.kom.p2psim.api.topology.Topology; ...@@ -41,12 +38,10 @@ import de.tud.kom.p2psim.api.topology.Topology;
import de.tud.kom.p2psim.api.topology.movement.SimLocationActuator; import de.tud.kom.p2psim.api.topology.movement.SimLocationActuator;
import de.tud.kom.p2psim.api.topology.social.SocialView; import de.tud.kom.p2psim.api.topology.social.SocialView;
import de.tud.kom.p2psim.impl.simengine.Simulator; import de.tud.kom.p2psim.impl.simengine.Simulator;
import de.tud.kom.p2psim.impl.topology.movement.modularosm.transition.ITransitionStrategy.AttractionAssignmentListener;
import de.tud.kom.p2psim.impl.topology.util.PositionVector; import de.tud.kom.p2psim.impl.topology.util.PositionVector;
import de.tudarmstadt.maki.simonstrator.api.Binder; import de.tudarmstadt.maki.simonstrator.api.Binder;
import de.tudarmstadt.maki.simonstrator.api.Event; import de.tudarmstadt.maki.simonstrator.api.Event;
import de.tudarmstadt.maki.simonstrator.api.EventHandler; import de.tudarmstadt.maki.simonstrator.api.EventHandler;
import de.tudarmstadt.maki.simonstrator.api.Randoms;
import de.tudarmstadt.maki.simonstrator.api.component.sensor.location.AttractionPoint; import de.tudarmstadt.maki.simonstrator.api.component.sensor.location.AttractionPoint;
/** /**
...@@ -79,18 +74,13 @@ import de.tudarmstadt.maki.simonstrator.api.component.sensor.location.Attraction ...@@ -79,18 +74,13 @@ import de.tudarmstadt.maki.simonstrator.api.component.sensor.location.Attraction
* @author Christoph Muenker * @author Christoph Muenker
* @version 1.0, 02.07.2013 * @version 1.0, 02.07.2013
*/ */
public class SocialTransitionStrategy public class SocialTransitionStrategy extends AbstractAttractionBasedTransitionStrategy implements EventHandler {
implements ITransitionStrategy, EventHandler {
private String socialId = null; private String socialId = null;
private SocialView socialView; private SocialView socialView;
private List<SimLocationActuator> comps = new Vector<SimLocationActuator>(); private List<SimLocationActuator> comps = new Vector<SimLocationActuator>();
private LinkedHashSet<AttractionPoint> aPoints = new LinkedHashSet<AttractionPoint>();
private Map<SimLocationActuator, AttractionPoint> assignments = new HashMap<SimLocationActuator, AttractionPoint>();
private Set<SimLocationActuator> arrivedAtAttractionPoint = new LinkedHashSet<>(); private Set<SimLocationActuator> arrivedAtAttractionPoint = new LinkedHashSet<>();
...@@ -100,8 +90,6 @@ public class SocialTransitionStrategy ...@@ -100,8 +90,6 @@ public class SocialTransitionStrategy
private Map<SimHost, SimLocationActuator> mapHostMs = new HashMap<SimHost, SimLocationActuator>(); private Map<SimHost, SimLocationActuator> mapHostMs = new HashMap<SimHost, SimLocationActuator>();
private List<AttractionAssignmentListener> listeners = new LinkedList<>();
private double minPauseTime = Simulator.MINUTE_UNIT * 0.5; private double minPauseTime = Simulator.MINUTE_UNIT * 0.5;
private double maxPauseTime = Simulator.MINUTE_UNIT * 100; private double maxPauseTime = Simulator.MINUTE_UNIT * 100;
...@@ -110,16 +98,10 @@ public class SocialTransitionStrategy ...@@ -110,16 +98,10 @@ public class SocialTransitionStrategy
private long numberOfFavoritePlaces = 4; private long numberOfFavoritePlaces = 4;
private Random rand;
private PositionVector worldDimension; private PositionVector worldDimension;
private boolean init = false; private boolean init = false;
public SocialTransitionStrategy() {
this.rand = Randoms.getRandom(SocialTransitionStrategy.class);
}
private void init() { private void init() {
if (!init) { if (!init) {
if (socialId == null) { if (socialId == null) {
...@@ -150,35 +132,12 @@ public class SocialTransitionStrategy ...@@ -150,35 +132,12 @@ public class SocialTransitionStrategy
this.socialId = socialId; this.socialId = socialId;
} }
@Override
public AttractionPoint getAssignment(SimLocationActuator comp) {
return assignments.get(comp);
}
@Override
public void addAttractionAssignmentListener(
AttractionAssignmentListener listener) {
listeners.add(listener);
}
@Override
public void removeAttractionAssignmentListener(
AttractionAssignmentListener listener) {
listeners.remove(listener);
}
@Override @Override
public void setAttractionPoints(Collection<AttractionPoint> attractionPoints) { public void setAttractionPoints(Collection<AttractionPoint> attractionPoints) {
init(); init();
aPoints.addAll(attractionPoints); super.setAttractionPoints(attractionPoints);
} }
@Override
public Set<AttractionPoint> getAllAttractionPoints() {
return aPoints;
}
@Override @Override
public void addComponent(SimLocationActuator ms) { public void addComponent(SimLocationActuator ms) {
comps.add(ms); comps.add(ms);
...@@ -187,8 +146,8 @@ public class SocialTransitionStrategy ...@@ -187,8 +146,8 @@ public class SocialTransitionStrategy
// position. // position.
// TODO: needed? We do Transition as next, and this will delete the // TODO: needed? We do Transition as next, and this will delete the
// assignment.. // assignment..
AttractionPoint nearest = aPoints.iterator().next(); AttractionPoint nearest = attractionPoints.iterator().next();
for (AttractionPoint aPoint : aPoints) { for (AttractionPoint aPoint : attractionPoints) {
if (nearest.distanceTo(ms.getRealPosition()) > aPoint if (nearest.distanceTo(ms.getRealPosition()) > aPoint
.distanceTo(ms.getRealPosition())) { .distanceTo(ms.getRealPosition())) {
nearest = aPoint; nearest = aPoint;
...@@ -206,7 +165,7 @@ public class SocialTransitionStrategy ...@@ -206,7 +165,7 @@ public class SocialTransitionStrategy
AttractionPoint attractionPoint) { AttractionPoint attractionPoint) {
arrivedAtAttractionPoint.remove(comp); arrivedAtAttractionPoint.remove(comp);
assignments.put(comp, attractionPoint); assignments.put(comp, attractionPoint);
listeners.forEach(listener -> listener.updatedAttractionAssignment(comp, attractionPoint)); notifyListenersOfAssignmentUpdate(comp, attractionPoint);
} }
@Override @Override
...@@ -222,23 +181,21 @@ public class SocialTransitionStrategy ...@@ -222,23 +181,21 @@ public class SocialTransitionStrategy
List<AttractionPoint> apFriends = getFriendsPlaces(ms); List<AttractionPoint> apFriends = getFriendsPlaces(ms);
List<AttractionPoint> apClusters = getClusterPlaces(ms); List<AttractionPoint> apClusters = getClusterPlaces(ms);
List<AttractionPoint> apRandom = getRandomPlaces(ms, List<AttractionPoint> apRandom = getRandomPlaces(ms,
(int) Math.max(aPoints.size() * 0.2, 5)); (int) Math.max(attractionPoints.size() * 0.2, 5));
AttractionPoint ap = null; AttractionPoint ap = null;
if (rand.nextDouble() < socialFactor) { if (rnd.nextDouble() < socialFactor) {
ap = findHighestScore(ms, apFavorites, apFriends, apClusters, ap = findHighestScore(ms, apFavorites, apFriends, apClusters,
apRandom); apRandom);
} else { } else {
List<AttractionPoint> aps = new ArrayList<AttractionPoint>(); List<AttractionPoint> aps = new ArrayList<AttractionPoint>();
aps.addAll(apRandom); aps.addAll(apRandom);
aps.addAll(apFavorites); aps.addAll(apFavorites);
ap = aps.get(rand.nextInt(apRandom.size())); ap = aps.get(rnd.nextInt(apRandom.size()));
} }
assignments.put(ms, ap); assignments.put(ms, ap);
arrivedAtAttractionPoint.remove(ms); arrivedAtAttractionPoint.remove(ms);
for (AttractionAssignmentListener listener : listeners) { notifyListenersOfAssignmentUpdate(ms, ap);
listener.updatedAttractionAssignment(ms, ap);
}
} }
private AttractionPoint findHighestScore(SimLocationActuator ms, private AttractionPoint findHighestScore(SimLocationActuator ms,
...@@ -342,8 +299,8 @@ public class SocialTransitionStrategy ...@@ -342,8 +299,8 @@ public class SocialTransitionStrategy
private List<AttractionPoint> getRandomPlaces(SimLocationActuator ms, private List<AttractionPoint> getRandomPlaces(SimLocationActuator ms,
int number) { int number) {
List<AttractionPoint> result = new Vector<AttractionPoint>(aPoints); List<AttractionPoint> result = new Vector<AttractionPoint>(attractionPoints);
Collections.shuffle(result, rand); Collections.shuffle(result, rnd);
return result.subList(0, Math.min(result.size(), number)); return result.subList(0, Math.min(result.size(), number));
} }
...@@ -382,8 +339,8 @@ public class SocialTransitionStrategy ...@@ -382,8 +339,8 @@ public class SocialTransitionStrategy
private void assignFavoritePlaces(SimLocationActuator ms) { private void assignFavoritePlaces(SimLocationActuator ms) {
Set<AttractionPoint> msFavoritePlaces = new LinkedHashSet<AttractionPoint>(); Set<AttractionPoint> msFavoritePlaces = new LinkedHashSet<AttractionPoint>();
LinkedList<AttractionPoint> temp = new LinkedList<AttractionPoint>( LinkedList<AttractionPoint> temp = new LinkedList<AttractionPoint>(
aPoints); attractionPoints);
Collections.shuffle(temp, rand); Collections.shuffle(temp, rnd);
for (int i = 0; i < numberOfFavoritePlaces; i++) { for (int i = 0; i < numberOfFavoritePlaces; i++) {
if (!temp.isEmpty()) { if (!temp.isEmpty()) {
msFavoritePlaces.add(temp.removeFirst()); msFavoritePlaces.add(temp.removeFirst());
...@@ -401,28 +358,7 @@ public class SocialTransitionStrategy ...@@ -401,28 +358,7 @@ public class SocialTransitionStrategy
mapHostMs.put(host, ms); mapHostMs.put(host, ms);
mapMsHost.put(ms, host); mapMsHost.put(ms, host);
} }
protected long getPauseTime() {
return (long) ((rand.nextDouble() * (maxPauseTime - minPauseTime))
+ minPauseTime);
}
public void setMinPauseTime(long minPauseTime) {
if (minPauseTime < 0) {
throw new ConfigurationException(
"MinPauseTime should be bigger then 0!");
}
this.minPauseTime = minPauseTime;
}
public void setMaxPauseTime(long maxPauseTime) {
if (maxPauseTime < 0) {
throw new ConfigurationException(
"MaxPauseTime should be bigger then 0!");
}
this.maxPauseTime = maxPauseTime;
}
@Override @Override
public void eventOccurred(Object se, int type) { public void eventOccurred(Object se, int type) {
if (arrivedAtAttractionPoint.contains(se)) { if (arrivedAtAttractionPoint.contains(se)) {
......
...@@ -20,23 +20,11 @@ ...@@ -20,23 +20,11 @@
package de.tud.kom.p2psim.impl.topology.movement.modularosm.transition; package de.tud.kom.p2psim.impl.topology.movement.modularosm.transition;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.Set;
import org.joda.time.chrono.JulianChronology;
import de.tud.kom.p2psim.api.scenario.ConfigurationException;
import de.tud.kom.p2psim.api.topology.movement.SimLocationActuator; import de.tud.kom.p2psim.api.topology.movement.SimLocationActuator;
import de.tudarmstadt.maki.simonstrator.api.Event; import de.tudarmstadt.maki.simonstrator.api.Event;
import de.tudarmstadt.maki.simonstrator.api.EventHandler; import de.tudarmstadt.maki.simonstrator.api.EventHandler;
import de.tudarmstadt.maki.simonstrator.api.Randoms;
import de.tudarmstadt.maki.simonstrator.api.component.sensor.location.AttractionPoint; import de.tudarmstadt.maki.simonstrator.api.component.sensor.location.AttractionPoint;
/** /**
...@@ -53,12 +41,6 @@ import de.tudarmstadt.maki.simonstrator.api.component.sensor.location.Attraction ...@@ -53,12 +41,6 @@ import de.tudarmstadt.maki.simonstrator.api.component.sensor.location.Attraction
* *
*/ */
public class WeightedTransitionStrategy extends AbstractAttractionBasedTransitionStrategy implements EventHandler { public class WeightedTransitionStrategy extends AbstractAttractionBasedTransitionStrategy implements EventHandler {
private long pauseTimeMin = 0;
private long pauseTimeMax = 0;
private final static int EVENT_PAUSE_ENDED = 1;
@Override @Override
public void addComponent(SimLocationActuator ms) { public void addComponent(SimLocationActuator ms) {
...@@ -80,11 +62,7 @@ public class WeightedTransitionStrategy extends AbstractAttractionBasedTransitio ...@@ -80,11 +62,7 @@ public class WeightedTransitionStrategy extends AbstractAttractionBasedTransitio
notifyListenersOfAssignmentUpdate(component, assignment); notifyListenersOfAssignmentUpdate(component, assignment);
return assignment; return assignment;
} }
private long getPauseTime(SimLocationActuator component) {
return (long) (rnd.nextDouble() * (pauseTimeMax-pauseTimeMin)) + pauseTimeMin;
}
@Override @Override
public void eventOccurred(Object content, int type) { public void eventOccurred(Object content, int type) {
assert type == EVENT_PAUSE_ENDED; assert type == EVENT_PAUSE_ENDED;
...@@ -103,23 +81,7 @@ public class WeightedTransitionStrategy extends AbstractAttractionBasedTransitio ...@@ -103,23 +81,7 @@ public class WeightedTransitionStrategy extends AbstractAttractionBasedTransitio
} }
this.lastAssignments.put(ms, this.assignments.remove(ms)); this.lastAssignments.put(ms, this.assignments.remove(ms));
Event.scheduleWithDelay(getPauseTime(ms), this, ms, EVENT_PAUSE_ENDED); Event.scheduleWithDelay(getPauseTime(), this, ms, EVENT_PAUSE_ENDED);
}
public void setMinPauseTime(long minPauseTime) {
if (minPauseTime < 0) {
throw new ConfigurationException(
"MinPauseTime should be >= 0!");
}
this.pauseTimeMin = minPauseTime;
}
public void setMaxPauseTime(long maxPauseTime) {
if (maxPauseTime < 0) {
throw new ConfigurationException(
"MaxPauseTime should be >= 0!");
}
this.pauseTimeMax = maxPauseTime;
} }
} }
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment