File RandomMigrate.java¶
File List > behaviour > migration > RandomMigrate.java
Go to the documentation of this file
package skydata.behaviour.migration;
import java.util.Random;
import java.util.Set;
import jade.core.behaviours.TickerBehaviour;
import skydata.internal.agents.SKAgent;
import skydata.internal.agents.SKD;
import skydata.internal.behaviours.SKAgentBehaviour;
import skydata.internal.message.SKAID;
public class RandomMigrate extends SKAgentBehaviour {
final private Random rand;
public RandomMigrate(SKAgent agent) {
super(agent);
rand = new Random();
}
public SKAID getRandom(Set<SKAID> harbours) {
SKD agent = (SKD) this.agent;
int myI = 0;
for (SKAID element : harbours) {
if (element.equals(agent.getSKAID())) {
break;
} else {
myI++;
}
}
int randomIndex = rand.nextInt(harbours.size());
while (randomIndex == myI) {
randomIndex = rand.nextInt(harbours.size());
}
int i = 0;
for (SKAID element : harbours) {
if (i == randomIndex) {
return element;
}
i++;
}
return null;
}
@Override
public void action() {
SKD agent = (SKD) this.agent;
int delay = (Integer) (agent.args.getOrDefault("timer_RandomMigrate", 3000));
Set<SKAID> harbours = agent.connectedHarbours();
TickerBehaviour tickerBehaviour = new TickerBehaviour(agent, delay) {
@Override
protected void onTick() {
if (agent.canMigrate()) {
SKAID harbour = getRandom(harbours);
try {
agent.migrate(harbour.toAID());
} catch (Exception e) {
e.printStackTrace();
}
}
// this.reset(rand.nextInt(delay/2) + delay/2);
}
};
agent.addBehaviour(tickerBehaviour);
}
}