83 lines
No EOL
1.9 KiB
Python
Executable file
83 lines
No EOL
1.9 KiB
Python
Executable file
#!/usr/bin/env python3
|
|
import argparse
|
|
import math
|
|
import numpy as np
|
|
|
|
'''
|
|
Rappel des notations:
|
|
H -> HTTP Server
|
|
R -> Resource
|
|
D -> Database
|
|
T -> Thread
|
|
---
|
|
LAMBDA -> Entrée
|
|
MU -> Sortie
|
|
|
|
'''
|
|
|
|
def rejection_probability():
|
|
# Counter when T is empty
|
|
kappa = 0
|
|
# Initially, N thread is given
|
|
X_T = N
|
|
# Number of message received
|
|
msg_recu = 0
|
|
proba_sortie = 0
|
|
|
|
for _ in range(STEPS):
|
|
entree_proba = np.random.exponential(1/LAMBDA_H)
|
|
sortie_proba = np.random.exponential(1/MU_H)
|
|
|
|
# If an arrival occurs first
|
|
if entree_proba < sortie_proba:
|
|
msg_recu += 1
|
|
if X_T > 0:
|
|
X_T -= 1
|
|
else:
|
|
kappa += 1
|
|
else:
|
|
proba_sortie += 1
|
|
if X_T < N:
|
|
X_T += 1
|
|
|
|
print(msg_recu)
|
|
print(kappa)
|
|
print(proba_sortie)
|
|
return kappa/msg_recu
|
|
|
|
def create_network():
|
|
STATE_VECTOR[0] = N
|
|
|
|
def simulate_network():
|
|
print(f"Simating for {STEPS} steps:")
|
|
for _ in range(STEPS):
|
|
msg_received = np.random.exponential(1/LAMBDA_H)
|
|
msg_send = np.random.exponential(1/MU_H)
|
|
= np.random.exponential(1/MU_R)
|
|
sortie_proba = np.random.exponential(1/MU_D)
|
|
|
|
|
|
# General variables
|
|
STATE_VECTOR = [0,0,0,0]
|
|
STEPS = 100000
|
|
|
|
LAMBDA_H = 3
|
|
MU_H = 1
|
|
MU_R = 1
|
|
MU_D = 1
|
|
# Tokens (Processors) for Resources
|
|
C = 1
|
|
# Available Token (Thread) for the HTTP Server
|
|
N = 1
|
|
|
|
def parse():
|
|
# Parsing arguments
|
|
parser = argparse.ArgumentParser(description="A simple script to parse the -n argument with a number.")
|
|
parser.add_argument('-n', '--number', type=int, required=True, help='The size of the queue')
|
|
args = parser.parse_args()
|
|
# Access the number
|
|
return args.number
|
|
|
|
if __name__ == "__main__":
|
|
create_network()
|
|
print(f"Probability of rejection: {rejection_probability():.4f}") |