initial commit
This commit is contained in:
81
Environment.py
Normal file
81
Environment.py
Normal file
@ -0,0 +1,81 @@
|
||||
import typing
|
||||
|
||||
import networkx as nx
|
||||
import matplotlib.pyplot as plt
|
||||
|
||||
'''
|
||||
Build network with networkx library
|
||||
'''
|
||||
|
||||
|
||||
def build_network():
|
||||
G = nx.path_graph(11)
|
||||
G.remove_edges_from(G.edges())
|
||||
G.add_edges_from([(0, 3), (0, 4),
|
||||
(1, 2), (1, 4), (1, 5), (1, 8), (1, 9),
|
||||
(2, 3), (2, 5), (2, 6),
|
||||
(5, 6), (5, 7),
|
||||
(7, 8),
|
||||
(8, 9), (8, 10),
|
||||
(9, 10)])
|
||||
nx.draw(G, with_labels=True)
|
||||
plt.show()
|
||||
|
||||
return G
|
||||
|
||||
|
||||
'''
|
||||
Define Environment class
|
||||
- G: networkx graph
|
||||
- start: start-element for agent
|
||||
- goal: goal-element for agent
|
||||
- blocked: list of blocked nodes
|
||||
'''
|
||||
|
||||
|
||||
class Env:
|
||||
def __init__(self, start: int, goal: int):
|
||||
self.G = build_network()
|
||||
self.start = start
|
||||
self.goal = goal
|
||||
self.blocked = []
|
||||
|
||||
'''
|
||||
Reset the environment --> no blocked nodes
|
||||
'''
|
||||
|
||||
def reset(self) -> None:
|
||||
self.blocked = []
|
||||
|
||||
'''
|
||||
Returns the next state and the reward based on state-action pait
|
||||
'''
|
||||
|
||||
def get_state_reward(self, state: int, action: int) -> typing.Tuple[bool, int, int]:
|
||||
if action == self.goal:
|
||||
return True, 30, action
|
||||
elif self.is_node_blocked(action):
|
||||
return False, -5, state
|
||||
else:
|
||||
return False, -1, action
|
||||
|
||||
'''
|
||||
Blocks node
|
||||
'''
|
||||
|
||||
def block_node(self, node: int) -> None:
|
||||
self.blocked.append(node)
|
||||
|
||||
'''
|
||||
Unblocks node
|
||||
'''
|
||||
|
||||
def release_node(self, node: int) -> None:
|
||||
self.blocked.remove(node)
|
||||
|
||||
'''
|
||||
Return True if node is blocked
|
||||
'''
|
||||
|
||||
def is_node_blocked(self, node: int) -> int:
|
||||
return node in self.blocked
|
Reference in New Issue
Block a user