import os dir = "c_prob/" def ant_colony_opt(instance): fname = dir + instance.name + ".txt" # write .mat file for C++ with open(fname, "w") as f: for i in range(instance.nPoints): print(" ".join(map(str, instance.dist_matrix[i])), file=f) # single core params params = { "eil76": (0.75, 5, 0.5, 1000, 500, 217, 0), # 538 "d198": (0.9, 8, 0.4, 1000, 250, 125, 5), # 15871 "ch130": (0.9, 8, 0.4, 1000, 1750, 25, 30), # 6212 "kroA100": (0.9, 8, 0.4, 1000, 750, 100, 30), # 21378 "lin318": (0.9, 8, 0.4, 1000, 500, 32, 30), # 43171 "pcb442": (0.9, 8, 0.4, 1000, 450, 24, 3), # 52466 "pr439": (0.9, 8, 0.4, 1000, 1000, 15, 3), # 109721 "rat783": (0.9, 8, 0.4, 1000, 300, 28, 4), # 9218 "u1060": (0.9, 8, 0.4, 1000, 350, 8, 10), # 235506 "fl1577": (0.9, 8, 0.4, 1000, 50, 10, 7), # 23020 } alpha, beta, evap, weight, ants, loops, optruns = params[instance.name] # Call C++ program cmd = dir + "aco " + str(instance.nPoints) + " " + str(loops) + " " + str(ants) + \ " " + str(alpha) + " " + str(beta) + " " + str(evap) + " " + str(weight) + \ " " + str(optruns) + " < " + fname + " &2>/dev/null" print(cmd) solution = eval(os.popen(cmd).read()) solution.append(solution[0]) return solution