概览
所有字段以收录时的公开信息为准
- 项目名称
- 遗传算法求解路径规划
- 原始名称
- 未提供
- 别名
- 基于遗传算法的路径规划、遗传算法、路径规划、GA 路径规划、遗传算法路径优化
- 一句话简介
- 用遗传算法求解路径顺序优化,带种群、交叉、变异和适应度断言。
- 详细介绍
单文件 Python 示例:把一条访问顺序编码成染色体,用选择、交叉、变异迭代出更短路径。脚本固定随机种子并内置适应度断言,运行后会打印初始顺序和优化后的距离。适合作为遗传算法的第一个可运行样例,再扩展成带障碍物的二维栅格规划。
- 分类
- 算法与数学建模
- 语言
- Python
- 技术栈
- 未提供
- 上手难度
- 进阶
- Star 数
- 未提供
- 许可证
- MIT
- 作者
- 开源拾遗
获取方式
优先使用原始仓库
本项目通过以下方式获取:站内代码片段
站内代码片段
102 行
文件snippets/ga-path-planning.py
"""遗传算法求解路径规划(旅行商问题 TSP)—— 站内原创示例代码
用途:给定若干地点的二维坐标,用遗传算法搜索一条访问所有地点一次并回到起点、
且总距离尽量短的路线。常见于「基于遗传算法的路径规划」类课程设计。
依赖:仅 Python 标准库(random / math)。
运行:python ga-path-planning.py
许可:MIT(开源拾遗原创,可自由使用与修改)
"""
import math
import random
# 十个地点的坐标(可换成你自己的地图数据)
POINTS = [
(2, 3), (5, 9), (8, 4), (12, 8), (15, 2),
(18, 11), (21, 6), (24, 14), (27, 3), (30, 9),
]
POPULATION_SIZE = 80
GENERATIONS = 300
MUTATION_RATE = 0.2
ELITE = 4
SEED = 42
def distance(a, b):
return math.hypot(a[0] - b[0], a[1] - b[1])
def route_length(route):
"""一条路线的总长度(首尾相连)。"""
total = 0.0
for i in range(len(route)):
total += distance(POINTS[route[i]], POINTS[route[(i + 1) % len(route)]])
return total
def random_route():
route = list(range(len(POINTS)))
random.shuffle(route)
return route
def ordered_crossover(parent_a, parent_b):
"""顺序交叉(OX):保留一段连续基因,其余按另一父代的相对顺序填充。"""
n = len(parent_a)
start, end = sorted(random.sample(range(n), 2))
child = [None] * n
child[start:end + 1] = parent_a[start:end + 1]
fill = [gene for gene in parent_b if gene not in child]
index = 0
for i in range(n):
if child[i] is None:
child[i] = fill[index]
index += 1
return child
def mutate(route):
"""交换变异:随机交换两个位置。"""
if random.random() < MUTATION_RATE:
i, j = random.sample(range(len(route)), 2)
route[i], route[j] = route[j], route[i]
return route
def tournament_select(population, k=3):
contenders = random.sample(population, k)
return min(contenders, key=route_length)
def solve():
population = [random_route() for _ in range(POPULATION_SIZE)]
best = min(population, key=route_length)
for _ in range(GENERATIONS):
population.sort(key=route_length)
next_generation = population[:ELITE] # 精英保留,保证不退化
while len(next_generation) < POPULATION_SIZE:
child = ordered_crossover(tournament_select(population), tournament_select(population))
next_generation.append(mutate(child))
population = next_generation
best = min(best, min(population, key=route_length), key=route_length)
return best
if __name__ == "__main__":
random.seed(SEED) # 固定随机种子,结果可复现
baseline = route_length(list(range(len(POINTS))))
best_route = solve()
best_length = route_length(best_route)
print("地点数量:", len(POINTS))
print("初始顺序长度: %.2f" % baseline)
print("优化后长度: %.2f" % best_length)
print("最优路线:", " -> ".join(str(i) for i in best_route))
# 自检:必须访问每个地点且只访问一次;结果应优于初始顺序
assert sorted(best_route) == list(range(len(POINTS)))
assert best_length < baseline, (best_length, baseline)
print("断言通过")
站内原创示例代码,仅演示核心思路,许可证为 MIT。本条目为站内整理内容,未提供原始仓库地址。
安装与运行
命令均来自公开资料
环境与依赖
- Python 3.9+
安装命令
未提供
运行命令
python snippets/ga-path-planning.py
数据与硬件
未核实的字段不会编造
- 数据集说明
- 未提供
- 硬件要求
- 未提供
运行验证状态
四态徽章
实验已验证
已按说明完成安装、启动,并跑通实验或核心流程,结果可复现。
- 未测试
- 依赖安装已测试
- 基本启动已测试
- 实验已验证
说明:只有真正执行过对应步骤才会升级状态;未测试 表示仅核对了公开信息。
- 当前状态
- 实验已验证
- 最后核对
- 2026-10-18
- 核对版本
- 待核实
- 验证说明
已在本机 Python 3.14.6 实际运行:初始顺序 95.51,优化后 69.00,内置断言通过。
许可证与引用
转载与引用请保留出处
- 许可证
- MIT
- 作者 / 组织
- 开源拾遗
- 原始仓库
- 未提供
- 核对版本
- 待核实
- 最后核对
- 2026-10-18
- 收录日期
- 2026-10-18
引用建议
遗传算法求解路径规划 / 开源拾遗. 《开源拾遗》收录,收录日期 2026-10-18,最后核对 2026-10-18. 许可证:MIT.
许可证以原始仓库的 LICENSE 文件为准;本站不对许可证做法律判断。