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:
parent
07c50cc200
commit
8e9686e01d
3 changed files with 81 additions and 19 deletions
|
@ -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);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue