Skip to content

Commit

Permalink
-added average utilization, idleness, resource level, total idle time…
Browse files Browse the repository at this point in the history
…, total in use time to the resource
  • Loading branch information
NaimaSadeghi committed Dec 23, 2021
1 parent 9546e26 commit cc35f40
Show file tree
Hide file tree
Showing 3 changed files with 116 additions and 5 deletions.
10 changes: 8 additions & 2 deletions src/des_tests/test_simple_earthmoving.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,5 +26,11 @@ def truck_process(truck:des.entity,loader:des.resource,dumped_dirt:des.resource)
print(loader.queue_log())
print(loader.status_log())
print(loader.waiting_time())
print(loader.average_queue_length())

print("average_queue_length:",loader.average_queue_length())
print("average_utlization:",loader.average_utilization())
print("average_idleness:",loader.average_idleness())
print("truck0 waiting time:",truck[0].waiting_time().mean())
print("total time in use:",loader.total_time_in_use())
print("total time idle:",loader.total_time_idle())
print("average level of loader:",loader.average_level())
print("average queue length:",loader.average_queue_length())
3 changes: 3 additions & 0 deletions src/mcs_tests/test_tobedeleted.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
print(type(2))
print(type(2.1))
print(type([]))
108 changes: 105 additions & 3 deletions src/pmpy/des.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,10 @@
sys.path.insert(0,parentdir)

import simpy
from numpy import array, append
from numpy import array, append,nansum
from pandas import DataFrame
from bisect import insort_left
import matplotlib.pyplot as plt


from pmpy.dist import distribution
Expand Down Expand Up @@ -490,7 +491,98 @@ def waiting_time(self):
a=self.queue_log()
a=a['finish_time']-a['start_time']
return a.values

####*****************plotting is still under construction*************
# def plot_utilization(self):
# l=self.status_log()
# y=l["in_use"].values/(l["in_use"].values+l["idle"].values)
# x=l["time"].values
# plt.plot(x,y*100)
# plt.show()

# def plot_idleness(self):
# l=self.status_log()
# l["idleness%"]=l["idle"].values/(l["in_use"].values+l["idle"].values)*100
# l.plot(x="time",y="idleness%")
# plt.show()

# def plot_queue_length(self):

# l=self.status_log()
# l.plot(x="time",y="queue_length")
# plt.show()

def average_utilization(self):
"""
Returns
-------
int
The average utilization for the resource
"""
l=self.status_log()
t1=l["time"].values[:-1]
t2=l["time"].values[1:]
y=l["in_use"].values/(l["in_use"].values+l["idle"].values)
y_dur=y[:-1]
d=t2-t1
r= nansum(d*y_dur)/l["time"].values[-1]
return r

def average_idleness(self):
"""
Returns
-------
int
The average idleness for the resource
"""
return 1-self.average_utilization()


def total_time_idle(self):
"""
Returns
-------
int
The total idle time of the resource
"""
l=self.status_log()
t1=l["time"].values[:-1]
t2=l["time"].values[1:]
this_level=l["idle"].values
this_level=this_level[:-1]
d=t2-t1
r= nansum(d*this_level)
return r

def total_time_in_use(self):
"""
Returns
-------
int
The total idle time of the resource
"""
l=self.status_log()
t1=l["time"].values[:-1]
t2=l["time"].values[1:]
this_level=l["in_use"].values
this_level=this_level[:-1]
d=t2-t1
r= nansum(d*this_level)
return r

def average_level(self):
"""
Returns
-------
int
The average level for the resource
"""
l=self.status_log()
return self.total_time_idle()/l["time"].values[-1]



def _request(self,entity,amount):
"""
Calculate needed logs when an entity requests the resource.
Expand All @@ -508,6 +600,8 @@ def _request(self,entity,amount):
+' requested',str(amount),self.name+'(s)'+'('+str(self.id)+')'+', sim_time:',self.env.now)
if self.log:
self._status_log=append(self._status_log,[[self.env.now,self.in_use,self.container.level,self.queue_length]],axis=0)
if self.container.level+self.in_use==0:
print("why")
if entity.log:
entity._status_log=append(entity._status_log,[[self.env.now,entity._status_codes['wait for'],self.id]],axis=0)

Expand All @@ -529,6 +623,8 @@ def _get(self,entity,amount):
+' got '+str(amount),self.name+'(s)'+'('+str(self.id)+')'+', sim_time:',self.env.now)
if self.log:
self._status_log=append(self._status_log,[[self.env.now,self.in_use,self.container.level,self.queue_length]],axis=0)
if self.container.level+self.in_use==0:
print("why")
if entity.log:
entity._status_log=append(entity._status_log,[[self.env.now,entity._status_codes['get'],self.id]],axis=0)
entity.using_resources[self]=amount
Expand All @@ -549,6 +645,9 @@ def _add(self,entity,amount):
+' added '+str(amount),self.name+'(s)'+'('+str(self.id)+')'+', sim_time:',self.env.now)
if self.log:
self._status_log=append(self._status_log,[[self.env.now,self.in_use,self.container.level,self.queue_length]],axis=0)
if self.container.level+self.in_use==0:
print("why")

if entity.log:
entity._status_log=append(entity._status_log,[[entity._status_codes['add'],self.id,self.env.now]],axis=0)

Expand All @@ -574,6 +673,9 @@ def _put(self,entity,amount):
+' put back '+str(amount),self.name+'(s)'+'('+str(self.id)+')'+', sim_time:',self.env.now)
if self.log:
self._status_log=append(self._status_log,[[self.env.now,self.in_use,self.container.level,self.queue_length]],axis=0)
if self.container.level+self.in_use==0:
print("why")

if entity.log:
entity._status_log=append(entity._status_log,[[entity._status_codes['put'],self.id,self.env.now]],axis=0)

Expand Down Expand Up @@ -624,7 +726,7 @@ def average_queue_length(self):
Returns
-------
float
The average waiting queue length for a resource
The average queue length for a resource
"""
return sum(self.waiting_time())/(self.env.now)

Expand Down Expand Up @@ -685,7 +787,7 @@ def get(self,entity,amount):
pr=request(entity,amount)
entity.pending_requests.append(pr) #append priority request to the eneity
self.request_list.append(pr)
yield self.env.timeout(0) #? why do we need this?
#yield self.env.timeout(0) #? why do we need this?
yield entity.env.process(self._check_all_requests())
yield pr.flag.get(1) #flag shows that the resource is granted

Expand Down

0 comments on commit cc35f40

Please sign in to comment.