Skip to content

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);

    }

}