100 lines
2.5 KiB
Java
100 lines
2.5 KiB
Java
|
|
import java.io.IOException;
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
import java.util.Random;
|
|
import java.util.logging.LogManager;
|
|
|
|
import analysis.NetworkDumper;
|
|
|
|
import node.Node;
|
|
|
|
public class RandomGenerator2 {
|
|
|
|
private int ROUNDS = 100;
|
|
|
|
public static double BIRTH_RATE = 0.80;
|
|
|
|
public static List<Node> nodes = new ArrayList<Node>();
|
|
public static Random gen = new Random();
|
|
|
|
private int maxNodes = 0;
|
|
private int numSpawned = 0;
|
|
private int numKilled = 0;
|
|
|
|
private Node firstNode;
|
|
|
|
public RandomGenerator2() {
|
|
firstNode = new Node();
|
|
nodes.add(firstNode);
|
|
new NetworkDumper(firstNode);
|
|
|
|
for (int i = 0; i < ROUNDS - 1; i++) {
|
|
|
|
if (gen.nextDouble() > 1 - BIRTH_RATE) {
|
|
spawn();
|
|
} else {
|
|
kill();
|
|
}
|
|
|
|
try {
|
|
Thread.sleep(10);
|
|
} catch (InterruptedException e) {
|
|
}
|
|
}
|
|
|
|
System.out.println("Executed " + ROUNDS
|
|
+ " rounds (with a spawn rate of " + BIRTH_RATE + "). "
|
|
+ numSpawned + " nodes were spawned, " + numKilled
|
|
+ " nodes were killed. Currently " + "there are "
|
|
+ nodes.size() + " nodes remaining. At one point we had"
|
|
+ " a maximum of " + maxNodes + " nodes.");
|
|
}
|
|
|
|
private void spawn() {
|
|
try {
|
|
if (nodes.isEmpty()) {
|
|
nodes.add(new Node());
|
|
} else {
|
|
Node randomNode = getRandomNode();
|
|
Node newNode = randomNode.spawn();
|
|
nodes.add(newNode);
|
|
}
|
|
numSpawned++;
|
|
if (maxNodes < nodes.size()) {
|
|
maxNodes = nodes.size();
|
|
}
|
|
} catch (IOException e) {
|
|
}
|
|
}
|
|
|
|
private void kill() {
|
|
if (nodes.isEmpty())
|
|
return;
|
|
Node randomNode;
|
|
while ((randomNode = getRandomNode()) == firstNode) {
|
|
// Dont kill first node
|
|
}
|
|
randomNode.leave();
|
|
numKilled++;
|
|
}
|
|
|
|
private Node getRandomNode() {
|
|
return nodes.get(gen.nextInt(nodes.size()));
|
|
}
|
|
|
|
public static void main(String args[]) {
|
|
System.setProperty("java.util.logging.config.file",
|
|
"logging.properties");
|
|
|
|
try {
|
|
LogManager.getLogManager().readConfiguration();
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
|
|
new RandomGenerator2();
|
|
}
|
|
|
|
}
|