Sample application 5 used in IEEE Transactions on Intelligent Transportation Systems is added.

This commit is contained in:
Cagatay Sonmez
2020-10-30 12:57:07 +03:00
parent 08341c3681
commit 6660de75b2
62 changed files with 6084 additions and 5 deletions

1
scripts/sample_app5/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
output

View File

@ -0,0 +1 @@
*.class

View File

@ -0,0 +1,23 @@
# Configure Simulation Settings
Firstly, edit config.json file in a way to declare the configuration of the simulation process used to collect training data
# Preparing Training Data
Invoke following command to convert collected data format for weka models
```
./generate_training_data.sh
```
This command creates *.arff files under the simulation results folder
# Generating Classification and Regression Models
Invoke following command to generate related weka models
```
./generate_weka_models.sh
```
This script creates weka model files under the simulation results folder. When you are done with training, you can move these files to ../config/weka/ folder

View File

@ -0,0 +1,208 @@
import java.io.FileReader;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.concurrent.TimeUnit;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import weka.classifiers.Evaluation;
import weka.classifiers.bayes.NaiveBayes;
import weka.classifiers.functions.LinearRegression;
import weka.classifiers.functions.MultilayerPerceptron;
import weka.classifiers.functions.SMO;
import weka.classifiers.functions.SMOreg;
import weka.core.Instances;
import weka.core.converters.ConverterUtils.DataSource;
public class WekaModelCreator {
private static final String[] targets = {"edge","cloud_rsu","cloud_gsm"};
public static void main(String[] args) throws Exception {
String dataPath = "";
String classifier = "";
String regressor = "";
JSONParser parser = new JSONParser();
try
{
Object object = parser.parse(new FileReader(args[0]));
//convert Object to JSONObject
JSONObject jsonObject = (JSONObject)object;
//Reading the String
dataPath = (String) jsonObject.get("sim_result_folder");
classifier = (String) jsonObject.get("classifier");
regressor = (String) jsonObject.get("regressor");
}
catch(Exception e)
{
e.printStackTrace();
System.exit(1);
}
System.out.println("######### TRAINING FOR " + dataPath + " #########");
for(int i=0; i<targets.length; i++) {
handleClassify("train", targets[i], classifier, dataPath);
handleRegression("train", targets[i], regressor, dataPath);
}
System.out.println("######### EVALUATION FOR " + dataPath + " #########");
for(int i=0; i<targets.length; i++) {
handleClassify("evaluate", targets[i], classifier, dataPath);
handleRegression("evaluate", targets[i], regressor, dataPath);
}
}
public static void handleRegression(String action, String target, String method, String dataFolder) throws Exception {
if(action.equals("train")) {
DateFormat df = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
Date startDate = Calendar.getInstance().getTime();
String now = df.format(startDate);
System.out.println("Training " + method + " for " + target + " started at " + now);
DataSource edgeRegressionSource = new DataSource(dataFolder + "/" + target + "_regression_train.arff");
Instances edgeRegressionDataset = edgeRegressionSource.getDataSet();
edgeRegressionDataset.setClassIndex(edgeRegressionDataset.numAttributes()-1);
if(method.equals("LinearRegression")) {
LinearRegression lr = new LinearRegression();
lr.buildClassifier(edgeRegressionDataset);
weka.core.SerializationHelper.write(dataFolder + "/lr_" + target + ".model", lr);
}
else if(method.equals("SMOreg")) {
SMOreg smoreg = new SMOreg();
smoreg.buildClassifier(edgeRegressionDataset);
weka.core.SerializationHelper.write(dataFolder + "/smoreg_" + target + ".model", smoreg);
}
Date endDate = Calendar.getInstance().getTime();
now = df.format(endDate);
System.out.println("Training " + method + " for " + target + " fisished at " + now + ". It took " + getTimeDifference(startDate, endDate));
}
else if(action.equals("evaluate")) {
System.out.println("Evaluation " + method + " for " + target + " started");
DataSource edgeRegressionSource = new DataSource(dataFolder + "/" + target + "_regression_test.arff");
Instances edgeRegressionDataset = edgeRegressionSource.getDataSet();
edgeRegressionDataset.setClassIndex(edgeRegressionDataset.numAttributes()-1);
if(method.equals("LinearRegression")) {
LinearRegression lr = (LinearRegression) weka.core.SerializationHelper.read(dataFolder + "/lr_" + target + ".model");
Evaluation lrEval = new Evaluation(edgeRegressionDataset);
lrEval.evaluateModel(lr, edgeRegressionDataset);
System.out.println("LinearRegression");
System.out.println(lrEval.toSummaryString());
}
else if(method.equals("SMOreg")) {
SMOreg smoreg = (SMOreg) weka.core.SerializationHelper.read(dataFolder + "/smoreg_" + target + ".model");
Evaluation svmregEval = new Evaluation(edgeRegressionDataset);
svmregEval.evaluateModel(smoreg, edgeRegressionDataset);
System.out.println("SMOreg");
System.out.println(svmregEval.toSummaryString());
}
System.out.println("Evaluation " + method + " for " + target + " fisished");
System.out.println("");
}
}
public static void handleClassify(String action, String target, String method, String dataFolder) throws Exception {
if(action.equals("train")) {
DateFormat df = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
Date startDate = Calendar.getInstance().getTime();
String now = df.format(startDate);
System.out.println("Training " + method + " for " + target + " started at " + now);
DataSource classifierSource = new DataSource(dataFolder + "/" + target + "_classifier_train.arff");
Instances classifierDataset = classifierSource.getDataSet();
classifierDataset.setClassIndex(classifierDataset.numAttributes()-1);
if(method.equals("NaiveBayes")) {
NaiveBayes nb = new NaiveBayes();
nb.buildClassifier(classifierDataset);
weka.core.SerializationHelper.write(dataFolder + "/nb_" + target + ".model", nb);
}
else if(method.equals("SMO")) {
SMO smo = new SMO();
smo.buildClassifier(classifierDataset);
weka.core.SerializationHelper.write(dataFolder + "/smo_" + target + ".model", smo);
}
else if(method.equals("MultilayerPerceptron")) {
MultilayerPerceptron mlp = new MultilayerPerceptron();
mlp.setLearningRate(0.1);
//mlp.setMomentum(0.2);
mlp.setTrainingTime(1000);
//mlp.setHiddenLayers("3");
mlp.buildClassifier(classifierDataset);
weka.core.SerializationHelper.write(dataFolder + "/mlp_" + target + ".model", mlp);
}
Date endDate = Calendar.getInstance().getTime();
now = df.format(endDate);
System.out.println("Training " + method + " for " + target + " fisished at " + now + ". It took " + getTimeDifference(startDate, endDate));
}
else if(action.equals("evaluate")) {
System.out.println("Evaluation " + method + " for " + target + " started");
DataSource edgeClassifierSource = new DataSource(dataFolder + "/" + target + "_classifier_test.arff");
Instances classifierDataset = edgeClassifierSource.getDataSet();
classifierDataset.setClassIndex(classifierDataset.numAttributes()-1);
if(method.equals("NaiveBayes")) {
NaiveBayes nb = (NaiveBayes) weka.core.SerializationHelper.read(dataFolder + "/nb_" + target + ".model");
Evaluation nbEval = new Evaluation(classifierDataset);
nbEval.evaluateModel(nb, classifierDataset);
System.out.println(nbEval.toSummaryString());
System.out.println(nbEval.toMatrixString());
System.out.println(nbEval.toClassDetailsString());
}
else if(method.equals("SMO")) {
SMO smo = (SMO) weka.core.SerializationHelper.read(dataFolder + "/smo_" + target + ".model");
Evaluation smoEval = new Evaluation(classifierDataset);
smoEval.evaluateModel(smo, classifierDataset);
System.out.println(smoEval.toSummaryString());
System.out.println(smoEval.toMatrixString());
System.out.println(smoEval.toClassDetailsString());
}
else if(method.equals("MultilayerPerceptron")) {
MultilayerPerceptron mlp = (MultilayerPerceptron) weka.core.SerializationHelper.read(dataFolder + "/mlp_" + target + ".model");
Evaluation mlpEval = new Evaluation(classifierDataset);
mlpEval.evaluateModel(mlp, classifierDataset);
System.out.println(mlpEval.toSummaryString());
System.out.println(mlpEval.toMatrixString());
System.out.println(mlpEval.toClassDetailsString());
}
System.out.println("Evaluation " + method + " for " + target + " fisished");
System.out.println("");
}
}
private static String getTimeDifference(Date startDate, Date endDate){
String result = "";
long duration = endDate.getTime() - startDate.getTime();
long diffInMilli = TimeUnit.MILLISECONDS.toMillis(duration);
long diffInSeconds = TimeUnit.MILLISECONDS.toSeconds(duration);
long diffInMinutes = TimeUnit.MILLISECONDS.toMinutes(duration);
long diffInHours = TimeUnit.MILLISECONDS.toHours(duration);
long diffInDays = TimeUnit.MILLISECONDS.toDays(duration);
if(diffInDays>0)
result += diffInDays + ((diffInDays>1 == true) ? " Days " : " Day ");
if(diffInHours>0)
result += diffInHours % 24 + ((diffInHours>1 == true) ? " Hours " : " Hour ");
if(diffInMinutes>0)
result += diffInMinutes % 60 + ((diffInMinutes>1 == true) ? " Minutes " : " Minute ");
if(diffInSeconds>0)
result += diffInSeconds % 60 + ((diffInSeconds>1 == true) ? " Seconds" : " Second");
if(diffInMilli>0 && result.isEmpty())
result += diffInMilli + ((diffInMilli>1 == true) ? " Milli Seconds" : " Milli Second");
return result;
}
}

