network_dimensioning/sim_p3.py

105 lines
2.7 KiB
Python
Raw Permalink Normal View History

2020-11-19 23:41:08 +01:00
import os
import numpy as np
import numpy.random as rnd
import sys
2020-11-19 23:52:09 +01:00
import importlib
# import imp
2020-11-19 23:41:08 +01:00
import ctypes
import ctypes.util
from numpy.ctypeslib import ndpointer
import event_gen as eg
2020-11-19 23:52:09 +01:00
PPP = 60
claim_types = {'bronze': {'bw': 1, 'value': 2, 'damage': 4, 'duration': 100, 'pr': 0.4},
'silver': {'bw': 3, 'value': 5, 'damage': 6, 'duration': 50, 'pr': 0.3},
'gold': {'bw': 10, 'value': 30, 'damage': 80, 'duration': 70, 'pr': 0.1}}
2020-11-19 23:41:08 +01:00
class Claim:
2020-11-19 23:52:09 +01:00
def __init__(self, ty, time):
2020-11-19 23:41:08 +01:00
self.ty = ty
2020-11-19 23:52:09 +01:00
self.bw = claim_types[ty]['bw']
self.val = claim_types[ty]['value']
self.dam = claim_types[ty]['damage']
self.dur = claim_types[ty]['duration']
self.init_time = time
self.end_time = time + self.dur
2020-11-19 23:41:08 +01:00
class Sim:
2020-11-19 23:52:09 +01:00
def __init__(self, bw):
self.queue = []
self.bw = bw
self.free = bw
self.budget = (-1) * PPP * self.bw
2020-11-19 23:41:08 +01:00
def step(self, lista):
2020-11-19 23:52:09 +01:00
self.budget -= sum([self.queue[i].dam for i in range(len(self.queue)) if lista[i] == 0])
self.queue = [self.queue[i] for i in range(len(self.queue)) if lista[i] == 1]
2020-11-19 23:41:08 +01:00
def new(self, item):
2020-11-19 23:52:09 +01:00
if item.bw <= self.free:
2020-11-19 23:41:08 +01:00
self.queue.append(item)
2020-11-19 23:52:09 +01:00
def process(self, time):
for i in range(len(self.queue) - 1, -1, -1):
if self.queue[i].end_time <= time:
self.budget += self.queue[i].val
2020-11-19 23:41:08 +01:00
del self.queue[i]
2020-11-19 23:52:09 +01:00
self.free = self.bw
2020-11-19 23:41:08 +01:00
for item in self.queue:
2020-11-19 23:52:09 +01:00
self.free -= item.bw
def get_queue_list(self, time):
lista = []
2020-11-19 23:41:08 +01:00
for item in self.queue:
2020-11-19 23:52:09 +01:00
lista.append([item.ty, item.end_time - time])
2020-11-19 23:41:08 +01:00
return lista
2020-11-19 23:52:09 +01:00
results = {}
folder = 'Strats'
2020-11-19 23:41:08 +01:00
2020-11-20 00:07:19 +01:00
2020-11-19 23:41:08 +01:00
sys.path.append(folder)
2020-11-19 23:52:09 +01:00
strats = os.listdir(folder)
strats_py = [x.split('.')[0] for x in strats if x.split('.')[-1] == "py"]
# strats_py=['tut_mymy']
2020-11-19 23:41:08 +01:00
2020-11-20 00:07:19 +01:00
2020-11-19 23:41:08 +01:00
for _ in range(10):
2020-11-19 23:52:09 +01:00
events = eg.event_gen(2000)
2020-11-19 23:41:08 +01:00
"""
os.system('python event_gen.py >event1.txt')
with open('event1.txt') as inf:
for line in inf:
a=line.split()
# print a
if a:
events.append([int(a[0]),a[1]])
#print events
"""
for strat in strats_py:
2020-11-19 23:52:09 +01:00
mod = importlib.import_module(strat)
sim = Sim(max(0, mod.init_bw()))
2020-11-19 23:41:08 +01:00
for e in events:
2020-11-19 23:52:09 +01:00
[time, claim] = e
2020-11-19 23:41:08 +01:00
sim.process(time)
2020-11-19 23:52:09 +01:00
[new, lista] = mod.decision(claim, sim.get_queue_list(time))
2020-11-19 23:41:08 +01:00
sim.step(lista)
2020-11-19 23:52:09 +01:00
if new == 1:
sim.new(Claim(claim, time))
sim.process(time + 1000)
2020-11-19 23:41:08 +01:00
if not strat in results:
2020-11-19 23:52:09 +01:00
results[strat] = 0
results[strat] += sim.budget
2020-11-20 00:07:19 +01:00
2020-11-19 23:41:08 +01:00
for key in results:
2020-11-19 23:52:09 +01:00
results[key] /= 10.0
2020-11-20 00:07:19 +01:00
2020-11-19 23:41:08 +01:00
print(results)