コード例 #1
0
ファイル: load_input.py プロジェクト: ManhPP/WSN
    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)
コード例 #2
0
    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)
コード例 #3
0
ファイル: prepare_data.py プロジェクト: ManhPP/WSN
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
コード例 #4
0
ファイル: edge.py プロジェクト: ManhPP/WSN
 def __init__(self, v1: Vertex = None, v2: Vertex = None):
     self.vertices = sorted([v1, v2], key=lambda x: x.name)
     self._distance = distance(v1,v2)
コード例 #5
0
ファイル: edge.py プロジェクト: datvithanh/WSN
 def __init__(self, src: Vertex = None, dst: Vertex = None):
     self._src_vertex = src
     self._dst_vertex = dst
     self._distance = distance(src, dst)