Professional Documents
Culture Documents
Project By:
Code:
graph = nx.DiGraph()
# Constants
learning_rate = 0.05
discount_factor = 0.9
initial_exploration_prob = 1.0
final_exploration_prob = 0.1
exploration_decay = 0.002
num_episodes = 2000
num_service_levels = 3
# 3. Data Preprocessing
nodes_subset = list(graph.nodes())[:20]
amazon_subgraph = graph.subgraph(nodes_subset)
# 4. Defining the Environment and Agent Classes
class NetworkTopology:
def __init__(self, graph):
self.graph = graph
self.nodes = list(graph.nodes())
self.latencies = nx.adjacency_matrix(graph).todense()
class NodeProperties:
def __init__(self, graph_nodes):
self.properties = np.random.rand(len(graph_nodes), num_service_levels)
class RoutingEnvironment:
def __init__(self, graph, network_topology, node_properties):
self.graph = graph
self.nodes = list(graph.nodes())
self.network_topology = network_topology
self.node_properties = node_properties
def reset(self):
return np.random.choice(self.nodes)
class EnhancedStableQLearningAgent:
def __init__(self, nodes, num_states, num_actions, num_service_levels,
learning_rate, discount_factor, initial_exploration_prob,
final_exploration_prob, exploration_decay):
self.nodes = nodes
self.num_states = num_states
self.num_actions = num_actions
self.num_service_levels = num_service_levels
self.learning_rate = learning_rate
self.discount_factor = discount_factor
self.initial_exploration_prob = initial_exploration_prob
self.final_exploration_prob = final_exploration_prob
self.exploration_prob = initial_exploration_prob
self.exploration_decay = exploration_decay
self.q_table = np.zeros((num_states, num_actions, num_service_levels))
network_topology = NetworkTopology(amazon_subgraph)
node_properties = NodeProperties(amazon_subgraph.nodes())
environment = RoutingEnvironment(amazon_subgraph, network_topology,
node_properties)
improved_stable_agent =
EnhancedStableQLearningAgent(list(amazon_subgraph.nodes()),
num_states, num_actions, num_service_levels, learning_rate,
discount_factor, initial_exploration_prob, final_exploration_prob,
exploration_decay)
(dijkstra_total_latency, improved_stable_rl_total_latency)
Output: