def from_dict(cls, d): W = d['W'] H = d['H'] depth = d['depth'] height = d['height'] max_hop = d['max_hop'] num_of_relays = d['num_of_relays'] num_of_relay_positions = d['num_of_relay_positions'] num_of_sensors = d['num_of_sensors'] radius = d['radius'] relay_positions = [] sensors = [] name = 0 dict_ind2edge = {} BS = Vertex.from_dict(d['center'], "bs", name) name += 1 for i in range(num_of_relay_positions): relay_positions.append( Vertex.from_dict(d['relay_positions'][i], "relay", name)) name += 1 for i in range(num_of_sensors): sensors.append(Vertex.from_dict(d['sensors'][i], "sensor", name)) name += 1 all_vertex = [BS] all_vertex.extend(relay_positions) all_vertex.extend(sensors) for index_i in range(len(all_vertex)): i = all_vertex[index_i] for index_j in range(index_i + 1, len(all_vertex)): j = all_vertex[index_j] dis = distance(i, j) if (dis <= 2 * radius or (i.type_of_vertex == 'bs' and j.type_of_vertex == 'relay')) \ and distance(i, j) != 0: edge = Edge(i, j) if edge not in dict_ind2edge.values(): index = len(dict_ind2edge) dict_ind2edge[index + 1] = edge if j not in i.adjacent_vertices: i.add_adjacent_vertex(j) if i not in j.adjacent_vertices: j.add_adjacent_vertex(i) return cls(_W=W, _H=H, _depth=depth, _height=height, _max_hop=max_hop, _num_of_relay_positions=num_of_relay_positions, _num_of_relays=num_of_relays, _num_of_sensors=num_of_sensors, _radius=radius, _relay_positions=relay_positions, _sensors=sensors, _all_vertex=all_vertex, _bs=BS, _dict_ind2edge=dict_ind2edge)
def from_dict(cls, d): max_hop = d['H'] num_of_relays = d['num_of_relays'] num_of_relay_positions = d['num_of_relay_positions'] num_of_sensors = d['num_of_sensors'] radius = d['radius'] relay_positions = [] sensors = [] name = 0 BS = Vertex.from_dict(d['center'], "bs", name) name += 1 for i in range(num_of_relay_positions): relay_positions.append( Vertex.from_dict(d['relay_positions'][i], "relay", name)) name += 1 for i in range(num_of_sensors): sensors.append(Vertex.from_dict(d['sensors'][i], "sensor", name)) name += 1 all_vertex = [BS] all_vertex.extend(relay_positions) all_vertex.extend(sensors) for i in all_vertex: for j in all_vertex: if distance(i, j) <= radius and distance(i, j) != 0: i.add_adjacent_vertex(j) j.add_adjacent_vertex(i) return cls(max_hop, num_of_relay_positions, num_of_relays, num_of_sensors, radius, relay_positions, sensors, all_vertex, BS)
def prepare(path): inp = WsnInput.from_file(path) is_adj_matrix = [[0 for _ in range(len(inp.all_vertex))] for _ in range(len(inp.all_vertex))] distance_matrix = {} for i in inp.all_vertex: for j in inp.all_vertex: if j.name == 0: distance_matrix[i.name, j.name] = no_connect continue if i.name > 0 and j.name <= inp.num_of_relay_positions: distance_matrix[i.name, j.name] = no_connect continue if distance(i, j) <= 2 * inp.radius and distance(i, j) != 0: distance_matrix[i.name, j.name] = distance(i, j) is_adj_matrix[i.name][j.name] = 1 else: distance_matrix[i.name, j.name] = no_connect is_adj_matrix[i.name][j.name] = 0 return inp, is_adj_matrix, distance_matrix
def __init__(self, v1: Vertex = None, v2: Vertex = None): self.vertices = sorted([v1, v2], key=lambda x: x.name) self._distance = distance(v1,v2)
def __init__(self, src: Vertex = None, dst: Vertex = None): self._src_vertex = src self._dst_vertex = dst self._distance = distance(src, dst)