View File

@ -0,0 +1,10 @@
{
"sim_result_folder": "/home/cagatay/Projects/git-repos/EdgeCloudSim/scripts/sample_app5/output/18-10-2019_21-16/default_config",
"num_iterations": 10,
"train_data_ratio": 80,
"min_vehicle": 100,
"max_vehicle": 2200,
"vehicle_step_size": 100,
"classifier": "MultilayerPerceptron",
"regressor": "LinearRegression"
}

View File

@ -0,0 +1,133 @@
import pandas as pd
import json
import sys
if len (sys.argv) != 5:
print('invalid arguments. Usage:')
print('python data_conventor.py config.json [edge|cloud_rsu|cloud_gsm] [classifier|regression] [train|test]')
sys.exit(1)
with open(sys.argv[1]) as json_data_file:
data = json.load(json_data_file)
target = sys.argv[2]
method = sys.argv[3]
datatype = sys.argv[4]
print("conversion started with args " + target + ", " + method + ", " + datatype)
sim_result_folder = data["sim_result_folder"]
num_iterations = data["num_iterations"]
train_data_ratio = data["train_data_ratio"]
min_vehicle = data["min_vehicle"]
max_vehicle = data["max_vehicle"]
vehicle_step_size = data["vehicle_step_size"]
def getDecisionColumnName(target):
if target == "edge":
COLUMN_NAME = "EDGE"
elif target == "cloud_rsu":
COLUMN_NAME = "CLOUD_VIA_RSU"
elif target == "cloud_gsm":
COLUMN_NAME = "CLOUD_VIA_GSM"
return COLUMN_NAME
def getClassifierColumns(target):
if target == "edge":
result = ["NumOffloadedTask", "TaskLength", "WLANUploadDelay", "WLANDownloadDelay", "AvgEdgeUtilization", "Result"]
elif target == "cloud_rsu":
result = ["NumOffloadedTask", "WANUploadDelay", "WANDownloadDelay", "Result"]
elif target == "cloud_gsm":
result = ["NumOffloadedTask", "GSMUploadDelay", "GSMDownloadDelay", "Result"]
return result
def getRegressionColumns(target):
if target == "edge":
result = ["TaskLength", "AvgEdgeUtilization", "ServiceTime"]
elif target == "cloud_rsu":
result = ["TaskLength", "WANUploadDelay", "WANDownloadDelay", "ServiceTime"]
elif target == "cloud_gsm":
result = ["TaskLength", "GSMUploadDelay", "GSMDownloadDelay", "ServiceTime"]
return result
def znorm(column):
column = (column - column.mean()) / column.std()
return column
data_set = []
testDataStartIndex = (train_data_ratio * num_iterations) / 100
for ite in range(num_iterations):
for vehicle in range(min_vehicle, max_vehicle+1, vehicle_step_size):
if (datatype == "train" and ite < testDataStartIndex) or (datatype == "test" and ite >= testDataStartIndex):
file_name = sim_result_folder + "/ite" + str(ite + 1) + "/" + str(vehicle) + "_learnerOutputFile.cvs"
df = [pd.read_csv(file_name, na_values = "?", comment='\t', sep=",")]
df[0]['VehicleCount'] = vehicle
#print(file_name)
data_set += df
data_set = pd.concat(data_set, ignore_index=True)
data_set = data_set[data_set['Decision'] == getDecisionColumnName(target)]
if method == "classifier":
targetColumns = getClassifierColumns(target)
else:
targetColumns= getRegressionColumns(target)
if datatype == "train":
print ("##############################################################")
print ("Stats for " + target + " - " + method)
print ("Please use relevant information from below table in java side:")
train_stats = data_set[targetColumns].describe()
train_stats = train_stats.transpose()
print(train_stats)
print ("##############################################################")
#print("balancing " + target + " for " + method)
#BALANCE DATA SET
if method == "classifier":
df0 = data_set[data_set['Result']=="fail"]
df1 = data_set[data_set['Result']=="success"]
#size = min(len(df0[df0['VehicleCount']==max_vehicle]), len(df1[df1['VehicleCount']==min_vehicle]))
size = len(df0[df0['VehicleCount']==max_vehicle]) // 2
df1 = df1.groupby('VehicleCount').apply(lambda x: x if len(x) < size else x.sample(size))
df0 = df0.groupby('VehicleCount').apply(lambda x: x if len(x) < size else x.sample(size))
data_set = pd.concat([df0, df1], ignore_index=True)
else:
data_set = data_set[data_set['Result'] == 'success']
#size = min(len(data_set[data_set['VehicleCount']==min_vehicle]), len(data_set[data_set['VehicleCount']==max_vehicle]))
size = len(data_set[data_set['VehicleCount']==max_vehicle]) // 3
data_set = data_set.groupby('VehicleCount').apply(lambda x: x if len(x.index) < size else x.sample(size))
#EXTRACT RELATED ATTRIBUTES
df = pd.DataFrame(columns=targetColumns)
for column in targetColumns:
if column == 'Result' or column == 'ServiceTime':
df[column] = data_set[column]
else:
df[column] = znorm(data_set[column])
f = open(sim_result_folder + "/" + target + "_" + method + "_" + datatype + ".arff", 'w')
f.write('@relation ' + target + '\n\n')
for column in targetColumns:
if column == 'Result':
f.write('@attribute class {fail,success}\n')
else:
f.write('@attribute ' + column + ' REAL\n')
f.write('\n@data\n')
df.to_csv(f, header=False, index=False)
f.close()
print ("##############################################################")
print ("Operation completed!")
print (".arff file is generated for weka.")
print ("##############################################################")

View File

