示例#1
0
文件: fitness.py 项目: datvithanh/WSN
def get_fitness(genes: list, max_hop: int = 20, constructor=None):
    if constructor is None:
        raise Exception("Error: Must init constructor!")
    g = constructor.gen_graph(genes)
    graph = g.graph
    vertices = g.vertices
    all_values = itertools.chain.from_iterable(graph.values())
    adjacent = list(set(all_values))
    list_send = []
    list_send_receive = []

    params, _ = parse_config()

    for i in vertices:
        if i in adjacent:
            if len(graph[i]) != 0:
                list_send_receive.append(i)
            else:
                list_send.append(i)

    result = 0
    for i in list_send:
        for j in g.vertices:
            if i in graph[j]:
                result += params[
                    'E_TX'] + params['epsilon_fs'] * i.get_distance(j)**2
                break
    for i in list_send_receive:
        for j in g.vertices:
            if i in graph[j]:
                result += i.num_child * (
                    params['E_RX'] + params['E_DA']
                ) + params['epsilon_mp'] * i.get_distance(j)**4
                break
    result *= params['l']

    for i in vertices:
        if i.hop > max_hop:
            print(i.hop)
            return float('inf')
        # result += 9999 * max(i.hop - max_hop, 0)

    return result
示例#2
0
            if j == inp.num_of_relay_positions:
                print("|", end='|')
        print()
        if i == inp.num_of_relay_positions:
            print("---" * 20)

    print("========")

    print('optimal value = ', solver.Objective().Value())
    print()
    print("Time = ", solver.WallTime(), " milliseconds")
    return dict_constant["l"] * solver.Objective().Value(
    ), connect_matrix_result, solver.WallTime()


if __name__ == '__main__':
    _dict_constant, _data_path = parse_config()
    logger = init_log()
    paths = glob.glob(_data_path)
    print(paths)
    # paths.reverse()
    for path in paths:
        logger.info("input path %s: ", path)
        _inp, _is_adj_matrix, _distance_matrix = prepare(path)
        result, connect_matrix, t = solve_by_or_tools(_inp, _is_adj_matrix,
                                                      _distance_matrix,
                                                      _dict_constant)
        # logger.info("Connected Matrix: \n%s", connect_matrix)
        logger.info("Result: %s", result)
        logger.info("Time: %s", t)
示例#3
0
文件: GA.py 项目: ManhPP/WSN
    size = min(len(ind1), len(ind2))
    rate = random.random()
    if rate < rate_threshold:
        for i in range(num_positions):
            if random.random() < indpb:
                ind1[i], ind2[i] = ind2[i], ind1[i]
    else:
        for i in range(num_positions, size):
            if random.random() < indpb:
                ind1[i], ind2[i] = ind2[i], ind1[i]

    return ind1, ind2


if __name__ == '__main__':
    params, _data_path = parse_config()
    logger = init_log()
    init_rate = [(1, 0), (0, 1), (0, 0)]
    for rate_mst, rate_spt in init_rate:
        params["rate_mst"] = rate_mst
        params["rate_spt"] = rate_spt
        logger.info("info param: %s" % params)

        for path in glob.glob(_data_path):
            t = time.time()
            logger.info("input path: %s" % path)
            inp = WsnInput.from_file(path)
            try:
                run_ga(inp, params, logger)
            except Exception as e:
                logger.info("Error: %s" % e)
示例#4
0
文件: fitness.py 项目: datvithanh/WSN
    result *= params['l']

    for i in vertices:
        if i.hop > max_hop:
            print(i.hop)
            return float('inf')
        # result += 9999 * max(i.hop - max_hop, 0)

    return result


def get_hop(g: Graph, vertex: Vertex):
    if vertex not in g.vertices:
        raise Exception("Error vertices not in graph: ", vertex)
    graph = g.graph

    def cal(v):
        sys.setrecursionlimit(1500)
        if v == g.vertices[0]:
            return 0
        else:
            for i in g.vertices:
                if v in graph[i]:
                    return 1 + cal(i)

    return cal(vertex)


if __name__ == '__main__':
    print(parse_config())