如何将真实配送数据喂给py-ga-VRPTW:自定义问题实例完全教程

如何将真实配送数据喂给py-ga-VRPTW:自定义问题实例完全教程 如何将真实配送数据喂给py-ga-VRPTW自定义问题实例完全教程【免费下载链接】py-ga-VRPTWA Python Implementation of a Genetic Algorithm-based Solution to Vehicle Routing Problem with Time Windows项目地址: https://gitcode.com/gh_mirrors/py/py-ga-VRPTWpy-ga-VRPTW 是一个基于遗传算法求解带时间窗车辆路径问题VRPTW的 Python 项目。本教程面向新手手把手教你把真实的配送数据整理成自定义问题实例用 4 个步骤即可跑通完整求解流程无需修改任何算法源码。 为什么要用自定义问题实例项目自带了 57 个 Solomon 经典基准实例R1、C1、RC1 等系列适合学习算法。但如果你手上有真实的配送场景数据——比如仓库坐标、每个客户的收货时间窗、订单需求量——那么自定义问题实例才是真正派上用场的地方用 Solomon 实例验证算法能跑、对比论文结果用自定义实例解决你公司/课程里的真实配送排线问题好消息是项目对自定义实例的支持非常完整你只需要准备一个文本文件 运行两个脚本。 第一步理解数据需要哪些字段一个 VRPTW 实例由 4 类数据组成对照你的真实业务数据逐项填写即可数据项对应字段说明车辆信息最大车辆数 K、单车容量 Q仓库最多派几辆车、每辆车能装多少货仓库Depot坐标、营业时间窗、需求量编号固定为0所有车辆必须从仓库出发并返回客户坐标、需求量、最早可服务时间、最晚服务时间、服务时长时间窗就是客户愿意收货的时段距离无需手填转换脚本会按欧几里得距离自动计算距离矩阵 一个关键设定时间单位与距离单位等价行驶 100 个距离单位 100 个时间单位所以坐标和时间窗的数值尺度要合理对应。项目自带了一个现成的自定义实例样例强烈建议先打开它对照学习data/text_customize/Customized_Data.txt。✍️ 第二步编写文本文件格式是固定的这是最容易出错的一步。转换脚本按固定行号解析文件所以文件布局必须严格遵循下面的结构以 100 个客户为例Customized_Data ← 第1行实例名称第1行 VEHICLE ← 第3行 NUMBER CAPACITY ← 第4行 25 200 ← 第5行车辆数 和 容量 CUSTOMER ← 第7行 CUST NO. XCOORD. YCOORD. DEMAND READY TIME DUE DATE SERVICE TIME ← 第9行空行 0 40 50 0 0 1236 0 ← 第10行仓库 1 45 68 10 912 967 90 ← 第11行起客户1 2 45 70 30 825 870 90 ... 100 55 85 20 647 726 90对照样例文件 Customized_Data.txt 的真实内容每一行客户数据的 7 个数字依次是CUST NO.客户编号从 1 到 100XCOORD.X 坐标YCOORD.Y 坐标DEMAND需求量READY TIME最早可开始服务时间DUE DATE最晚必须开始服务时间SERVICE TIME服务时长⚠️ 三个硬性要求务必遵守前 10 行的布局空行、表头位置不能改动解析逻辑见 text2json 函数中line_count in [2, 3, 4, 6, 7, 8, 9]的固定跳过规则客户数量固定为100 个编号 1~100转换脚本内部硬编码了range(1, 101)第 1 行的实例名称必须与你想要的 JSON 文件名一致⚙️ 第三步一键转换为 JSON把写好的文本文件放进data/text_customize/目录注意不是data/text/那是 Solomon 基准数据的目录然后运行python text2json_customize.py脚本会自动完成两件事解析文本文件生成data/json_customize/实例名称.json自动计算 101×101 的距离矩阵欧几里得距离见 calculate_distance 函数——你完全不用手算任何距离转换完成后data/json_customize/Customized_Data.json中会包含instance_name、max_vehicle_number、vehicle_capacity、depart、customer_1~customer_100以及distance_matrix等字段与基准实例的 JSON 结构完全一致。 第四步修改脚本并运行遗传算法参考项目自带的样例脚本sample_customized_data.py核心配置只有 5 处instance_name Customized_Data # 必须与 JSON 文件名一致 ind_size 100 # 个体长度 客户数量 pop_size 400 # 种群规模 n_gen 300 # 进化代数 customize_data True # ★ 关键开关从 json_customize 目录加载数据完整调用形式为run_gavrptw(instance_name..., unit_cost..., init_cost..., wait_cost..., delay_cost..., ind_size..., pop_size..., cx_pb..., mut_pb..., n_gen..., export_csv..., customize_data...)四个成本参数的含义是参数含义unit_cost每单位距离的运输成本init_cost每辆车的启用出车成本wait_cost早到客户处的单位时间等待成本delay_cost晚于时间窗的单位时间延迟成本⚠️最关键的开关是customize_data True。根据 core.py 中run_gavrptw()的逻辑该参数为True时从data/json_customize/加载数据否则从data/json/加载基准数据——漏改这个参数程序不会报错只是悄悄读错了数据源。运行前请先 clone 并安装依赖git clone https://gitcode.com/gh_mirrors/py/py-ga-VRPTW cd py-ga-VRPTW python3 -m venv venv source venv/bin/activate pip install -r requirements.txt然后执行python sample_customized_data.py 如何读懂运行结果运行结束后屏幕会打印出Best individual最优个体一串 100 位客户编号序列即基因的编码方式Fitness适应度值总成本的倒数越大越好各车辆路线解码后的路径形如Vehicle 1s route: 0 - 5 - 3 - 2 - 0Total cost总成本这才是你最终关心的配送成本同时一个 CSV 日志文件会被写入results/目录文件名自动包含全部参数例如Customized_Data_uC8.0_iC100.0_wC1.0_dC1.5_iS100_pS400_cP0.85_mP0.02_nG300.csv文件内含每一代的min_fitness、max_fitness、avg_fitness、std_fitness可以据此观察算法收敛情况。将export_csv设为False可关闭日志导出。 新手最常踩的 5 个坑文件名与 instance_name 不一致→ 程序打印 does not exist 后直接退出。data/json_customize/MyData.json必须对应instance_name MyData客户数量不是 100 个→ 转换脚本只识别 1~100 号客户多写的行会被当作第 100 行之后的内容报错或忽略ind_size与客户数不匹配→ 100 个客户必须配ind_size 100否则基因长度错误文件放错目录→ 自定义文本文件放data/text_customize/自定义 JSON 放data/json_customize/时间窗设置不合理→ 若所有客户时间窗之和远超仓库营业截止时间depart的 DUE DATE大部分路线会被判定不可行请适当放宽时间窗或加大容量 Q️ 相关文件速查文件/目录作用data/text_customize/Customized_Data.txt自定义实例文本样例data/json_customize/Customized_Data.json转换后的 JSON 样例text2json_customize.py一键 txt→json 转换脚本sample_customized_data.py自定义实例运行样例gavrptw/core.py遗传算法核心run_gavrptw、路线解码gavrptw/utils.py数据加载、距离计算、格式转换工具results/算法运行的 CSV 日志输出按照以上 4 步操作你就可以把自己的真实配送数据喂给 py-ga-VRPTW 求解了。祝你的车队排线顺利【免费下载链接】py-ga-VRPTWA Python Implementation of a Genetic Algorithm-based Solution to Vehicle Routing Problem with Time Windows项目地址: https://gitcode.com/gh_mirrors/py/py-ga-VRPTW创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考