@ -0,0 +1,14 @@
#!/bin/sh
python data_convertor.py config.json edge classifier train
python data_convertor.py config.json edge classifier test
python data_convertor.py config.json edge regression train
python data_convertor.py config.json edge regression test
python data_convertor.py config.json cloud_rsu classifier train
python data_convertor.py config.json cloud_rsu classifier test
python data_convertor.py config.json cloud_rsu regression train
python data_convertor.py config.json cloud_rsu regression test
python data_convertor.py config.json cloud_gsm classifier train
python data_convertor.py config.json cloud_gsm classifier test
python data_convertor.py config.json cloud_gsm regression train
python data_convertor.py config.json cloud_gsm regression test

View File

@ -0,0 +1,4 @@
#!/bin/sh
javac -classpath "./json-simple-1.1.1.jar:../../../lib/weka.jar:../../../lib/mtj-1.0.4.jar" WekaModelCreator.java
java -classpath ".:./json-simple-1.1.1.jar:../../../lib/weka.jar:../../../lib/mtj-1.0.4.jar" WekaModelCreator config.json

Binary file not shown.

View File

@ -0,0 +1,4 @@
#!/bin/sh
rm -rf ../../bin
mkdir ../../bin
javac -classpath "../../lib/cloudsim-4.0.jar:../../lib/commons-math3-3.6.1.jar:../../lib/colt.jar:../../lib/weka.jar:../../lib/mtj-1.0.4.jar" -sourcepath ../../src ../../src/edu/boun/edgecloudsim/applications/vec_ai_app/VehicularMainApp.java -d ../../bin

View File

@ -0,0 +1,51 @@
<?xml version="1.0"?>
<applications>
<application name="TRAFFIC_MANAGEMENT">
<usage_percentage>30</usage_percentage>
<prob_cloud_selection>0</prob_cloud_selection>
<delay_sensitivity>0.5</delay_sensitivity>
<max_delay_requirement>0.5</max_delay_requirement>
<poisson_interarrival>3</poisson_interarrival>
<active_period>3600</active_period>
<idle_period>1</idle_period>
<data_upload>20</data_upload>
<data_download>20</data_download>
<task_length>3000</task_length>
<required_core>1</required_core>
<vm_utilization_on_edge>6</vm_utilization_on_edge>
<vm_utilization_on_cloud>1.2</vm_utilization_on_cloud>
<vm_utilization_on_mobile>0</vm_utilization_on_mobile>
</application>
<application name="DANGER_ASSESSMENT">
<usage_percentage>35</usage_percentage>
<prob_cloud_selection>0</prob_cloud_selection>
<delay_sensitivity>0.8</delay_sensitivity>
<max_delay_requirement>1</max_delay_requirement>
<poisson_interarrival>5</poisson_interarrival>
<active_period>3600</active_period>
<idle_period>1</idle_period>
<data_upload>40</data_upload>
<data_download>20</data_download>
<task_length>10000</task_length>
<required_core>1</required_core>
<vm_utilization_on_edge>20</vm_utilization_on_edge>
<vm_utilization_on_cloud>4</vm_utilization_on_cloud>
<vm_utilization_on_mobile>0</vm_utilization_on_mobile>
</application>
<application name="INFOTAINMENT">
<usage_percentage>35</usage_percentage>
<prob_cloud_selection>0</prob_cloud_selection>
<delay_sensitivity>0.25</delay_sensitivity>
<max_delay_requirement>1.5</max_delay_requirement>
<poisson_interarrival>15</poisson_interarrival>
<active_period>3600</active_period>
<idle_period>1</idle_period>
<data_upload>20</data_upload>
<data_download>80</data_download>
<task_length>20000</task_length>
<required_core>1</required_core>
<vm_utilization_on_edge>40</vm_utilization_on_edge>
<vm_utilization_on_cloud>8</vm_utilization_on_cloud>
<vm_utilization_on_mobile>0</vm_utilization_on_mobile>
</application>
</applications>

View File

@ -0,0 +1,53 @@
#default config file
simulation_time=60
warm_up_period=3
file_log_enabled=true
deep_file_log_enabled=false
#logging is disabled if it is 0
vm_load_check_interval=0.025
#logging is disabled if it is 0
location_check_interval=0.005
#logging is disabled if it is 0
ap_delay_check_interval=0.1
min_number_of_mobile_devices=100
max_number_of_mobile_devices=1800
mobile_device_counter_size=100
wan_propogation_delay=0.15
gsm_propogation_delay=0.16
lan_internal_delay=0.01
wlan_bandwidth=10
man_bandwidth=1000
wan_bandwidth=50
gsm_bandwidth=20
#all the host on cloud runs on a single datacenter
number_of_host_on_cloud_datacenter=1
number_of_vm_on_cloud_host=20
core_for_cloud_vm=2
mips_for_cloud_vm=75000
ram_for_cloud_vm=8000
storage_for_cloud_vm=125000
#each mobile device has one host which serves one VM
#all the host runs on a single datacenter due to the out of memory (oom) issue
core_for_mobile_vm=1
mips_for_mobile_vm=1000
ram_for_mobile_vm=1800
storage_for_mobile_vm=32000
#use ',' for multiple values
#orchestrator_policies=AI_TRAINER,RANDOM,PREDICTIVE,MAB,AI_BASED
orchestrator_policies=RANDOM,PREDICTIVE,GAME_THEORY,MAB,AI_BASED
#use ',' for multiple values
simulation_scenarios=ITS_SCENARIO
#mean waiting time in seconds
attractiveness_L1_mean_waiting_time=480
attractiveness_L2_mean_waiting_time=240
attractiveness_L3_mean_waiting_time=120

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,60 @@
%--------------------------------------------------------------
%description
% returns a value according to the given argumentssss
%--------------------------------------------------------------
function [ret_val] = getConfiguration(argType)
if(argType == 1)
ret_val = 'D:\sim_results';
elseif(argType == 2)
ret_val = 60; %simulation time (in minutes)
elseif(argType == 3)
ret_val = 2; %Number of iterations
elseif(argType == 4)
ret_val = 2; %x tick interval for number of mobile devices
elseif(argType == 5)
ret_val = {'AI_BASED','MAB','GAME_THEORY','PREDICTIVE','RANDOM'};
elseif(argType == 6)
ret_val = {'ML-based','MAB-based','Game-based','SMA-based','random'};
elseif(argType == 7)
ret_val=[6 3 11 11]; %position of figure
%ret_val=[6 3 9 9]; %position of figure
elseif(argType == 8)
ret_val = [13 12 12]; %font fize for x/y label, lengend and x/y axis
elseif(argType == 9)
ret_val = 'Number of Vehicles'; %Common text for x axis
elseif(argType == 10)
ret_val = 100; %min number of mobile device
elseif(argType == 11)
ret_val = 100; %step size of mobile device count
elseif(argType == 12)
ret_val = 1800; %max number of mobile device
elseif(argType == 17)
ret_val = 0; %return 1 if you want to add 10^n text at x axis
elseif(argType == 18)
ret_val = 1; %return 1 if you want to save figure as pdf
elseif(argType == 19)
ret_val = 1; %return 1 if you want to plot errors
elseif(argType == 20)
ret_val=0; %return 1 if graph is plotted colerful
elseif(argType == 21)
ret_val=[0.55 0 0]; %color of first line
elseif(argType == 22)
ret_val=[0 0.15 0.6]; %color of second line
elseif(argType == 23)
ret_val=[0 0.23 0]; %color of third line
elseif(argType == 24)
ret_val=[0.6 0 0.6]; %color of fourth line
elseif(argType == 25)
ret_val=[0.08 0.08 0.08]; %color of fifth line
elseif(argType == 26)
ret_val=[0 0.8 0.8]; %color of sixth line
elseif(argType == 27)
ret_val=[0.8 0.4 0]; %color of seventh line
elseif(argType == 28)
ret_val=[0.8 0.8 0]; %color of eighth line
elseif(argType == 40)
ret_val={'-k*','-ko','-ks','-kv','-kp','-kd','-kx','-kh'}; %line style (marker) of the colerless line
elseif(argType == 50)
ret_val={'-k*','-ko','-ks','-kv','-kp','-kd','-kx','-kh'}; %line style (marker) of the colerfull line
end
end

