def main():
    maps_file = '../input/stores.xlsx'
    initial_solution_file = '../results/4-simulated_annealing.xls'
    output_file = '../results/5-ant_coloy_opt.xls'

    print("[INFO] Reading store information from: {}".format(maps_file))
    maps = Maps(maps_file)

    print("[INFO] Reading initial solution from: {}".format(initial_solution_file))
    schedule = Schedule()
    valid_solution = schedule.read_from_xls(initial_solution_file, maps)
    if not valid_solution:
        print("[ERROR] Abort: initial solution contains invalid route(s)")
        return False
    else:
        print("[INFO] Start ACO to optimize each route")
        aco = ACO(maps)
        aco.optimize_all(schedule)
        print("[INFO] ACO best schedule score: {}".format(schedule.total_distance))

        print("[INFO] Export solution to: {}".format(output_file))
        ## Printing and drawing solution
        # for k in schedule.routes:
        #     print(schedule.routes[k])
        # schedule.draw(maps)
        schedule.export_to_xls(output_file, maps)
Ejemplo n.º 2
0
def main():
    maps_file = '../input/stores.xlsx'
    initial_solution_file = '../results/1-nearest_neighbors.xls'
    output_file = '../results/2-two_edge_exchange.xls'

    print("[INFO] Reading store information from: {}".format(maps_file))
    maps = Maps(maps_file)

    print("[INFO] Reading initial solution from: {}".format(
        initial_solution_file))
    schedule = Schedule()
    valid_solution = schedule.read_from_xls(initial_solution_file, maps)

    if not valid_solution:
        print("[ERROR] Abort: initial solution contains invalid route(s)")
        return False
    else:
        print("[INFO] Initialise neighbors for 2-edge exchange")
        tex = TwoEdgeExchange(schedule, maps)
        print("[INFO] Start improving with 2-edge exchange")
        log = tex.solve()
        print("[INFO] 2-edge exchange best score: {:.2f}".format(
            schedule.total_distance))
        print("[INFO] Export solution to: {}".format(output_file))
        schedule.export_to_xls(output_file, maps)
Ejemplo n.º 3
0
def main():
    maps_file = '../input/stores.xlsx'
    initial_solution_file = '../results/2-two_edge_exchange.xls'
    output_file = '../results/3-tabu_search.xls'

    print("[INFO] Reading store information from: {}".format(maps_file))
    maps = Maps(maps_file)

    print("[INFO] Reading initial solution from: {}".format(
        initial_solution_file))
    schedule = Schedule()
    valid_solution = schedule.read_from_xls(initial_solution_file, maps)

    if not valid_solution:
        print("[ERROR] Abort: initial solution contains invalid route(s)")
        return False
    else:
        print("[INFO] Start improving schedule with Tabu Search")
        ts = TabuSearch(schedule, maps, tabu_period=50)

        ## I use this configuration to get the result,
        ## but it will take approx. 1 hour to run
        # if not ts.solve(max_iter=5000, max_no_improvement=100):
        #     return False

        # configuration used for testing
        if not ts.solve(max_iter=100, max_no_improvement=None):
            return False

        schedule = ts.best_schedule
        print("[INFO] Tabu search best score: {:.2f}".format(
            schedule.total_distance))

        ## Plotting score for each iterations
        # plt.plot(ts.log)
        # plt.show()
        print("[INFO] Export solution to: {}".format(output_file))
        schedule.export_to_xls(output_file, maps)
        return True