class Simulation: def __init__(self, nodes): self.nodes = nodes self.node_manager = NodeManager() for node in self.nodes: self.node_manager.add_node(node) self.node_manager.update_node(node) self.node_manager.commit(time.time()) self.steps = 0 def step(self, action): self.steps += 1 for index, node in enumerate(self.nodes): new_energy_value = node.update(action) if (new_energy_value is not None): self.node_manager.update_node(node) self.node_manager.commit(time.time()) new_state = self.get_state() reward = self.calculate_reward(new_state, action) done = self.isDone() return new_state, reward, done def calculate_reward(self, energy_values, action): nulls = energy_values.isnull().sum(axis=1).iloc[0] # energy_too_low = self.get_state().mean(axis=1).iloc[0] < 1.8 for value in energy_values: if energy_values[value].iloc[0] < 1.8: return -100 if (nulls > 0): reward = -100 elif (action is Action.CHARGE): reward = -1 elif (action is Action.GATHER): reward = 1 else: reward = 0 return reward def get_state(self): return self.node_manager.get_most_recent_state().fillna(value=0) def isDone(self): energy_too_low = (self.get_state().mean(axis=1).iloc[0] < 1.8) return energy_too_low or (self.steps > 10000) # nodes = [] # nodes.append(Node(1, 5)) # nodes.append(Node(2, 5)) # nodes.append(Node(3, 5)) # sim = Simulation(nodes) # actions = [Action.CHARGE, Action.GATHER, Action.GATHER] # new_state, reward, done = sim.step(actions)
#!/usr/bin/python import os import cgi, cgitb from node_manager import NodeManager from cgi_utils import send_response form = cgi.FieldStorage() node_id = form.getvalue('node_id') node_name = form.getvalue('node_name') nm = NodeManager() nm.add_node(node_id, node_name) send_response({}, 0)
from node_manager import NodeManager, Node import time manager = NodeManager() node1 = Node(1, 5) node2 = Node(2, 5) print("Add nodes") manager.add_node(node1) manager.add_node(node2) print(manager.history) node1.energy_level = 2 print("Update the energy value of a node") manager.update_node(node1) manager.commit(time.time()) print(manager.history) print("Check if node 1 is in the system") print(manager.node_is_in_system(node1.node_id)) print("Check if node with id 3 is in the system") print(manager.node_is_in_system(3))