0% found this document useful (0 votes)
49 views

ENGR691, Spring 2015, Homework For Lecture Block 1: 1 Code Listing

The document describes code for a homework assignment that analyzes queueing system data. The code: (1) calculates waiting times from interarrival and service times, and finds average times; (2) determines the proportion of unique waiting times to obtain the probability mass function and cumulative distribution function; (3) calculates the complementary CDF and saves results to CSV files. It also describes generating a plot of the complementary CDF using LaTeX and Tikz for inclusion in a LaTeX document.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
49 views

ENGR691, Spring 2015, Homework For Lecture Block 1: 1 Code Listing

The document describes code for a homework assignment that analyzes queueing system data. The code: (1) calculates waiting times from interarrival and service times, and finds average times; (2) determines the proportion of unique waiting times to obtain the probability mass function and cumulative distribution function; (3) calculates the complementary CDF and saves results to CSV files. It also describes generating a plot of the complementary CDF using LaTeX and Tikz for inclusion in a LaTeX document.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 4

ENGR691, Spring 2015, Homework for Lecture

Block 1

1
1

Code Listing

# F i l e Name : Spring2015HW01Sakil V . 2 2 0 5 . py

2
3

# The o b j e c t i v e o f t h e program i s t h a t we were g i v e n some randomly


g e n e r a t e d data o f i n t e r a r r i v a l time and s e r v i c e time o f a
q u e u e i n g system .
# For p a r t ( a ) o f t h e a s s i g n m e n t , we want t o f i n d t h e w a i t i n g time
f o r each g i v e n s e t o f v a l u e s by u s i n g t h e g i v e n f o r m u l a .
# For p a r t ( b ) o f t h e a s s i g n m e n t , we w i l l e x t e n d t h e Python program
t o p r o c e s s t h e data t o d e t e r m i n e t h e a v e r a g e i n t e r a r r i v a l time
, a v e r a g e s e r v i c e time , and a v e r a g e w a i t i n g time o v e r t h e
number o f a v a i l a b l e s a m p l e s .
# For p a r t ( c ) o f t h e a s s i g n m e n t , we w i l l add a r o u t i n g i n t h e
Python program t o o b t a i n t h e sample complementary d i s t r i b t u i o n
f u n c t i o n f o r an a r b i t a r y d i s c r e t e l i s t o f sample v a l u e s . That
i s , we want t o know t h e p r o p o r t i o n o f v a l u e s t h a t e x c e e d each
d s i c r e t e sample v a l u e i n t h e l i s t .
# For p a r t ( d ) o f t h e a s s i g m e n t , we w i l l be l i t i n g our program
u s i n g LATEX package l i s t i n g s .
# For p a r t ( e ) o f t h e a s s i g m e n t , we w i l l d e v e l o p a p l o t o f t h e data
p o i n t s produced i n t h e p r e v i o u s s t e p u s i n g LATEX and Tikz ; we
w i l l add t h i s t o t h e LATEX document t h a t shows t h e l i s t i n g .
#

10
11
12
13
14

im po rt
im po rt
im po rt
im po rt

numpy a s np
sys
os
math

15
16
17
18
19