View File

@ -0,0 +1,113 @@
function [] = plotApDelay()
folderPath = getConfiguration(1);
numOfSimulations = getConfiguration(3);
stepOfxAxis = getConfiguration(4);
startOfMobileDeviceLoop = getConfiguration(10);
stepOfMobileDeviceLoop = getConfiguration(11);
endOfMobileDeviceLoop = getConfiguration(12);
numOfMobileDevices = (endOfMobileDeviceLoop - startOfMobileDeviceLoop)/stepOfMobileDeviceLoop + 1;
placeTypes = {'AP 1 (60 km/h)','Ap 4 (40 km/h)','AP 11 (20 km/h)'};
results = zeros(size(placeTypes,2),numOfMobileDevices);
for s=1:numOfSimulations
indexCounter = 1;
for i=startOfMobileDeviceLoop:stepOfMobileDeviceLoop:endOfMobileDeviceLoop
try
filePath1 = strcat(folderPath,'\ite',int2str(s),'\SIMRESULT_ITS_SCENARIO_AI_BASED_',int2str(i),'DEVICES_AP_UPLOAD_DELAY.log');
filePath2 = strcat(folderPath,'\ite',int2str(s),'\SIMRESULT_ITS_SCENARIO_AI_BASED_',int2str(i),'DEVICES_AP_DOWNLOAD_DELAY.log');
readData1 = dlmread(filePath1,';',60,0);
readData2 = dlmread(filePath2,';',60,0);
for j=1:size(placeTypes,2)
results(j,indexCounter) = results(j,indexCounter) + mean(readData1(:,j+1)) + mean(readData2(:,j+1));
end
catch err
error(err)
end
indexCounter = indexCounter + 1;
end
end
results = results/numOfSimulations;
types = zeros(1,numOfMobileDevices);
for i=1:numOfMobileDevices
types(i)=startOfMobileDeviceLoop+((i-1)*stepOfMobileDeviceLoop);
end
hFig = figure;
pos=getConfiguration(7);
fontSizeArray = getConfiguration(8);
set(hFig, 'Units','centimeters');
set(hFig, 'Position',pos);
set(0,'DefaultAxesFontName','Times New Roman');
set(0,'DefaultTextFontName','Times New Roman');
set(0,'DefaultAxesFontSize',fontSizeArray(3));
if(getConfiguration(20) == 1)
for i=stepOfxAxis:stepOfxAxis:numOfMobileDevices
xIndex=startOfMobileDeviceLoop+((i-1)*stepOfMobileDeviceLoop);
markers = {':k*',':ko',':ks',':kv'};
for j=1:size(placeTypes,2)
plot(xIndex, results(j,i),char(markers(j)),'MarkerFaceColor',getConfiguration(20+j),'color',getConfiguration(20+j));
hold on;
end
end
for j=1:size(placeTypes,2)
plot(types, results(j,:),':k','color',getConfiguration(20+j),'LineWidth',1.5);
hold on;
end
set(gca,'color','none');
else
markers = {'-k*','-ko','-ks','-kv'};
for j=1:size(placeTypes,2)
plot(types, results(j,:),char(markers(j)),'MarkerFaceColor','w','LineWidth',1.4);
hold on;
end
%set(gcf, 'Position',getConfiguration(28));
end
lgnd = legend(placeTypes,'Location','NorthWest');
if(getConfiguration(20) == 1)
set(lgnd,'color','none');
end
if(getConfiguration(20) == 1)
set(lgnd,'color','none');
end
if(getConfiguration(17) == 0)
manualXAxisCoefficent = 1;
end
hold off;
axis square
xlabel(getConfiguration(9));
set(gca,'XTick', startOfMobileDeviceLoop + stepOfMobileDeviceLoop:(stepOfxAxis*stepOfMobileDeviceLoop):endOfMobileDeviceLoop);
set(gca,'XTickLabel', startOfMobileDeviceLoop + stepOfMobileDeviceLoop/manualXAxisCoefficent:(stepOfxAxis*stepOfMobileDeviceLoop)/manualXAxisCoefficent:endOfMobileDeviceLoop/manualXAxisCoefficent);
ylabel('Average Network Delay (sec)');
set(gca,'XLim',[startOfMobileDeviceLoop-5 endOfMobileDeviceLoop+5]);
if(getConfiguration(17) == 1)
xlim = get(gca,'XLim');
ylim = get(gca,'YLim');
text(1.02 * xlim(2), 0.165 * ylim(2), 'x 10^2');
end
set(get(gca,'Xlabel'),'FontSize',fontSizeArray(1));
set(get(gca,'Ylabel'),'FontSize',fontSizeArray(1));
set(lgnd,'FontSize',fontSizeArray(2));
if(getConfiguration(18) == 1)
set(hFig, 'PaperUnits', 'centimeters');
set(hFig, 'PaperPositionMode', 'manual');
set(hFig, 'PaperPosition',[0 0 pos(3) pos(4)]);
set(gcf, 'PaperSize', [pos(3) pos(4)]); %Keep the same paper size
filename = strcat(folderPath,'\apDelay');
saveas(gcf, filename, 'pdf');
end
end

View File

@ -0,0 +1,8 @@
function [] = plotAvgFailedTask()
plotGenericLine(1, 2, 'Average Failed Tasks (%)', 'ALL_APPS', 'NorthWest', 1);
plotGenericLine(1, 2, 'Failed Tasks for Danger Assessment App (%)', 'DANGER_ASSESSMENT', 'NorthWest', 1);
plotGenericLine(1, 2, 'Failed Tasks for Navigation App (%)', 'TRAFFIC_MANAGEMENT', 'NorthWest', 1);
plotGenericLine(1, 2, 'Failed Tasks for Infotainment App (%)', 'INFOTAINMENT', 'NorthWest', 1);
end

View File

@ -0,0 +1,11 @@
function [] = plotAvgNetworkDelay()
plotGenericLine(1, 7, 'Average Network Delay (sec)', 'ALL_APPS', 'NorthWest', 0);
plotGenericLine(5, 1, 'Average WLAN Delay (sec)', 'ALL_APPS', 'NorthWest', 0);
plotGenericLine(5, 2, 'Average MAN Delay (sec)', 'ALL_APPS', 'NorthWest', 0);
plotGenericLine(5, 3, 'Average WAN Delay (sec)', 'ALL_APPS', 'NorthWest', 0, 1, 1);
plotGenericLine(5, 4, 'Average GSM Delay (sec)', 'ALL_APPS', 'NorthWest', 0, 1, 1, 0, [4, 1700]);
end

View File

@ -0,0 +1,9 @@
function [] = plotAvgProcessingTime()
plotGenericLine(1, 6, 'Average Processing Time (sec)', 'ALL_APPS', 'NorthWest', 0);
plotGenericLine(2, 6, 'Processing Time on RSU (sec)', 'ALL_APPS', 'NorthWest', 0);
plotGenericLine(3, 6, 'Processing Time on Cloud (sec)', 'ALL_APPS', 'NorthWest', 0);
end

View File

