コード例 #1
0
ファイル: opt_2.py プロジェクト: wakanapo/hw6
    for i in range(N):
        for j in range(N):
            dist[i][j] = dist[j][i] = distance(cities[i], cities[j])
    path = [i for i in range(N)]
    while True:
        count = 0
        for i in range(N - 2):
            i1 = i + 1
            for j in range(i + 2, N):
                if j == N - 1:
                    j1 = 0
                else:
                    j1 = j + 1
                if i != 0 or j1 != 0:
                    l1 = dist[path[i]][path[i1]]
                    l2 = dist[path[j]][path[j1]]
                    l3 = dist[path[i]][path[j]]
                    l4 = dist[path[i1]][path[j1]]
                    if l1 + l2 > l3 + l4:
                        # つなぎかえる
                        new_path = path[i1:j+1]
                        path[i1:j+1] = new_path[::-1]
                        count += 1
        if count == 0: break
    return path

if __name__ == '__main__':
    assert len(sys.argv) > 1
    solution = opt_2(read_input(sys.argv[1]))
    print_solution(solution)
コード例 #2
0
    }
    solutionCity = []
    solution = []
    for city in cities:
        tan = gTan(G, city)
        dist = distance(G, city)
        area[getArea(G, city, tan, dist)].append(city)

    for x in goOut:
        areaGreedy[x].extend(goGreedy(area[x]))

    for x in goIn:
        areaGreedy[x].extend(goGreedy(area[x]))

    for i in order:
        solutionCity = mergeArea(solutionCity, areaGreedy[i])

    for city in solutionCity:
        solution.append(cities.index(city))
    # for n in order :
    #     for j in areaGreedy[n] :
    #         solution.append(cities.index(j))

    return solution


if __name__ == '__main__':
    assert len(sys.argv) > 1
    solution = solve(read_input(sys.argv[1]))
    print_solution(solution)
コード例 #3
0
    while True:
        if t <= Tend:
            break
        #set the initial temp
        for rt2 in range(int(len(cities) * 3)):
            newroute = getnewroute(route, rt2, n_len)
            new_total_dis = cacl_best(newroute, n_len, distence)
            delt = new_total_dis - total_dis
            if delt <= 0:
                route = newroute
                total_dis = new_total_dis
                if best_total_dis > new_total_dis:
                    best = newroute
                    best_total_dis = new_total_dis
            elif delt > 0:
                p = math.exp(-delt / t)
                ranp = random.uniform(0, 1)
                if ranp < p:
                    route = newroute
                    total_dis = new_total_dis
        t = t * a

    return best


if __name__ == "__main__":
    assert len(sys.argv) > 1
    cities = read_input(sys.argv[1])
    result = solve(cities)
    print_solution(result)
コード例 #4
0
ファイル: solver_mmpy.py プロジェクト: mrpy37/week5
    table[(1 << size1) - 1] = [(distance_table[i][0], 0) for i in xrange(1, size)]
    for v in xrange((1 << size1) - 2, 0, -1):
        tmp = [1e300] * size1
        for i in xrange(size1):
            if (1 << i) & v:
                tmp[i] = min0([(distance_table[i+1][j+1] + table[v | (1 << j)][j][0], j) \
                               for j in xrange(size1) if not (1 << j) & v])
        table[v] = tmp
    s = min0([(distance_table[i+1][0] + table[1 << i][i][0], i) for i in xrange(size1)])
    return s[0], get_min_path(table, size, s[1])

def get_min_path(table, size, p):
    path = [0, p + 1]
    v = 1 << p
    while len(path) < size:
        _, q = table[v][p]
        path.append(q + 1)
        v |= (1 << q)
        p = q
    return path

point_table = read_input(sys.argv[1])
point_size = len(point_table)
distance_table = distance(point_table)

min_len, min_path = tsp_dp1(point_size)
#min_len = tsp_dp(point_size)
#min_path = []
print min_len
print_solution(min_path)
コード例 #5
0
    path_length = 0
    for i in range(0, N):
        path_length += distance(cities[order_list[i]],
                                cities[order_list[i + 1]])
    path_length += distance(cities[order_list[N]], cities[0])
    return path_length


def list_all_orders_without_zero(N):  #start:0, goal:0
    all_cities = range(1, N)
    all_orders_without_zero = list(itertools.permutations(all_cities))
    return all_orders_without_zero


if __name__ == '__main__':
    assert len(sys.argv) > 1
    all_orders_without_zero = list_all_orders_without_zero(N)

    for order in all_orders_without_zero:
        with_zero = [0] + list(order) + [0]
        path_length = calculate_path_length(with_zero)
        if (min > path_length):
            min = path_length
            best_solution = with_zero

    best_solution.pop()  #最後の0を削除

    print("best solution is = {}, min path length = {}".format(
        best_solution, min))
    print_solution(best_solution)
コード例 #6
0
def main():
    solution = solve(read_input(sys.argv[1]))
    print_solution(solution)
コード例 #7
0
  total = 0
  while True:
    count = 0
    for i in range(datalen - 2):
      i1 = i + 1
      for j in range(i + 2, datalen):
        if j == datalen - 1:
          j1 = 0
        else:
          j1 = j + 1
        if i != 0 or j1 != 0:
          l1 = np.linalg.norm([data[root[i]] - data[root[i1]]])
          l2 = np.linalg.norm([data[root[j]] - data[root[j1]]])
          l3 = np.linalg.norm([data[root[i]] - data[root[j]]])
          l4 = np.linalg.norm([data[root[i1]] - data[root[j1]]])
          if l1 + l2 > l3 + l4:
            new_root = root[i1:j+1]
            root[i1:j+1] = new_root[::-1]
            count += 1
    total += count
    if count == 0: 
      break
  return root

if __name__ == '__main__':
    assert len(sys.argv) > 1
    data, datalen, root, ex_root = init_data(read_input(sys.argv[1]))
    root = nearest_n(data, datalen, root, ex_root)
    root = opt_2(data, datalen, root)
    print_solution(root)
コード例 #8
0
ファイル: mysample.py プロジェクト: mlieynua/week4-tsp
                        pass
                    else:
                        if key[0] not in idx_list: 
                            idx_list += key
 
                else:
                    if key[0] not in idx_list: 
                        idx_list += key
    
    for i in range(len(idx_list)):
        for j in range(len(idx_list)):
            if i==j:
                pass
            else:
                N = len(idx_list)
                try:
                    A, B, C, D =  idx_list[i], idx_list[i+1], idx_list[j], idx_list[(j+1) % N]
                    if distance(all_store[A],all_store[B]) + distance(all_store[C],all_store[D])> distance(all_store[A],all_store[C]) + distance(all_store[B],all_store[D]):
                        idx_list[i+1:j+1] = reversed(idx_list[i+1:j+1])

                except IndexError:
                    pass
                    
    
    #print(idx_list)
    #print(len(idx_list))
    #print([x for x in set(idx_list) if idx_list.count(x) > 1])
    #print(sorted(idx_list))
    #
    print_solution(idx_list)
コード例 #9
0
ファイル: make_set.py プロジェクト: wakanapo/hw6
from vortex import vortex
from kruskal import kruskal_greedy
from my_random import random_solve
from combine import optimize2, read_path

if __name__ == '__main__':
    assert len(sys.argv) > 1
    optimize = optimize(read_input(sys.argv[1]))
    optimize2 = optimize2(read_input(sys.argv[1]), read_path(sys.argv[2]))
    greedy = greedy(read_input(sys.argv[1]))
    opt_2 = opt_2(read_input(sys.argv[1]))
    or_opt = or_opt(read_input(sys.argv[1]))
    vortex = vortex(read_input(sys.argv[1]))
    kruskal = kruskal_greedy(read_input(sys.argv[1]))
   
    print_solution(or_opt)
    print_solution(or_opt)
    print_solution(vortex)
    print_solution(kruskal)
    print_solution(greedy)
    print_solution(greedy)
    print_solution(optimize)
    print_solution(optimize)
    print_solution(optimize)
    print_solution(optimize)
    print_solution(optimize2)
    print_solution(optimize2)
    print_solution(optimize2)
    print_solution(optimize2)
    print_solution(optimize2)
    print_solution(optimize2)