#g e t t i n g i n t o c u r r e n t d i r e c t o r y
f i l e p a t h = o s . path . dirname (
file
i f f i l e p a t h != :
os . chdir ( f i l e p a t h )

20
21
22

23

# We u s e l o a d t x t ( ) t o i mp ort data from t h e g i v e n f i l e .


# we d e c l a r e d 2 a r r a y s f o r i n t e r a r r i v a l time and s e r v i c e time
and were s a v e d
# s e p a r a t e l y . we a l s o change t h e t h r e s h o l d v a l u e s o t h a t we can
p r i n t l a r g e number o f v a l u e s o f a r r a y .

24
25

i n t e r a r r i v a l t i m e = np . l o a d t x t (
s a m p l e d a t a i n t e r a r r i v a l a n d s e r v i c e t i m e ( Random ) . t x t ,

26

27
28

s k i p r o w s =1 , u s e c o l s = ( 0 , ) )
s e r v i c e t i m e = np . l o a d t x t (
s a m p l e d a t a i n t e r a r r i v a l a n d s e r v i c e t i m e ( Random ) . t x t ,
s k i p r o w s =1 , u s e c o l s = ( 1 , ) )
np . s e t p r i n t o p t i o n s ( t h r e s h o l d= nan )
np . s e t p r i n t o p t i o n s ( t h r e s h o l d=np . nan )

29
30
31
32
33

p r i n t ( I n t e r a r r i v a l t i m e s : \n )
print ( interarrival time )
p r i n t ( \n S e r v i c e t i m e s : \n )
print ( service time )

34
35
36
37
38
39
40
41

# We c a l c u l a t e t h e w a i t i n g time h e r e by u s i n g t h e g i v e n f o r m u l a .
copy interarrival = interarrival time
a = [0]
arr = interarrival time . size
c o p y s t = np . a r r a y ( s e r v i c e t i m e )
c o p y s t = np . append ( a [ 0 ] , c o p y s t )
c o p y s t = np . d e l e t e ( c o p y s t , a r r , 0 )

42
43
44

serviceT minus interarrivalT = copy st interarrival time


print ( serviceT minus interarrivalT )

45
46

w a i t i n g t i m e = np . z e r o s ( s e r v i c e T m i n u s i n t e r a r r i v a l T . s i z e )

47
48
49
50

51

f o r i in range ( len ( s e r v i c e T m i n u s i n t e r a r r i v a l T ) ) :
i f ( i > 0) :
w a i t i n g t i m e [ i ] = w a i t i n g t i m e [ i 1] +
serviceT minus interarrivalT [ i ]
w a i t i n g t i m e [ i ] = max( w a i t i n g t i m e [ i ] , 0 )

52
53
54

p r i n t ( \n Waiting Time )
print ( waiting time )

55
56

# Part ( b ) : c a l c u l a t i n g a v e r a g e i n t e r a r r i v a l time , a v e r a g e
s e r v i c e time , and a v e r a g e w a i t i n g time u s i n g t h e np . mean ( )

57
58
59
60
61
62
63
64

a v g w a i t i n g t i m e = np . mean ( w a i t i n g t i m e )
p r i n t ( \n )
p r i n t ( Average w a i t i n g time : )
print ( avg waiting time )
p r i n t ( \n )
a v g s e r v i c e t i m e = np . mean ( s e r v i c e t i m e )
a v g i n t e r a r r i v a l t i m e = np . mean ( i n t e r a r r i v a l t i m e )

65
66

67

# Part (C) : we u s e u n i q u e ( ) t o f i n d t h e p r o p o r t i o n o f each u n i q u e


w a i t i n g time
# Thus we can f i n d out what p r o p o r t i o n o f t h e system have w a i t i n g
time 0 , 1 , 2 . . and s o on .

68
69

70
71
72

s o r t w a i t i n g t i m e = unique , c o u n t s = np . u n i q u e ( w a i t i n g t i m e ,
r e t u r n c o u n t s=True )
np . a s a r r a y ( ( unique , c o u n t s ) ) . T
np . put ( w a i t i n g t i m e , [ 0 ] , [ 0 ] )
array size = interarrival time . size

73
74

# We s o r t t h e a r r a y based on w a i t i n g time . and d i v i d e i t by

75

a r r a y s i z e which i s t h e
# t o t a l number o f p o i n t s t o f i n d t h e p r o p o r t i o n o f each w a i t i n g
time ( d i s c r e t e v a l u e )

76
77
78
79
80

freq count
freq count
p r i n t ( \n
print ( freq

w a i t i n g = np . m a t r i x ( s o r t w a i t i n g t i m e )
w a i t i n g = np . t r a n s p o s e ( f r e q c o u n t w a i t i n g )
Waiting Time ( s o r t e d ) : \n )
count waiting )

81
82
83
84

85
86

#f i n d i n g pmf
f r e q c o u n t w a i t i n g [ : , 1 ] /= i n t e r a r r i v a l t i m e . s i z e
p r o p o r t i o n o f u n i q u e w a i t i n g t i m e s = np . t r a n s p o s e (
freq count waiting )
p r i n t ( \n pmf o f W a i t i n g t i m e : \n )
print ( proportion of unique waiting times )

87
88

#f i n d i n g c d f from pmf

89
90
91
92
93

bb
bb
cc
dd

=
=
=
=

np . a s a r r a y ( p r o p o r t i o n o f u n i q u e w a i t i n g t i m e s )
np . t r a n s p o s e ( bb )
0
bb [ : , 1 ]

94
95
96
97
98
99
100

f o r i i n r a n g e ( l e n ( dd ) ) :
if i > 0 :
dd [ i ] = dd [ i ] + dd [ i 1]
else :
cc = 0 ;
bb [ : , 1 ] = dd

101
102
103
104
105
106

p r i n t ( \n c d f : \n )
print ( proportion of unique waiting times )
c s v f o r m a t t i n g v a r = np . a s a r r a y ( p r o p o r t i o n o f u n i q u e w a i t i n g t i m e s )
c s v f o r m a t t i n g v a r = np . t r a n s p o s e ( c s v f o r m a t t i n g v a r )
np . s a v e t x t ( CDF of waitingTime . c s v , c s v f o r m a t t i n g v a r , fmt =
%1.4 f , d e l i m i t e r= , )

107
108
109
110

111

#complementary c d f
p r o p o r t i o n o f u n i q u e w a i t i n g t i m e s [ 1 , : ] = 1
proportion of unique waiting times [ 1 , : ]
c c d f v a r = np . m a t r i x . round ( p r o p o r t i o n o f u n i q u e w a i t i n g t i m e s ,
decimals = 4)

112
113
114
115
116
117
118

# we s a v e d t h e data i n s e p a r a t e c s v f i l e .
a = np . a s a r r a y ( c c d f v a r )
a = np . t r a n s p o s e ( a )
a = np . c l i p ( a , 0 . 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 3 0 )
p r i n t ( \n Complementary CDF: \n )
print (a)

119
120

np . s a v e t x t ( c o m p l i m e n t a r y d i s t r i b u t i o n f i l e o f w a i t i n g T i m e . c s v , a ,
fmt= %10.5 f , d e l i m i t e r= , )

HomeWork - 01 : A graph using Tikz


\begin{figure}[h]
\begin{center}\begin{tikzpicture}
\begin{semilogyaxis}[restrict expr to domain={y}{1e-6:1},unbounded coords=discard,
xlabel={waiting time, $w$},
ylabel=Complementary CDF ]
\addplot [
only marks,
jump mark left,
discontinuous,
thin, black
]table[x index = {0}, y index = {1}] {\mydata};
\end{semilogyaxis}
\end{tikzpicture}
\begin{minipage}{5in}
\caption{Survivor function for example data.}
\end{minipage}
\end{center}
\end{figure}
The graph looks like this:

Complementary CDF

100

101

102

10
15
20
waiting time, w

25

Figure 1: Complementary Distribution of Waiting Time.

You might also like