Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
import csv
import re
# open the file in the write mode
f = open('resultsParsed_UtilizationDifferent_40rep_DeviceOnlyVar_2replicas_Std30_RequestDeviceRandom.csv', 'w',newline='')
# create the csv writer
writer = csv.writer(f)
# Header
writer.writerow(['Repetition','Scenario','Alternative','Device0','Device1','Device2','Device3','Device4','Device5', 'Device6','Device7','Device8','Device9','Device10'])
nextline= False
nextlineUtilization = False
i=0
saveDevicePlacement = True
with open("40rep_DeviceOnlyVar_2replicas_Std30_RequestDeviceRandom.txt","r") as fi:
for ln in fi:
if nextlineUtilization:
#This is a line with the data for the utilization scenario
gatewayList=[s for s in re.findall(r'[\s\{]gateway_(\d+)=(\d+.\d+)', ln)]
utilizationInfo=[0.0]*11
for infoPair in gatewayList: #A pair has the form (deviceNumber,utilizationValue)
utilizationInfo[int(infoPair[0])]=infoPair[1]
#print(utilizationInfo)
# Reset
nextlineUtilization= False
if ln.startswith("Repetition"):
# Get the repetition number
repetition =[s for s in re.findall(r'\b\d+\b', ln)]
if ln.startswith("Utilization scenario"):
# Get the scenario number
number =[s for s in re.findall(r'\b\d+\b', ln)]
nextlineUtilization=True
if nextline:
#This is a line with the name of the alternative
if ln.startswith("OVERALL OPT"):
# Get the scenario number
alternative ="Overall"
saveDevicePlacement=False
# The results indicate the utilization information only for the devices used in the placement - save temporarily overall results
results2=[]
for deviceNb in range(11):
if deviceNb in devicesUsedInPlacement:
results2.append(utilizationInfo[deviceNb])
else:
results2.append('NA')
#print(results)
if ln.startswith("MARGINAL OPT"):
# Get the scenario number
alternative ="Marginal"
# Assuming Marginal is always second
saveDevicePlacement=True
if not devicesUsedInPlacement==devicesUsedInPlacementSaved:
#Only save info when placement is different
print("Different placement, writing to CSV")
# The results indicate the utilization information only for the devices used in the placement
results=[]
for deviceNb in range(11):
if deviceNb in devicesUsedInPlacement:
results.append(utilizationInfo[deviceNb])
else:
results.append('NA')
#print(results)
# Write to the CSV file - the two rows
writer.writerow([repetition[0],number[0],"Overall",results2[0],results2[1],results2[2],results2[3],results2[4],results2[5],results2[6],results2[7],results2[8],results2[9],results2[10]])
writer.writerow([repetition[0],number[0],alternative,results[0],results[1],results[2],results[3],results[4],results[5],results[6],results[7],results[8],results[9],results[10]])
i=i+2
print(i)
# Reset
nextline= False
if ln.startswith("Objective"):
# Get the devices that are part of the resulting placement
devicesUsedInPlacement=[int(s) for s in re.findall(r'yg(\d+)\w\w=1', ln)]
print(devicesUsedInPlacement)
if (saveDevicePlacement):
devicesUsedInPlacementSaved=devicesUsedInPlacement
# Get to the nextline - where the alternative is written
nextline=True
if ln.startswith("The request is infeasible"):
# Get the devices that are part of the resulting placement - none in this case
devicesUsedInPlacement=[]
print(devicesUsedInPlacement)
if (saveDevicePlacement):
devicesUsedInPlacementSaved=devicesUsedInPlacement
# Get to the nextline - where the alternative is written
nextline=True
# close the file
f.close()