@ -0,0 +1,8 @@
function [] = plotAvgQoE()
plotGenericLine(1, 13, 'Average QoE (%)', 'ALL_APPS', 'SouthWest', 0);
plotGenericLine(1, 13, 'QoE for Danger Assessment App (%)', 'DANGER_ASSESSMENT', 'SouthWest', 0);
plotGenericLine(1, 13, 'QoE for Navigation App (%)', 'TRAFFIC_MANAGEMENT', 'SouthWest', 0);
plotGenericLine(1, 13, 'QoE for Infotainment App (%)', 'INFOTAINMENT', 'SouthWest', 0);
end

View File

@ -0,0 +1,9 @@
function [] = plotAvgServiceTime()
plotGenericLine(1, 5, 'Average Service Time (sec)', 'ALL_APPS', 'NorthWest', 0);
plotGenericLine(2, 5, 'Service Time on RSU (sec)', 'ALL_APPS', 'NorthWest', 0);
plotGenericLine(3, 5, 'Service Time on Cloud (sec)', 'ALL_APPS', 'NorthWest', 0);
end

View File

@ -0,0 +1,7 @@
function [] = plotAvgVmUtilization()
plotGenericLine(2, 8, 'Average VM Utilization of RSU (%)', 'ALL_APPS', 'NorthWest', 0);
plotGenericLine(3, 8, 'Average VM Utilization of Cloud (%)', 'ALL_APPS', 'NorthWest', 0);
end

View File

