-
Notifications
You must be signed in to change notification settings - Fork 1
/
runModel.py
54 lines (45 loc) · 1.85 KB
/
runModel.py
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
43
44
45
46
47
48
49
50
51
52
53
54
from acme.platforms.CommsPlatform import CommsPlatform
from acme.platforms.DisruptorPlatform import DisruptorPlatform
from acme.Environment import Environment
import random
import numpy as np
# Specify parameters
numberOfFrequencyBins = 10 # Number of frequency bins in the environment
maxTxQueue = 30 # Maximum number of packets in queue for each blue agent
numMaxDisruptionTokens = 4 # Maximum number of disruption tokens for red agent
numTimeStepsPerEpoch = 10 # Number of time steps per time epoch
mac = "rr"
# Instantiate communications platforms
plat0 = CommsPlatform("c1", theMaxSize=maxTxQueue)
plat1 = CommsPlatform("c2", theMaxSize=maxTxQueue)
plat2 = CommsPlatform("c3", theMaxSize=maxTxQueue)
allPlatforms = (plat0, plat1, plat2)
# Instantiate disruptor
theDisruptor = (DisruptorPlatform("d1", numMaxDisruptionTokens, numberOfFrequencyBins, numTimeStepsPerEpoch),)
# Define global connectivity/adjacency matrix
adjMatrix = np.full((4,4), False, dtype=bool)
adjMatrix[0,1:3] = True
adjMatrix[1,0] = True
adjMatrix[1,2] = True
adjMatrix[2,0:2] = True
adjMatrix[3,0:3] = True
# Instantiate environment
env = Environment(adjMatrix, allPlatforms, theDisruptor, numberOfFrequencyBins, theMediumAccessMethod=mac, theSlidingWindow=2.0)
# Run simulation
deltaT = 0.25
numSteps = 20
for t in range(numSteps):
for p in allPlatforms:
# Determine if data should be added to transmit queue
doTxData = bool(random.random() > 0.5)
# Create data to add to transmit queue
if doTxData:
# Assign random data payload
txPayload = random.random()
# Assign random destination
destID = random.sample(p.destIDs, 2)
# Add packet to transmit queue
p.txData(txPayload, destID)
# Obtain any received data
theRxData = p.rxData()
env.step(deltaT)