-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathScheduler.py
More file actions
42 lines (34 loc) · 1000 Bytes
/
Scheduler.py
File metadata and controls
42 lines (34 loc) · 1000 Bytes
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
from abc import ABC
class Scheduler(ABC):
def __init__(self):
super().__init__()
self.cycles = 0
# @abstractmethod
def filter(self, pool):
filter_pool = []
for seed in pool:
if seed.energy > 0:
filter_pool.append(seed)
# if all seed energy is 0 start over
if len(filter_pool) == 0:
self.cycles += 1
for seed in pool:
seed.energy = 1
return pool
return filter_pool
class QueueScheduler(Scheduler):
def choose(self, pool):
pool = super().filter(pool)
if not pool:
return None
seed = pool[0]
seed.energy = 0 # set its energy to 0 so that never use it again
return seed
class RandomScheduler(Scheduler):
def choose(self, pool, rng):
pool = super().filter(pool)
if not pool:
return None
else:
seed = rng.choice(pool)
return seed