List of Topics:
Research Breakthrough Possible @S-Logix pro@slogix.in

Office Address

Social List

How to Change Mobility Model in EdgeCloudSim?

Change Mobility Model in EdgeCloudSim

Condition for Change Mobility Model in EdgeCloudSim

  • Description:
    To change the mobility model in EdgeCloudSim, customize the MobilityModel class by extending it and overriding methods like initialize() and getLocation(). The custom model can store device locations over time in a structure such as a TreeMap. The getLocation() method retrieves a device’s location based on its ID and time by looking up the closest time entry. After implementing the custom model, it should be registered in the simulation setup to replace the default mobility model, enabling the desired movement behavior for edge devices.
Sample Code
  • EdgeMobilityModelChange.java:
    package EdgeApplication;
    import java.text.DateFormat;
    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    import java.util.Date;
    import org.cloudbus.cloudsim.Log;
    import org.cloudbus.cloudsim.core.CloudSim;
    import edu.boun.edgecloudsim.core.ScenarioFactory;
    import edu.boun.edgecloudsim.core.SimManager;
    import edu.boun.edgecloudsim.core.SimSettings;
    import edu.boun.edgecloudsim.utils.Location;
    import edu.boun.edgecloudsim.utils.SimLogger;
    import edu.boun.edgecloudsim.utils.SimUtils;
    public class EdgeMobilityModelChange {
    public static void main(String[] args) {
    // Disable console output of CloudSim library
    Log.disable();
    // Enable console output and file output for this application
    SimLogger.enablePrintLog();
    int iterationNumber = 1;
    String configFile = "";
    String outputFolder = "";
    String edgeDevicesFile = "";
    String applicationsFile = "";
    if (args.length == 5) {
    configFile = args[0];
    edgeDevicesFile = args[1];
    applicationsFile = args[2];
    outputFolder = args[3];
    iterationNumber = Integer.parseInt(args[4]);
    } else {
    SimLogger.printLine("Simulation setting file, output folder, and iteration number are not provided! Using default ones...");
    configFile = "scripts/Edge_Application/config/default_config.properties";
    applicationsFile = "scripts/Edge_Application/config/applications.xml";
    edgeDevicesFile = "scripts/Edge_Application/config/edge_devices.xml";
    outputFolder = "sim_results/ite" + iterationNumber;
    }
    // Load settings from configuration file
    SimSettings SS = SimSettings.getInstance();
    if (SS.initialize(configFile, edgeDevicesFile, applicationsFile) == false) {
    SimLogger.printLine("Cannot initialize simulation settings!");
    System.exit(0);
    }
    if (SS.getFileLoggingEnabled()) {
    SimLogger.enableFileLog();
    SimUtils.cleanOutputFolder(outputFolder);
    }
    DateFormat df = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
    Date SimulationStartDate = Calendar.getInstance().getTime();
    String now = df.format(SimulationStartDate);
    SimLogger.printLine("Simulation started at " + now);
    SimLogger.printLine("----------------------------------------------------------------------");
    for (int j = SS.getMinNumOfMobileDev(); j <= SS.getMaxNumOfMobileDev(); j += SS.getMobileDevCounterSize()) {
    for (int k = 0; k < SS.getSimulationScenarios().length; k++) {
    for (int i = 0; i < SS.getOrchestratorPolicies().length; i++) {
    String simScenario = SS.getSimulationScenarios()[k];
    String orchestratorPolicy = SS.getOrchestratorPolicies()[i];
    Date ScenarioStartDate = Calendar.getInstance().getTime();
    now = df.format(ScenarioStartDate);
    SimLogger.printLine("Scenario started at " + now);
    SimLogger.printLine("Scenario: " + simScenario + " - Policy: " + orchestratorPolicy + " - #iteration: " + iterationNumber);
    SimLogger.printLine("Duration: " + SS.getSimulationTime() / 3600 + " hour(s) - Poisson: " + SS.getTaskLookUpTable()[0][2] + " - #devices: " + j);
    SimLogger.getInstance().simStarted(outputFolder, "SIMRESULT_" + simScenario + "_" + orchestratorPolicy + "_" + j + "DEVICES");
    try {
    // Initialize CloudSim
    int num_user = 2; // number of grid users
    Calendar calendar = Calendar.getInstance();
    boolean trace_flag = false; // flag to trace events
    CloudSim.init(num_user, calendar, trace_flag, 0.01);
    // Generate EdgeCloudSim Scenario Factory
    ScenarioFactory sampleFactory = new SampleScenarioFactory(j, SS.getSimulationTime(), orchestratorPolicy, simScenario);
    // Create NewMobilityModel instance
    NewMobilityModel customMobilityModel = new NewMobilityModel(j, SS.getSimulationTime());
    customMobilityModel.initialize();
    // Simulate device locations and print them for each device and time
    double simulationTime = SS.getSimulationTime();
    for (double time = 0; time < simulationTime; time += 1.0) { // 1 second increment
    for (int deviceId = 0; deviceId < j; deviceId++) {
    Location location = customMobilityModel.getLocation(deviceId, time);
    if (location != null) {
    SimLogger.printLine("Device " + deviceId + " Location at time " + time + ": " + location);
    }
    }
    }
    // Generate EdgeCloudSim Simulation Manager
    SimManager manager = new SimManager(sampleFactory, j, simScenario, orchestratorPolicy);
    // Start simulation
    manager.startSimulation();
    } catch (Exception e) {
    SimLogger.printLine("The simulation has been terminated due to an unexpected error");
    System.exit(0);
    }
    Date ScenarioEndDate = Calendar.getInstance().getTime();
    now = df.format(ScenarioEndDate);
    SimLogger.printLine("Scenario finished at " + now + ". It took " + SimUtils.getTimeDifference(ScenarioStartDate, ScenarioEndDate));
    SimLogger.printLine("----------------------------------------------------------------------");
    } // End of orchestrators loop
    } // End of scenarios loop
    } // End of mobile devices loop
    Date SimulationEndDate = Calendar.getInstance().getTime();
    now = df.format(SimulationEndDate);
    SimLogger.printLine("Simulation finished at " + now + ". It took " + SimUtils.getTimeDifference(SimulationStartDate, SimulationEndDate));
    }
    }

  • NewMobilityModel.java:
    package EdgeApplication;
    import edu.boun.edgecloudsim.core.SimSettings;
    import edu.boun.edgecloudsim.mobility.MobilityModel;
    import edu.boun.edgecloudsim.utils.Location;
    import edu.boun.edgecloudsim.utils.SimLogger;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Map;
    import java.util.TreeMap;
    public class NewMobilityModel extends MobilityModel {
    private List> treeMapArray;
    public NewMobilityModel(int numberOfMobileDevices, double simulationTime) {
    super(numberOfMobileDevices, simulationTime);
    }
    public void initialize() {
    SimLogger.printLine("Initializing custom mobility model for devices...");
    // Initialize treeMapArray with dummy data or real mobility model data
    treeMapArray = new ArrayList<>();
    for (int i = 0; i < numberOfMobileDevices; i++) {
    TreeMap deviceLocations = new TreeMap<>();
    for (double time = 0; time <= SimSettings.getInstance().getSimulationTime(); time += 1.0) { // 1 second increment
    // Simulate a random location for each device at each time step
    double x = Math.random() * 100; // Random x-coordinate
    double y = Math.random() * 100; // Random y-coordinate
    Location location = new Location();
    deviceLocations.put(time, location);
    }
    treeMapArray.add(deviceLocations);
    }
    }
    public Location getLocation(int deviceId, double time) {
    if (deviceId < 0 || deviceId >= treeMapArray.size()) {
    SimLogger.printLine("Invalid device ID: " + deviceId);
    return null;
    }
    TreeMap treeMap = treeMapArray.get(deviceId);
    Map.Entry entry = treeMap.floorEntry(time);
    if (entry == null) {
    SimLogger.printLine("No location found for device '" + deviceId + "' at time " + time);
    return null;
    }
    return entry.getValue();
    }
    }
ScreenShots
  • Mobility Model in EdgeCloudSim