added option to make random seed automatically generated at simulation load

+ a single random generator instance is used instead of sharing seed between different parts of the simulator
This commit is contained in:
fros4943 2009-02-18 10:09:32 +00:00
parent 07c50cc200
commit 8e9686e01d
3 changed files with 81 additions and 19 deletions

View file

@ -24,7 +24,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* $Id: Simulation.java,v 1.37 2009/01/08 15:42:38 fros4943 Exp $
* $Id: Simulation.java,v 1.38 2009/02/18 10:09:59 fros4943 Exp $
*/
package se.sics.cooja;
@ -74,9 +74,11 @@ public class Simulation extends Observable implements Runnable {
private long randomSeed = 123456;
private boolean randomSeedGenerated = false;
private int maxMoteStartupDelay = 1000;
private Random delayMotesRandom = new Random();
private Random randomGenerator = new Random();
// Tick observable
private class TickObservable extends Observable {
@ -276,7 +278,6 @@ public class Simulation extends Observable implements Runnable {
*/
public Simulation(GUI gui) {
myGUI = gui;
delayMotesRandom.setSeed(randomSeed);
}
/**
@ -342,6 +343,26 @@ public class Simulation extends Observable implements Runnable {
*/
public void setRandomSeed(long randomSeed) {
this.randomSeed = randomSeed;
randomGenerator.setSeed(randomSeed);
logger.info("Simulation random seed: " + randomSeed);
}
/**
* @param generated Autogenerated random seed at simulation load
*/
public void setRandomSeedGenerated(boolean generated) {
this.randomSeedGenerated = generated;
}
/**
* @return Autogenerated random seed at simulation load
*/
public boolean getRandomSeedGenerated() {
return randomSeedGenerated;
}
public Random getRandomGenerator() {
return randomGenerator;
}
/**
@ -386,7 +407,11 @@ public class Simulation extends Observable implements Runnable {
// Random seed
element = new Element("randomseed");
element.setText(Long.toString(randomSeed));
if (randomSeedGenerated) {
element.setText("generated");
} else {
element.setText(Long.toString(getRandomSeed()));
}
config.add(element);
// Max mote startup delay
@ -467,8 +492,12 @@ public class Simulation extends Observable implements Runnable {
// Random seed
if (element.getName().equals("randomseed")) {
randomSeed = Long.parseLong(element.getText());
delayMotesRandom.setSeed(randomSeed);
if (element.getText().equals("generated")) {
randomSeedGenerated = true;
setRandomSeed(new Random().nextLong());
} else {
setRandomSeed(Long.parseLong(element.getText()));
}
}
// Max mote startup delay
@ -602,7 +631,9 @@ public class Simulation extends Observable implements Runnable {
}
if (maxMoteStartupDelay > 0 && mote.getInterfaces().getClock() != null) {
mote.getInterfaces().getClock().setDrift(-delayMotesRandom.nextInt(maxMoteStartupDelay));
mote.getInterfaces().getClock().setDrift(
-randomGenerator.nextInt(maxMoteStartupDelay)
);
}
currentRadioMedium.registerMote(mote, this);