遗传算法python代码
以下是一个使用遗传算法解决旅行商问题的Python代码示例:
import random
# 创建一个随机的城市列表
def create_city_list(num_cities):
cities = []
for i in range(num_cities):
city = (random.random(), random.random())
cities.append(city)
return cities
# 计算两个城市之间的距离
def distance(city1, city2):
return ((city1[0] - city2[0])**2 + (city1[1] - city2[1])**2)**0.5
# 计算路径的总距离
def total_distance(cities, path):
total = 0
for i in range(len(path)-1):
total += distance(cities[path[i]], cities[path[i+1]])
return total
# 创建一个随机的路径
def create_path(num_cities):
path = list(range(num_cities))
random.shuffle(path)
return path
# 交叉操作
def crossover(path1, path2):
point1 = random.randint(0, len(path1)-1)
point2 = random.randint(0, len(path1)-1)
if point1 > point2:
point1, point2 = point2, point1
new_path = path1[:point1] + path2[point1:point2+1] + path1[point2+1:]
return new_path
# 变异操作
def mutate(path):
point1 = random.randint(0, len(path)-1)
point2 = random.randint(0, len(path)-1)
path[point1], path[point2] = path[point2], path[point1]
return path
# 选择操作
def selection(population, num_parents):
parents = []
for i in range(num_parents):
parents.append(population[random.randint(0, len(population)-1)])
return parents
# 创建初始种群
def create_population(num_cities, num_population):
population = []
for i in range(num_population):
population.append(create_path(num_cities))
return population
# 遗传算法主函数
def genetic_algorithm(num_cities, num_population, num_generations):
cities = create_city_list(num_cities)
population = create_population(num_cities, num_population)
for _ in range(num_generations):
new_population = []
for _ in range(num_population):
parents = selection(population, 2)
child = crossover(parents[0], parents[1])
child = mutate(child)
new_population.append(child)
population = new_population
best_path = min(population, key=lambda path: total_distance(cities, path))
return best_path
# 测试
num_cities = 10
num_population = 100
num_generations = 100
best_path = genetic_algorithm(num_cities, num_population, num_generations)
print("最短路径:", best_path)
这个代码使用遗传算法解决旅行商问题,其中包括创建随机城市列表、计算两个城市之间的距离、计算路径的总距离、创建随机路径、交叉操作、变异操作、选择操作、创建初始种群和遗传算法主函数等功能。在测试部分,代码使用了10个城市、100个种群和100代的参数进行测试,输出最短路径
原文地址: http://www.cveoy.top/t/topic/iZmI 著作权归作者所有。请勿转载和采集!