Ejemplo n.º 1
0
def main(args):
    filename = args.file
    num_ants = args.ants
    iterations = args.iterations
    pher = 0.5
    a = args.alpha
    b = args.beta
    decay = args.decay
    seed = args.seed
    stats = args.stats

    num_points, p_median, points = read_input(filename)

    aco = AntColony(num_ants,
                    iterations,
                    pher,
                    a,
                    b,
                    decay,
                    seed=seed,
                    stat_file=stats)
    aco.set_data(num_points, p_median, points)

    solution = aco.run()

    print('Best distance: ' + str(solution))
Ejemplo n.º 2
0
                        type=int)
    parser.add_argument('iterations',
                        help='the number of iterations to be \
                        perfomed by the algorithm',
                        type=int)
    parser.add_argument('map', help = 'the map to calculate the path from', \
                        type = str)
    parser.add_argument('p', help = 'controls the amount of pheromone that is \
                        evaporated, range[0-1], precision 0.05'                                                               , \
                        type = float, choices = \
                        np.around(np.arange(0.0,1.05,0.05),decimals = 2))
    parser.add_argument('Q', help = 'controls the amount of pheromone that is \
                        added'                              , \
                        type = float)
    parser.add_argument('-d','--display', default = 0, action = 'count', \
                        help = 'display the map and the \
                        resulting path'                                       )
    args = parser.parse_args()
    return args.ants, args.iterations, args.map, args.p, args.Q, args.display


if __name__ == '__main__':
    ants, iterations, map_path, p, Q, display = arguments_parsing()
    # Get the map
    Map = Map(map_path)
    Colony = AntColony(Map, ants, iterations, p, Q)
    path = Colony.calculate_path()
    print path
    if display > 0:
        Map.represent_path(path)
beta = 2  # Visibility factor
e = .5  # Evaporation rate
el = 2  # Amount of elite ants

# Matrices
am = get_adjacency_matrix(M)
dist_m = fill_dis_matr(M)  # Distances matrix
pheromones = np.ones((M, M))

print_matrix(am, M, "Adjacency Matrix")
print_matrix(pheromones, M, "Pheromones Matrix")
plot_graph(am, dist_m)

full_search_result = full_search.find_best_way(dist_m)

ac = AntColony(distances=dist_m,
               n_ants=M,
               n_best=2,
               n_iterations=100,
               decay=0.5,
               alpha=1,
               beta=1)
aco_result = ac.run()


def main():
    pass


if __name__ == '__main__':
    main()
Ejemplo n.º 4
0
end_num = 90

for line in sys.stdin:
    line = line.strip()
    dic = line
    dic = json.loads(dic) #we make dictionary from string

    all_ants = float(dic['n_ants'])
    distances = np.asarray(dic['distances'])
    pheromones = np.asarray(dic['pheromones'])

    upper_bond = int(math.ceil(all_ants/batch_size))

    for splits_number in range(upper_bond):
        dic2 = dic.copy()
        if batch_size*(1+splits_number) < all_ants:
            dic2['n_ants'] = batch_size
            dic2['n_best'] = dic2['n_ants']
        else:
            dic2['n_ants'] = int(all_ants - splits_number*batch_size)
            dic2['n_best'] = dic2['n_ants']

        ant_colony = AntColony(distances, dic2['n_ants'], dic2['n_iterations']-1, dic2['decay'], dic2['alpha'],
                               dic2['beta'], pheromones)
        shortest_path, new_pheromone = ant_colony.run(start_num, end_num)

        dic2['distances'] = dic['distances']
        dic2['pheromones'] = dic['pheromones']

        print('%s\t%s' % (shortest_path, json.dumps(dic2)))
Ejemplo n.º 5
0
#!/usr/bin/env python
from aco import AntColony
import numpy as np
import json
import sys

start_num = 1
end_num = 90

input_copy_filename = "../data/input500_10_800.txt"

file_input_copy = open(input_copy_filename, "r")

for input_copy in file_input_copy:
    dic = input_copy.strip()

dic = json.loads(dic)

dic['distances'] = np.asarray(dic['distances'])

ant_colony = AntColony(dic['distances'], dic['n_ants'], dic['n_iterations'],
                       dic['decay'], dic['alpha'], dic['beta'])

optimal_path = ant_colony.run(start_num, end_num)

print(optimal_path[1])
Ejemplo n.º 6
0
    parser.add_argument("--asys", action="store_true")
    parser.add_argument("--eas", action="store_true")
    parser.add_argument("--ras", action="store_true")
    parser.add_argument("--mmas", action="store_true")
    parser.add_argument("--bwas", action="store_true")
    parser.add_argument("--acs", action="store_true")
    parser.add_argument("--quiet", action="store_true")

    args = parser.parse_args()

    return args


if __name__ == "__main__":

    args = parse_arguments()
    heuristic = Metaheuristic(args)

    tsplibfile = args.tsplibfile
    instance = TSP(tsplibfile)

    n = instance.n
    heuristic.update_parameters(n)

    nn = max(heuristic.nn_ls, heuristic.nn_ants)
    instance.compute_nn_lists(nn)
    instance.report("instance_report.txt")

    ant_colony = AntColony(heuristic, instance)
    ant_colony.report("ant_colony_report.txt")
Ejemplo n.º 7
0
pheromone_filename = sys.argv[1]
input_copy_filename = sys.argv[2]

file_pheromone = open(pheromone_filename, "r")
file_input_copy = open(input_copy_filename, "r")

for pheromone in file_pheromone:
    new_pheromone = pheromone

for input_copy in file_input_copy:
    dic = input_copy.strip()

dic = json.loads(dic)
new_pheromone = json.loads(new_pheromone)

dic['distances'] = np.asarray(dic['distances'])
dic['pheromones'] = np.asarray(new_pheromone['pheromones'])

ant_colony = AntColony(dic['distances'], dic['n_ants'], dic['n_iterations'],
                       dic['decay'], dic['alpha'], dic['beta'],
                       dic['pheromones'])
ant_colony.update_pheromone()

dic['distances'] = np.array(dic['distances']).tolist()
dic['pheromones'] = dic['pheromones'].tolist()

#print(dic['pheromones'])

with open('./' + sys.argv[2], 'w') as file:
    file.write(json.dumps(dic))
Ejemplo n.º 8
0
import sys
import ast
from aco import AntColony
import numpy as np
import json

start_num = 1
end_num = 90
init_pheromone = []

for line in sys.stdin:
    line = line.strip()
    splits_number, dic = line.split('\t', 1)
    dic = json.loads(dic)
    dic['distances'] = np.asarray(dic['distances'])
    dic['pheromones'] = np.asarray(dic['pheromones'])

    if init_pheromone == []:
        init_pheromone = dic['pheromones']

    #dic['distances'] = eval(dic['distances'])

    ant_colony = AntColony(dic['distances'], dic['n_ants'],
                           dic['n_iterations'], dic['decay'], dic['alpha'],
                           dic['beta'], dic['pheromones'])
    #ant_colony['pheromones'] = dic['pheromones']
    new_pheromone = ant_colony.run_reducer(start_num, end_num)
    init_pheromone = np.add(init_pheromone, new_pheromone)
out_pheromone = {'pheromones': init_pheromone.tolist()}
#out_pheromone = {'pheromones':init_pheromone}
print('%s' % json.dumps(out_pheromone))
Ejemplo n.º 9
0
import numpy as np
import time

start_num = 1
end_num = 90
all_time_pheromones = []
all_time_shortest_path = [None, np.inf]

for line in sys.stdin:
    line = line.strip()
    shortest_path, dic = line.split('\t', 1)
    dic = json.loads(dic)
    new_pheromone = np.asarray(dic['pheromones'])
    shortest_path = eval(shortest_path)

    if all_time_shortest_path[1] > shortest_path[1]:
        all_time_shortest_path = shortest_path

    if all_time_pheromones == []:
        all_time_pheromones = new_pheromone
    else:
        all_time_pheromones = np.add(all_time_pheromones, new_pheromone)

dic['distances'] = np.asarray(dic['distances'])
ant_colony = AntColony(dic['distances'], dic['n_ants'], 1, dic['decay'],
                       dic['alpha'], dic['beta'], all_time_pheromones)
shortest_path, new_pheromone = ant_colony.run(start_num, end_num)

if all_time_shortest_path[1] > shortest_path[1]:
    all_time_shortest_path = shortest_path
print(all_time_shortest_path)