@ -0,0 +1,91 @@
function [] = plotDelayReasonAsBar(isEdge)
folderPath = getConfiguration(1);
numOfSimulations = getConfiguration(3);
stepOfxAxis = 3;%getConfiguration(4);
startOfMobileDeviceLoop = getConfiguration(10);
stepOfMobileDeviceLoop = getConfiguration(11);
endOfMobileDeviceLoop = getConfiguration(12);
numOfMobileDevices = (endOfMobileDeviceLoop - startOfMobileDeviceLoop)/stepOfMobileDeviceLoop + 1;
all_results = zeros(numOfSimulations, numOfMobileDevices, 2);
if ~exist('isEdge','var')
isEdge = 1;
end
for s=1:numOfSimulations
for j=1:numOfMobileDevices
try
mobileDeviceNumber = startOfMobileDeviceLoop + stepOfMobileDeviceLoop * (j-1);
filePath = strcat(folderPath,'\ite',int2str(s),'\SIMRESULT_ITS_SCENARIO_AI_BASED_',int2str(mobileDeviceNumber),'DEVICES_ALL_APPS_GENERIC.log');
readData = dlmread(filePath,';',1,0);
value1 = 0;
value2 = 0;
if(isEdge == 1)
value1 = readData(2,5);
value2 = readData(2,6);
else
value1 = readData(3,5);
value2 = readData(3,6);
end
all_results(s,j,1) = value2;
all_results(s,j,2) = value1 - value2;
catch err
error(err)
end
end
end
if(numOfSimulations == 1)
results = all_results;
else
results = mean(all_results); %still 3d matrix but 1xMxN format
end
results = squeeze(results); %remove singleton dimensions
hFig=figure;
pos=getConfiguration(7);
set(hFig, 'Units','centimeters');
set(hFig, 'Position',pos);
set(0,'DefaultAxesFontName','Times New Roman');
set(0,'DefaultTextFontName','Times New Roman');
set(0,'DefaultAxesFontSize',11);
set(0,'DefaultTextFontSize',12);
b = bar(results,'stacked');
%set(b(1),'LineStyle','--');
if(isEdge == 1)
lgnd = legend(b,{'processing time','WLAN delay'},'Location','NorthWest');
ylabel({'Service Time on Edge (sec)'});
filename = 'edge_delay_reason';
else
lgnd = legend(b,{'processing time','WAN delay'},'Location','NorthWest');
ylabel({'Service Time on Cloud(sec)'});
filename = 'cloud_delay_reason';
end
set(b,{'FaceColor'},{[.45 .45 .45];[.90 .90 .90]});
axis square
xlabel(getConfiguration(9));
set(gca,'XTick', stepOfxAxis:stepOfxAxis:numOfMobileDevices);
set(gca,'XTickLabel', (startOfMobileDeviceLoop*stepOfxAxis):(stepOfxAxis*stepOfMobileDeviceLoop):endOfMobileDeviceLoop);
set(gca,'XLim',[0 numOfMobileDevices+1])
set(get(gca,'Xlabel'),'FontSize',12)
set(get(gca,'Ylabel'),'FontSize',12)
set(lgnd,'FontSize',12)
if(getConfiguration(18) == 1)
set(hFig, 'PaperUnits', 'centimeters');
set(hFig, 'PaperPositionMode', 'manual');
set(hFig, 'PaperPosition',[0 0 pos(3) pos(4)]);
set(gcf, 'PaperSize', [pos(3) pos(4)]); %Keep the same paper size
filename = strcat(folderPath,'\',filename);
saveas(gcf, filename, 'pdf');
end
end

View File

@ -0,0 +1,198 @@
function [] = plotGenericLine(rowOfset, columnOfset, yLabel, appType, legendPos, calculatePercentage, divisor, ignoreZeroValues, hideLowerValues, hideXAxis)
folderPath = getConfiguration(1);
numOfSimulations = getConfiguration(3);
stepOfxAxis = getConfiguration(4);
scenarioType = getConfiguration(5);
startOfMobileDeviceLoop = getConfiguration(10);
stepOfMobileDeviceLoop = getConfiguration(11);
endOfMobileDeviceLoop = getConfiguration(12);
numOfMobileDevices = (endOfMobileDeviceLoop - startOfMobileDeviceLoop)/stepOfMobileDeviceLoop + 1;
all_results = zeros(numOfSimulations, size(scenarioType,2), numOfMobileDevices);
min_results = zeros(size(scenarioType,2), numOfMobileDevices);
max_results = zeros(size(scenarioType,2), numOfMobileDevices);
if ~exist('appType','var')
appType = 'ALL_APPS';
end
if ~exist('divisor','var')
divisor = 1;
end
if ~exist('ignoreZeroValues','var')
ignoreZeroValues = 0;
end
if ~exist('hideLowerValues','var')
hideLowerValues = 0;
end
if exist('hideXAxis','var')
hideXAxisStartValue = hideXAxis(2);
hideXAxisIndex = hideXAxis(1);
end
for s=1:numOfSimulations
for i=1:size(scenarioType,2)
for j=1:numOfMobileDevices
try
mobileDeviceNumber = startOfMobileDeviceLoop + stepOfMobileDeviceLoop * (j-1);
filePath = strcat(folderPath,'\ite',int2str(s),'\SIMRESULT_ITS_SCENARIO_',char(scenarioType(i)),'_',int2str(mobileDeviceNumber),'DEVICES_',appType,'_GENERIC.log');
readData = dlmread(filePath,';',rowOfset,0);
value = readData(1,columnOfset);
if(calculatePercentage==1)
readData = dlmread(filePath,';',1,0);
totalTask = readData(1,1)+readData(1,2);
value = (100 * value) / totalTask;
end
all_results(s,i,j) = value;
catch err
error(err)
end
end
end
end
if(numOfSimulations == 1)
results = all_results;
else
if(ignoreZeroValues == 1)
results = sum(all_results,1) ./ sum(all_results~=0,1);
%TODO cahnge NaN to 0
else
results = mean(all_results); %still 3d matrix but 1xMxN format
end
end
results = squeeze(results); %remove singleton dimensions
for i=1:size(scenarioType,2)
for j=1:numOfMobileDevices
if(results(i,j) < hideLowerValues)
results(i,j) = NaN;
else
results(i,j) = results(i,j) / divisor;
end
end
end
if exist('hideXAxis','var')
for j=1:numOfMobileDevices
if(j*stepOfMobileDeviceLoop+startOfMobileDeviceLoop > hideXAxisStartValue)
results(hideXAxisIndex,j) = NaN;
end
end
end
for i=1:size(scenarioType,2)
for j=1:numOfMobileDevices
x=results(i,j); % Create Data
SEM = std(x)/sqrt(length(x)); % Standard Error
ts = tinv([0.05 0.95],length(x)-1); % T-Score
CI = mean(x) + ts*SEM; % Confidence Intervals
if(CI(1) < 0)
CI(1) = 0;
end
if(CI(2) < 0)
CI(2) = 0;
end
min_results(i,j) = results(i,j) - CI(1);
max_results(i,j) = CI(2) - results(i,j);
end
end
types = zeros(1,numOfMobileDevices);
for i=1:numOfMobileDevices
types(i)=startOfMobileDeviceLoop+((i-1)*stepOfMobileDeviceLoop);
end
hFig = figure;
pos=getConfiguration(7);
fontSizeArray = getConfiguration(8);
set(hFig, 'Units','centimeters');
set(hFig, 'Position',pos);
set(0,'DefaultAxesFontName','Times New Roman');
set(0,'DefaultTextFontName','Times New Roman');
set(0,'DefaultAxesFontSize',fontSizeArray(3));
if(getConfiguration(20) == 1)
for i=1:1:numOfMobileDevices
xIndex=startOfMobileDeviceLoop+((i-1)*stepOfMobileDeviceLoop);
markers = getConfiguration(50);
for j=1:size(scenarioType,2)
plot(xIndex, results(j,i),char(markers(j)),'MarkerFaceColor',getConfiguration(20+j),'color',getConfiguration(20+j));
hold on;
end
end
for j=1:size(scenarioType,2)
if(getConfiguration(19) == 1)
errorbar(types, results(j,:), min_results(j,:),max_results(j,:),'-k','color',getConfiguration(20+j),'LineWidth',1);
else
plot(types, results(j,:),'-k','color',getConfiguration(20+j),'LineWidth',1);
end
hold on;
end
set(gca,'color','none');
else
markers = getConfiguration(40);
for j=1:size(scenarioType,2)
if(getConfiguration(19) == 1)
errorbar(types, results(j,:),min_results(j,:),max_results(j,:),char(markers(j)),'MarkerFaceColor','w','LineWidth',1);
else
plot(types, results(j,:),char(markers(j)),'MarkerFaceColor','w');
end
hold on;
end
end
legends = getConfiguration(6);
lgnd = legend(legends,'Location',legendPos);
%lgnd.Position=[0.21,0.8,0.2,0.01];
if(getConfiguration(20) == 1)
set(lgnd,'color','none');
end
xCoefficent = 100;
if(getConfiguration(17) == 0)
xCoefficent = 1;
end
hold off;
axis square
xlabel(getConfiguration(9));
step = stepOfxAxis*stepOfMobileDeviceLoop;
set(gca,'XTick', step:step:endOfMobileDeviceLoop);
set(gca,'XTickLabel', step/xCoefficent:step/xCoefficent:endOfMobileDeviceLoop/xCoefficent);
ylabel(yLabel);
set(gca,'XLim',[startOfMobileDeviceLoop-5 endOfMobileDeviceLoop+5]);
if(getConfiguration(17) == 1)
xlim = get(gca,'XLim');
ylim = get(gca,'YLim');
text(1.02 * xlim(2), 0.165 * ylim(2), 'x 10^2');
end
set(get(gca,'Xlabel'),'FontSize',fontSizeArray(1));
set(get(gca,'Ylabel'),'FontSize',fontSizeArray(1));
set(lgnd,'FontSize',fontSizeArray(2));
if(getConfiguration(18) == 1)
set(hFig, 'PaperUnits', 'centimeters');
set(hFig, 'PaperPositionMode', 'manual');
set(hFig, 'PaperPosition',[0 0 pos(3) pos(4)]);
set(gcf, 'PaperSize', [pos(3) pos(4)]); %Keep the same paper size
filename = strcat(folderPath,'\',int2str(rowOfset),'_',int2str(columnOfset),'_',appType);
saveas(gcf, filename, 'pdf');
end
end

View File

@ -0,0 +1,78 @@
function [] = plotGenericPie(vmType, appType, threshold)
folderPath = "D:\git-repos\PhD\EdgeCloudSim\sim_results";
scenarioType = getConfiguration(5);
startOfMobileDeviceLoop = 2000;
stepOfMobileDeviceLoop = 2000;
endOfMobileDeviceLoop = 2000;
numOfMobileDevices = (endOfMobileDeviceLoop - startOfMobileDeviceLoop)/stepOfMobileDeviceLoop + 1;
if ~exist('appType','var')
appType = 1;
end
if ~exist('vmType','var')
vmType = 'edge';
end
total = zeros(1,size(scenarioType,2));
found = zeros(1,size(scenarioType,2));
for s=1:size(scenarioType,2)
for j=1:numOfMobileDevices
try
mobileDeviceNumber = startOfMobileDeviceLoop + stepOfMobileDeviceLoop * (j-1);
filePath = strcat(folderPath,'\ite11\SIMRESULT_ITS_SCENARIO_',char(scenarioType(s)),'_',int2str(mobileDeviceNumber),'DEVICES_SUCCESS.log');
readData = dlmread(filePath,';',1,0);
for k=1:size(readData,1)
if(readData(k,7) == appType && ((strcmp(vmType,'edge') == 1 && readData(k,3) == 3) || (strcmp(vmType,'cloud') == 1 && readData(k,3) ~= 3) || strcmp(vmType,'all')==1))
if(readData(k,12) - readData(k,11) > threshold)
found(s) = found(s) + 1;
end
total(s) = total(s) + 1;
end
end
catch err
error(err)
end
end
end
hFig = figure;
pos=getConfiguration(7);
fontSizeArray = getConfiguration(8);
set(hFig, 'Units','centimeters');
set(hFig, 'Position',pos);
set(0,'DefaultAxesFontName','Times New Roman');
set(0,'DefaultTextFontName','Times New Roman');
set(0,'DefaultAxesFontSize',fontSizeArray(3));
if(getConfiguration(20) == 1)
%result = found ./ total .* 100;
p = pie(found);
hold on;
end
txt = reshape(getConfiguration(6),[size(scenarioType,2) 1]);
pText = findobj(p,'Type','text');
percentValues = get(pText,'String');
combinedtxt = strcat(txt,' (',percentValues,')');
for i=1:size(scenarioType,2)
pText(i).String = combinedtxt(i);
end
set(pText,'fontsize',fontSizeArray(1))
hold off;
axis square
if(getConfiguration(18) == 1)
set(hFig, 'PaperUnits', 'centimeters');
set(hFig, 'PaperPositionMode', 'manual');
set(hFig, 'PaperPosition',[0 0 pos(3) pos(4)]);
set(gcf, 'PaperSize', [pos(3) pos(4)]); %Keep the same paper size
filename = strcat(folderPath,'\',int2str(rowOfset),'_',int2str(columnOfset),'_',appType);
saveas(gcf, filename, 'pdf');
end
end

View File

@ -0,0 +1,96 @@
function [] = plotGenericScatter(yLabel, xLabel, legendPos, vmType, appType, drawLine)
folderPath = "D:\git-repos\PhD\EdgeCloudSim\sim_results";
scenarioType = getConfiguration(5);
simulationTime = getConfiguration(2);
startOfMobileDeviceLoop = 2000;
stepOfMobileDeviceLoop = 2000;
endOfMobileDeviceLoop = 2000;
numOfMobileDevices = (endOfMobileDeviceLoop - startOfMobileDeviceLoop)/stepOfMobileDeviceLoop + 1;
if ~exist('appType','var')
appType = 1;
end
if ~exist('vmType','var')
vmType = 'edge';
end
result_x = NaN(size(scenarioType,2), 5000);
result_y = NaN(size(result_x,1), size(result_x,2));
%result_sz = NaN(size(result_x,1), size(result_x,2));
for s=1:size(scenarioType,2)
index = 1;
firstDeviceId = -1;
for j=1:numOfMobileDevices
try
mobileDeviceNumber = startOfMobileDeviceLoop + stepOfMobileDeviceLoop * (j-1);
filePath = strcat(folderPath,'\ite11\SIMRESULT_ITS_SCENARIO_',char(scenarioType(s)),'_',int2str(mobileDeviceNumber),'DEVICES_SUCCESS.log');
readData = dlmread(filePath,';',1,0);
for k=1:size(readData,1)
if(readData(k,7) == appType && ((strcmp(vmType,'edge') == 1 && readData(k,3) == 3) || (strcmp(vmType,'cloud') == 1 && readData(k,3) ~= 3) || strcmp(vmType,'all')==1))
if(firstDeviceId == -1)
firstDeviceId = readData(k,2);
end
if(readData(k,2) == firstDeviceId) % && readData(k,11) - readData(k,10) < 2
result_y(s, index) = readData(k,12) - readData(k,11);
result_x(s, index) = readData(k,12) / 60;
%result_sz(s, index) = j*10;
index = index + 1;
end
end
end
catch err
error(err)
end
end
end
hFig = figure;
pos=getConfiguration(7);
fontSizeArray = getConfiguration(8);
set(hFig, 'Units','centimeters');
set(hFig, 'Position',pos);
set(0,'DefaultAxesFontName','Times New Roman');
set(0,'DefaultTextFontName','Times New Roman');
set(0,'DefaultAxesFontSize',fontSizeArray(3));
if(getConfiguration(20) == 1)
for i=1:size(scenarioType,2)
scatter(result_x(i,:), result_y(i,:));
hold on;
end
if exist('drawLine','var')
y = [drawLine, drawLine];
x = [0, simulationTime];
plot(x,y);
end
end
legends = getConfiguration(6);
lgnd = legend(legends,'Location',legendPos);
%lgnd.Position=[0.21,0.8,0.2,0.01];
if(getConfiguration(20) == 1)
set(lgnd,'color','none');
end
hold off;
axis square
xlabel(xLabel);
ylabel(yLabel);
set(get(gca,'Xlabel'),'FontSize',fontSizeArray(1));
set(get(gca,'Ylabel'),'FontSize',fontSizeArray(1));
set(lgnd,'FontSize',fontSizeArray(2));
if(getConfiguration(18) == 1)
set(hFig, 'PaperUnits', 'centimeters');
set(hFig, 'PaperPositionMode', 'manual');
set(hFig, 'PaperPosition',[0 0 pos(3) pos(4)]);
set(gcf, 'PaperSize', [pos(3) pos(4)]); %Keep the same paper size
filename = strcat(folderPath,'\',int2str(rowOfset),'_',int2str(columnOfset),'_',appType);
saveas(gcf, filename, 'pdf');
end
end

View File

@ -0,0 +1,66 @@
function [] = plotLocation()
folderPath = getConfiguration(1);
numOfSimulations = getConfiguration(3);
stepOfxAxis = getConfiguration(4);
startOfMobileDeviceLoop = 500;
stepOfMobileDeviceLoop = 500;
endOfMobileDeviceLoop = 1500;
numOfMobileDevices = (endOfMobileDeviceLoop - startOfMobileDeviceLoop)/stepOfMobileDeviceLoop + 1;
PlaceCount = 40;
results = zeros(numOfMobileDevices, PlaceCount);
for s=1:numOfSimulations
indexCounter = 1;
for i=startOfMobileDeviceLoop:stepOfMobileDeviceLoop:endOfMobileDeviceLoop
try
filePath = strcat(folderPath,'\ite',int2str(s),'\SIMRESULT_ITS_SCENARIO_AI_BASED_',int2str(i),'DEVICES_LOCATION.log');
readData = dlmread(filePath,';',1,0);
for j=1:PlaceCount
results(indexCounter,j) = results(indexCounter,j) + mean(readData(:,j+1));
end
catch err
error(err)
end
indexCounter = indexCounter + 1;
end
end
results = results/numOfSimulations;
xValues = {};
yValues = {};
indexCounter = 1;
for i=startOfMobileDeviceLoop:stepOfMobileDeviceLoop:endOfMobileDeviceLoop
xValues(indexCounter) = {int2str(i)};
indexCounter = indexCounter + 1;
end
for i=1:PlaceCount
yValues(i) = {int2str(i)}
end
hFig=figure;
%pos=getConfiguration(7);
pos=[10 3 24 6];
set(hFig, 'Units','centimeters');
set(hFig, 'Position',pos);
C = [0,172,0;2,171,0;5,171,0;7,171,0;10,171,0;12,171,0;15,171,0;17,171,0;20,171,0;22,171,0;25,170,0;27,170,0;30,170,0;32,170,0;35,170,0;37,170,0;40,170,0;42,170,0;45,170,0;47,169,0;50,169,0;52,169,0;55,169,0;57,169,0;60,169,0;62,169,0;65,169,0;67,169,0;70,168,0;72,168,0;75,168,0;77,168,0;80,168,0;82,168,0;85,168,0;87,168,0;90,168,0;92,168,0;95,167,0;97,167,0;100,167,0;102,167,0;105,167,0;107,167,0;110,167,0;112,167,0;115,167,0;117,166,0;120,166,0;122,166,0;125,166,0;127,166,0;130,166,0;132,166,0;135,166,0;137,166,0;140,165,0;142,165,0;145,165,0;147,165,0;150,165,0;152,165,0;155,165,0;157,165,0;159,164,0;160,164,0;161,163,0;162,162,0;163,162,0;163,161,0;164,160,0;165,159,0;166,159,0;167,158,0;168,157,0;168,157,0;169,156,0;170,155,0;171,154,0;172,154,0;172,153,0;173,152,0;174,152,0;175,151,0;176,150,0;176,149,0;177,149,0;178,148,0;179,147,0;180,147,0;181,146,0;181,145,0;182,144,0;183,144,0;184,143,0;185,142,0;185,142,0;186,141,0;187,140,0;188,139,0;189,139,0;189,138,0;190,137,0;191,137,0;192,136,0;193,135,0;193,134,0;194,134,0;195,133,0;196,132,0;197,132,0;198,131,0;198,130,0;199,129,0;200,129,0;201,128,0;202,127,0;202,127,0;203,126,0;204,125,0;205,124,0;206,124,0;206,123,0;207,122,0;208,122,0;209,121,0;210,120,0;211,119,0;211,119,0;211,118,0;211,117,0;210,116,0;210,115,0;210,114,0;210,113,0;210,112,0;210,111,0;209,110,0;209,109,0;209,108,0;209,107,0;209,106,0;208,105,0;208,104,0;208,103,0;208,102,0;208,102,0;208,101,0;207,100,0;207,99,0;207,98,0;207,97,0;207,96,0;207,95,0;206,94,0;206,93,0;206,92,0;206,91,0;206,90,0;206,89,0;205,88,0;205,87,0;205,86,0;205,85,0;205,84,0;205,84,0;204,83,0;204,82,0;204,81,0;204,80,0;204,79,0;204,78,0;203,77,0;203,76,0;203,75,0;203,74,0;203,73,0;203,72,0;202,71,0;202,70,0;202,69,0;202,68,0;202,67,0;202,67,0;201,66,0;201,65,0;201,64,0;201,63,0;201,62,0;201,61,0;200,60,0;200,59,0;199,58,0;198,57,0;197,56,0;196,55,0;195,54,0;194,53,0;193,53,0;192,52,0;191,51,0;190,50,0;189,49,0;188,48,0;187,47,0;186,46,0;185,45,0;184,44,0;183,43,0;182,42,0;181,41,0;180,41,0;179,40,0;177,39,0;176,38,0;175,37,0;174,36,0;173,35,0;172,34,0;171,33,0;170,32,0;169,31,0;168,30,0;167,29,0;166,29,0;165,28,0;164,27,0;163,26,0;162,25,0;161,24,0;160,23,0;159,22,0;158,21,0;157,20,0;156,19,0;155,18,0;153,18,0;152,17,0;151,16,0;150,15,0;149,14,0;148,13,0;147,12,0;146,11,0;145,10,0;144,9,0;143,8,0;142,7,0;141,6,0;140,6,0;139,5,0;138,4,0;137,3,0;136,2,0;135,1,0;134,0,0];
h = heatmap(yValues, xValues, results, 'Colormap', colormap(C/255),'FontName','Times New Roman','FontSize',11);
h.Title = 'Mean number of vehicles per places';
h.XLabel = 'Place IDs';
h.YLabel = '#Vehicle in simulation';
if(getConfiguration(18) == 1)
set(hFig, 'PaperUnits', 'centimeters');
set(hFig, 'PaperPositionMode', 'manual');
set(hFig, 'PaperPosition',[0 0 pos(3) pos(4)]);
set(gcf, 'PaperSize', [pos(3) pos(4)]); %Keep the same paper size
filename = strcat(folderPath,'\position');
saveas(gcf, filename, 'pdf');
end
end

View File

@ -0,0 +1,15 @@
function [] = plotTaskFailureReason()
plotGenericLine(1, 10, 'Failed Task due to VM Capacity (%)', 'ALL_APPS', 'NorthWest', 1);
plotGenericLine(1, 11, 'Failed Task due to Mobility (%)', 'ALL_APPS', 'NorthWest', 1);
plotGenericLine(5, 5, 'Failed Tasks due to WLAN (%)', 'ALL_APPS', 'NorthWest', 1);
plotGenericLine(5, 6, 'Failed Tasks due to MAN failure (%)', 'ALL_APPS', 'NorthWest', 1);
plotGenericLine(5, 7, 'Failed Tasks due to WAN failure (%)', 'ALL_APPS', 'NorthWest', 1);
plotGenericLine(5, 8, 'Failed Tasks due to GSM failure (%)', 'ALL_APPS', 'NorthEast', 1);
end

View File

@ -0,0 +1,7 @@
function [] = plotTimeComplexity()
plotGenericLine(6, 1, 'Simulation Time (minute)', 'ALL_APPS', 'NorthWest', 0, 60);
plotGenericLine(6, 2, 'Orchestration Algorithm Overhead (micro second)', 'ALL_APPS', 'NorthEast', 0, 1000);
end

View File

@ -0,0 +1,75 @@
#!/bin/bash
if [ "$#" -ne 2 ]; then
echo "Missing arguments! Please provide number of parallel processes and number of iterations."
echo "Usage: '$0 4 10'"
exit 1
fi
re='^[0-9]+$'
if ! [[ $1 =~ $re ]] ; then
echo "$1 is not an integer! Please provide number of parallel processes."
echo "Usage: '$0 4 10'"
exit 1
fi
if ! [[ $2 =~ $re ]] ; then
echo "$1 is not an integer! Please provide number of iterations."
echo "Usage: '$0 4 10'"
exit 1
fi
script_root_path="$(dirname "$(readlink -f "$0")")"
root_out_folder=${script_root_path}/output
num_of_processes=$1
iterationNumber=$2
process_counter=0
date=$(date '+%d-%m-%Y_%H-%M')
simulation_out_folder=${root_out_folder}/${date}
mkdir -p $simulation_out_folder
simulations=$(cat ${script_root_path}/simulation.list)
rm -rf ${script_root_path}/tmp_runner*
for sim_args in $simulations
do
scenario_name=$(echo $sim_args | cut -d ';' -f1)
edge_devices_file=$(echo $sim_args | cut -d ';' -f2)
applications_file=$(echo $sim_args | cut -d ';' -f3)
mkdir -p $simulation_out_folder/${scenario_name}
echo "STARTED" > $simulation_out_folder/${scenario_name}/progress.log
for (( i=1; i<=$iterationNumber; i++ ))
do
process_id=$(($process_counter % $num_of_processes))
process_counter=$(($process_counter + 1))
echo "${script_root_path}/runner.sh $simulation_out_folder $scenario_name $edge_devices_file $applications_file ${i}" >> "${simulation_out_folder}/tmp_runner${process_id}.sh"
done
done
#num_of_cores=$(grep -c ^processor /proc/cpuinfo)
for (( i=0; i<$num_of_processes; i++ ))
do
chmod +x ${simulation_out_folder}/tmp_runner${i}.sh
${simulation_out_folder}/tmp_runner${i}.sh &
# pid=$!
# cpu=$(($i % $num_of_cores))
# taskset -cp $cpu,$cpu $pid
done
echo "###############################################################"
echo " SIMULARIONS ARE STARTED!"
echo "###############################################################"
echo "You can follow the progress via the following command"
echo "tail -f <scenario_folder>/progress.log"
echo "e.g."
echo "tail -f output/${date}/${scenario_name}/progress.log"
echo "###############################################################"
echo "You can inspect each iteration via the following command"
echo "tail -f <scenario_folder>/ite[n].log"
echo "e.g."
echo "tail -f output/${date}/${scenario_name}/ite1.log"
echo "###############################################################"

View File

@ -0,0 +1,25 @@
#!/bin/sh
script_root_path="$(dirname "$(readlink -f "$0")")"
simulation_out_folder=$1
scenario_name=$2
edge_devices_file=$3
applications_file=$4
iteration_number=$5
scenario_out_folder=${simulation_out_folder}/${scenario_name}/ite${iteration_number}
scenario_conf_file=${script_root_path}/config/${scenario_name}.properties
scenario_edge_devices_file=${script_root_path}/config/${edge_devices_file}
scenario_applications_file=${script_root_path}/config/${applications_file}
mkdir -p $scenario_out_folder
java -classpath '../../bin:../../lib/cloudsim-4.0.jar:../../lib/commons-math3-3.6.1.jar:../../lib/colt.jar:../../lib/weka.jar:../../lib/mtj-1.0.4.jar' -Djava.library.path=../../lib/native/linux edu.boun.edgecloudsim.applications.vec_ai_app.VehicularMainApp $scenario_conf_file $scenario_edge_devices_file $scenario_applications_file $scenario_out_folder $iteration_number > ${scenario_out_folder}.log
if [ $? -eq 0 ]; then
echo "ite${iteration_number} OK" >> ${simulation_out_folder}/${scenario_name}/progress.log
else
echo "ite${iteration_number} FAIL !!!" >> ${simulation_out_folder}/${scenario_name}/progress.log
fi
#tar -czf ${scenario_out_folder}.tar.gz -C $simulation_out_folder/${scenario_name} ite${iteration_number}
#rm -rf $scenario_out_folder

View File

@ -0,0 +1 @@
default_config;edge_devices.xml;applications.xml

View File

@ -0,0 +1,15 @@
#!/bin/sh
echo "This script kills all java processes including Eclipse etc."
read -p "Do you want to continue[y/n]? " REPLY
if [ "$REPLY" = "y" ]
then
while pgrep java >/dev/null 2>&1
do
killall java
sleep 1
done
fi
echo "Operation completed. bye..."