[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-mveres01--pytorch-drl4vrp":3,"tool-mveres01--pytorch-drl4vrp":65},[4,23,32,40,49,57],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":22},2268,"ML-For-Beginners","microsoft\u002FML-For-Beginners","ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程，旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周，包含 26 节精炼课程和 52 道配套测验，内容涵盖从基础概念到实际应用的完整流程，有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。\n\n无论是希望转型的开发者、需要补充算法背景的研究人员，还是对人工智能充满好奇的普通爱好者，都能从中受益。课程不仅提供了清晰的理论讲解，还强调动手实践，让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持，通过自动化机制提供了包括简体中文在内的 50 多种语言版本，极大地降低了全球不同背景用户的学习门槛。此外，项目采用开源协作模式，社区活跃且内容持续更新，确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路，ML-For-Beginners 将是理想的起点。",85092,2,"2026-04-10T11:13:16",[13,14,15,16,17,18,19,20,21],"图像","数据工具","视频","插件","Agent","其他","语言模型","开发框架","音频","ready",{"id":24,"name":25,"github_repo":26,"description_zh":27,"stars":28,"difficulty_score":29,"last_commit_at":30,"category_tags":31,"status":22},5784,"funNLP","fighting41love\u002FfunNLP","funNLP 是一个专为中文自然语言处理（NLP）打造的超级资源库，被誉为\"NLP 民工的乐园”。它并非单一的软件工具，而是一个汇集了海量开源项目、数据集、预训练模型和实用代码的综合性平台。\n\n面对中文 NLP 领域资源分散、入门门槛高以及特定场景数据匮乏的痛点，funNLP 提供了“一站式”解决方案。这里不仅涵盖了分词、命名实体识别、情感分析、文本摘要等基础任务的标准工具，还独特地收录了丰富的垂直领域资源，如法律、医疗、金融行业的专用词库与数据集，甚至包含古诗词生成、歌词创作等趣味应用。其核心亮点在于极高的全面性与实用性，从基础的字典词典到前沿的 BERT、GPT-2 模型代码，再到高质量的标注数据和竞赛方案，应有尽有。\n\n无论是刚刚踏入 NLP 领域的学生、需要快速验证想法的算法工程师，还是从事人工智能研究的学者，都能在这里找到急需的“武器弹药”。对于开发者而言，它能大幅减少寻找数据和复现模型的时间；对于研究者，它提供了丰富的基准测试资源和前沿技术参考。funNLP 以开放共享的精神，极大地降低了中文自然语言处理的开发与研究成本，是中文 AI 社区不可或缺的宝藏仓库。",79857,1,"2026-04-08T20:11:31",[19,14,18],{"id":33,"name":34,"github_repo":35,"description_zh":36,"stars":37,"difficulty_score":29,"last_commit_at":38,"category_tags":39,"status":22},5773,"cs-video-courses","Developer-Y\u002Fcs-video-courses","cs-video-courses 是一个精心整理的计算机科学视频课程清单，旨在为自学者提供系统化的学习路径。它汇集了全球知名高校（如加州大学伯克利分校、新南威尔士大学等）的完整课程录像，涵盖从编程基础、数据结构与算法，到操作系统、分布式系统、数据库等核心领域，并深入延伸至人工智能、机器学习、量子计算及区块链等前沿方向。\n\n面对网络上零散且质量参差不齐的教学资源，cs-video-courses 解决了学习者难以找到成体系、高难度大学级别课程的痛点。该项目严格筛选内容，仅收录真正的大学层级课程，排除了碎片化的简短教程或商业广告，确保用户能接触到严谨的学术内容。\n\n这份清单特别适合希望夯实计算机基础的开发者、需要补充特定领域知识的研究人员，以及渴望像在校生一样系统学习计算机科学的自学者。其独特的技术亮点在于分类极其详尽，不仅包含传统的软件工程与网络安全，还细分了生成式 AI、大语言模型、计算生物学等新兴学科，并直接链接至官方视频播放列表，让用户能一站式获取高质量的教育资源，免费享受世界顶尖大学的课堂体验。",79792,"2026-04-08T22:03:59",[18,13,14,20],{"id":41,"name":42,"github_repo":43,"description_zh":44,"stars":45,"difficulty_score":46,"last_commit_at":47,"category_tags":48,"status":22},3128,"ragflow","infiniflow\u002Fragflow","RAGFlow 是一款领先的开源检索增强生成（RAG）引擎，旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体（Agent）能力相结合，不仅支持从各类文档中高效提取知识，还能让模型基于这些知识进行逻辑推理和任务执行。\n\n在大模型应用中，幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构（如表格、图表及混合排版），显著提升了信息检索的准确度，从而有效减少模型“胡编乱造”的现象，确保回答既有据可依又具备时效性。其内置的智能体机制更进一步，使系统不仅能回答问题，还能自主规划步骤解决复杂问题。\n\n这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统，还是致力于探索大模型在垂直领域落地的创新者，都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口，既降低了非算法背景用户的上手门槛，也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目，它正成为连接通用大模型与行业专有知识之间的重要桥梁。",77062,3,"2026-04-04T04:44:48",[17,13,20,19,18],{"id":50,"name":51,"github_repo":52,"description_zh":53,"stars":54,"difficulty_score":46,"last_commit_at":55,"category_tags":56,"status":22},519,"PaddleOCR","PaddlePaddle\u002FPaddleOCR","PaddleOCR 是一款基于百度飞桨框架开发的高性能开源光学字符识别工具包。它的核心能力是将图片、PDF 等文档中的文字提取出来，转换成计算机可读取的结构化数据，让机器真正“看懂”图文内容。\n\n面对海量纸质或电子文档，PaddleOCR 解决了人工录入效率低、数字化成本高的问题。尤其在人工智能领域，它扮演着连接图像与大型语言模型（LLM）的桥梁角色，能将视觉信息直接转化为文本输入，助力智能问答、文档分析等应用场景落地。\n\nPaddleOCR 适合开发者、算法研究人员以及有文档自动化需求的普通用户。其技术优势十分明显：不仅支持全球 100 多种语言的识别，还能在 Windows、Linux、macOS 等多个系统上运行，并灵活适配 CPU、GPU、NPU 等各类硬件。作为一个轻量级且社区活跃的开源项目，PaddleOCR 既能满足快速集成的需求，也能支撑前沿的视觉语言研究，是处理文字识别任务的理想选择。",75370,"2026-04-11T11:15:34",[19,13,20,18],{"id":58,"name":59,"github_repo":60,"description_zh":61,"stars":62,"difficulty_score":29,"last_commit_at":63,"category_tags":64,"status":22},3215,"awesome-machine-learning","josephmisiti\u002Fawesome-machine-learning","awesome-machine-learning 是一份精心整理的机器学习资源清单，汇集了全球优秀的机器学习框架、库和软件工具。面对机器学习领域技术迭代快、资源分散且难以甄选的痛点，这份清单按编程语言（如 Python、C++、Go 等）和应用场景（如计算机视觉、自然语言处理、深度学习等）进行了系统化分类，帮助使用者快速定位高质量项目。\n\n它特别适合开发者、数据科学家及研究人员使用。无论是初学者寻找入门库，还是资深工程师对比不同语言的技术选型，都能从中获得极具价值的参考。此外，清单还延伸提供了免费书籍、在线课程、行业会议、技术博客及线下聚会等丰富资源，构建了从学习到实践的全链路支持体系。\n\n其独特亮点在于严格的维护标准：明确标记已停止维护或长期未更新的项目，确保推荐内容的时效性与可靠性。作为机器学习领域的“导航图”，awesome-machine-learning 以开源协作的方式持续更新，旨在降低技术探索门槛，让每一位从业者都能高效地站在巨人的肩膀上创新。",72149,"2026-04-03T21:50:24",[20,18],{"id":66,"github_repo":67,"name":68,"description_en":69,"description_zh":70,"ai_summary_zh":70,"readme_en":71,"readme_zh":72,"quickstart_zh":73,"use_case_zh":74,"hero_image_url":75,"owner_login":76,"owner_name":77,"owner_avatar_url":78,"owner_bio":79,"owner_company":79,"owner_location":79,"owner_email":79,"owner_twitter":79,"owner_website":79,"owner_url":80,"languages":81,"stars":86,"forks":87,"last_commit_at":88,"license":79,"difficulty_score":46,"env_os":89,"env_gpu":90,"env_ram":89,"env_deps":91,"category_tags":97,"github_topics":79,"view_count":10,"oss_zip_url":79,"oss_zip_packed_at":79,"status":22,"created_at":98,"updated_at":99,"faqs":100,"releases":120},6711,"mveres01\u002Fpytorch-drl4vrp","pytorch-drl4vrp","Implementation of: Nazari, Mohammadreza, et al. \"Deep Reinforcement Learning for Solving the Vehicle Routing Problem.\" arXiv preprint arXiv:1802.04240 (2018).","pytorch-drl4vrp 是一个基于 PyTorch 的开源项目，旨在利用深度强化学习（DRL）解决经典的组合优化难题，特别是旅行商问题（TSP）和车辆路径问题（VRP）。它复现了 Nazari 等人 2018 年的研究成果，通过训练智能体自动规划最优路径，以最小化行驶距离或成本。\n\n该工具主要面向人工智能研究人员、算法工程师以及对运筹优化感兴趣的高校学生。对于希望探索如何用神经网络替代传统启发式算法来解决动态路径规划问题的开发者来说，这是一个极具价值的参考实现。\n\n在技术亮点方面，pytorch-drl4vrp 对原始论文架构进行了一些实用化改进：例如使用 GRU 替代 LSTM 作为解码器网络以提升效率，并设计了特殊的“掩码机制”来处理 VRP 中复杂的动态约束（如车辆载重限制、客户需求变化及回库规则）。此外，项目支持通过命令行灵活调整任务类型和城市节点数量，并提供了预训练模型权重，方便用户快速复现结果或在此基础上进行二次开发。虽然目前测试阶段采用贪婪策略，但其生成的路径长度已接近论文报告的水平，是学习深度强化学习在物流调度领域应用的优秀入门工具。","# pytorch-drl4vrp\n\nImplementation of: Nazari, Mohammadreza, et al. \"Deep Reinforcement Learning for Solving the Vehicle Routing Problem.\" arXiv preprint arXiv:1802.04240 (2018).\n\nCurrently, Traveling Salesman Problems and Vehicle Routing Problems are supported. See the _tasks\u002F_ folder for details.\n\n## Requirements:\n\n* Python 3.6\n* pytorch=0.4.1\n* matplotlib\n\n# To Run\n\nRun by calling ```python trainer.py```\n\nTasks and complexity can be changed through the \"task\" and \"nodes\" flag:\n\n```python trainer.py --task=vrp --nodes=10```\n\nTo restore a checkpoint, you must specify the path to a folder that has \"actor.pt\" and \"critic.pt\" checkpoints. Sample weights can be found [here](https:\u002F\u002Fdrive.google.com\u002Fopen?id=1wxccGStVglspW-qIpUeMPXAGHh2HsFpF)\n\n```python trainer.py --task=vrp --nodes=10 --checkpoint=vrp10```\n## Differences from paper:\n\n* Uses a GRU instead of LSTM for the decoder network\n* Critic takes the raw static and dynamic input states and predicts a reward\n* Use demand scaling (MAX_DEMAND \u002F MAX_VEHICLE_CAPACITY), and give the depot for the VRP a negative value proportionate to the missing capacity (Unsure if used or not)\n\n## TSP Sample Tours:\n\n__Left__: TSP with 20 cities \n\n__Right__: TSP with 50 cities\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fmveres01_pytorch-drl4vrp_readme_d56f1e729382.png\" width=\"300\"\u002F>\n  \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fmveres01_pytorch-drl4vrp_readme_c15852540023.png\" width=\"300\"\u002F>\n\u003C\u002Fp>\n\n## VRP Sample Tours:\n\n__Left__: VRP with 10 cities + load 20 \n\n__Right__: VRP with 20 cities + load 30\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fmveres01_pytorch-drl4vrp_readme_b03beec2fdff.png\" width=\"300\"\u002F>\n  \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fmveres01_pytorch-drl4vrp_readme_b681516861fb.png\" width=\"300\"\u002F>\n\u003C\u002Fp>\n\n\n\n\n# TSP\n\nThe following masking scheme is used for the TSP:\n1. If a salesman has visited a city, it is not allowed to re-visit it. \n\n# VRP\n\nThe VRP deals with dynamic elements (load 'L', demand 'D') that change everytime the vehicle \u002F salesman visits a city. Each city is randomly generated with random demand in the range [1, 9]. The salesman has an initial capacity that changes with the complexity of the problem (e.g. number of nodes)\n\nThe following __masking scheme__ is used for the VRP:\n1. If there is no demand remaining at any city, end the tour. Note this means that the vehicle must return to the depot to complete\n2. The vehicle can visit any city, as long as it is able to fully satisfy demand (easy to modify for partial trips if needed)\n3. The vehicle may not visit the depot more then once in a row (to speed up training)\n4. A vehicle may only visit the depot twice or more in a row if it has completed its route and waiting for other vehicles to finish (e.g. training in a minibatch setting) \n\nIn this project the following dynamic updates are used:\n1. If a vehicle visits a city, its load changes according to: Load = Load - Demand_i, and the demand at the city changes according to: Demand_i = (Demand_i - load)+\n2. Returning to the vehicle refills the vehicles load. The depot is given a \"negative\" demand that increases proportional to the amount of load missing from the vehicle\n\n# Results:\n\n## Tour Accuracy\n\nThis repo only implements the \"Greedy\" approach during test time, which selects the city with the highest probability. Tour length comparing this project to the corresponding paper is reported below. Differences in tour length may likely be optimized further through hyperparameter search, which has not been conducted here. \n\n|               | Paper (\"Greedy\") | This  |\n|---------------|------------------|-------|\n| TSP20         | 3.97             | 4.032 |\n| TSP50         | 6.08             | 6.226 |\n| TSP100        | 8.44             |       |\n| VRP10 Cap 20  | 4.84             | 5.082 |\n| VRP20 Cap 30  | 6.59             | 6.904 |\n| VRP50 Cap 40  | 11.39            |       |\n| VRP100 Cap 50 | 17.23            |       |\n\n## Training Time\n\nOn a Tesla P-100 GPU, the following training times are observed. Results were obtained by taking the the total time for the first 100 training iterations (with respective batch sizes), and converting into the appopriate time unit. Note that for the VRP in particular, as models are relatively untrained during this time, this may be slightly inaccurate results and YMMV. \n\n| Task   | Batch Size | Sec \u002F 100 Updates | Min \u002F Epoch | Hours\u002FEpoch | 20 Epochs |\n|--------|------------|-------------------|-------------|-------------|-----------|\n| TSP20  | 128        | 8.23              | 10.71       | 0.18        | 3.57      |\n| TSP20  | 256        | 11.90             | 7.75        | 0.13        | 2.58      |\n| TSP20  | 512        | 19.10             | 6.22        | 0.10        | 2.07      |\n| TSP50  | 128        | 21.64             | 28.17       | 0.47        | 9.39      |\n| TSP50  | 256        | 31.33             | 20.40       | 0.34        | 6.80      |\n| TSP50  | 512        | 51.70             | 16.83       | 0.28        | 5.61      |\n| TSP100 | 128        | 48.27             | 62.85       | 1.05        | 20.95     |\n| TSP100 | 256        | 73.51             | 47.85       | 0.80        | 15.95     |\n\n| Task   | Batch Size | Sec \u002F 100 Updates | Min \u002F Epoch | Hours\u002FEpoch | 20 Epochs |\n|--------|------------|-------------------|-------------|-------------|-----------|\n| VRP10  | 128        | 12.15             | 15.82       | 0.26        | 5.27      |\n| VRP10  | 256        | 15.75             | 10.25       | 0.17        | 3.42      |\n| VRP10  | 512        | 23.30             | 7.58        | 0.13        | 2.53      |\n| VRP20  | 128        | 21.45             | 27.93       | 0.47        | 9.31      |\n| VRP20  | 256        | 28.29             | 18.42       | 0.31        | 6.14      |\n| VRP20  | 512        | 43.20             | 14.06       | 0.23        | 4.69      |\n| VRP50  | 128        | 53.59             | 69.77       | 1.16        | 23.26     |\n| VRP50  | 256        | 77.25             | 50.29       | 0.84        | 16.76     |\n| VRP50  | 512        | 127.73            | 41.58       | 0.69        | 13.86     |\n| VRP100 | 128        | 130.06            | 169.35      | 2.82        | 56.45     |\n| VRP100 | 64         | 95.03             | 247.48      | 4.12        | 82.49     |\n\n# Acknowledgements:\n\nThanks to https:\u002F\u002Fgithub.com\u002Fpemami4911\u002Fneural-combinatorial-rl-pytorch for insight on bug with random number generator on GPU\n","# pytorch-drl4vrp\n\n实现：Nazari, Mohammadreza 等人。“用于求解车辆路径问题的深度强化学习”。arXiv 预印本 arXiv:1802.04240 (2018)。\n\n目前支持旅行商问题和车辆路径问题。详情请参阅 _tasks\u002F_ 文件夹。\n\n## 要求：\n\n* Python 3.6\n* pytorch=0.4.1\n* matplotlib\n\n# 运行方法\n\n通过调用 ```python trainer.py``` 来运行。\n\n可以通过 “task” 和 “nodes” 标志来更改任务和复杂度：\n\n```python trainer.py --task=vrp --nodes=10```\n\n要恢复检查点，必须指定包含 “actor.pt” 和 “critic.pt” 检查点的文件夹路径。示例权重可在 [这里](https:\u002F\u002Fdrive.google.com\u002Fopen?id=1wxccGStVglspW-qIpUeMPXAGHh2HsFpF) 找到。\n\n```python trainer.py --task=vrp --nodes=10 --checkpoint=vrp10```\n## 与论文的不同之处：\n\n* 解码器网络使用 GRU 而不是 LSTM\n* 评论家直接接收原始的静态和动态输入状态，并预测奖励\n* 使用需求缩放（MAX_DEMAND \u002F MAX_VEHICLE_CAPACITY），并为 VRP 的配送中心赋予一个与剩余运力成比例的负值（不确定是否实际使用）\n\n## TSP 示例路线：\n\n__左__: 20 个城市 TSP \n\n__右__: 50 个城市 TSP\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fmveres01_pytorch-drl4vrp_readme_d56f1e729382.png\" width=\"300\"\u002F>\n  \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fmveres01_pytorch-drl4vrp_readme_c15852540023.png\" width=\"300\"\u002F>\n\u003C\u002Fp>\n\n## VRP 示例路线：\n\n__左__: 10 个城市 + 载重 20 的 VRP \n\n__右__: 20 个城市 + 载重 30 的 VRP\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fmveres01_pytorch-drl4vrp_readme_b03beec2fdff.png\" width=\"300\"\u002F>\n  \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fmveres01_pytorch-drl4vrp_readme_b681516861fb.png\" width=\"300\"\u002F>\n\u003C\u002Fp>\n\n\n\n\n# TSP\n\nTSP 使用以下掩码方案：\n1. 如果销售员已经访问过某个城市，则不允许再次访问。\n\n# VRP\n\nVRP 处理动态元素（载重 ‘L’、需求 ‘D’），这些元素在车辆\u002F销售员每次访问城市时都会发生变化。每个城市的需求随机生成，范围为 [1, 9]。销售员的初始运力会根据问题的复杂度（例如节点数量）而变化。\n\nVRP 使用以下 __掩码方案__：\n1. 如果任何城市的需求已耗尽，则结束行程。这意味着车辆必须返回配送中心才能完成。\n2. 只要车辆能够完全满足需求，就可以访问任何城市（如果需要，可以轻松修改为部分运输）。\n3. 车辆不能连续两次访问配送中心（以加快训练速度）。\n4. 只有当车辆已完成其路线并等待其他车辆完成时，才允许连续两次或多次访问配送中心（例如在小批量训练中）。\n\n在该项目中，使用了以下动态更新：\n1. 如果车辆访问某个城市，其载重将根据公式 Load = Load - Demand_i 进行调整，该城市的需求也将根据公式 Demand_i = (Demand_i - load)+ 进行更新。\n2. 返回配送中心时，车辆的载重会被重新装满。配送中心被赋予一个“负”需求，该需求会随着车辆剩余载重量的增加而增大。\n\n# 结果：\n\n## 行程准确性\n\n此仓库仅在测试时实现了“贪心”方法，即选择概率最高的城市。将本项目与相应论文相比，行程长度如下所示。行程长度的差异很可能可以通过超参数搜索进一步优化，但此处并未进行此类搜索。\n\n|               | 论文（“贪心”） | 本项目 |\n|---------------|------------------|-------|\n| TSP20         | 3.97             | 4.032 |\n| TSP50         | 6.08             | 6.226 |\n| TSP100        | 8.44             |       |\n| VRP10 容量 20  | 4.84             | 5.082 |\n| VRP20 容量 30  | 6.59             | 6.904 |\n| VRP50 容量 40  | 11.39            |       |\n| VRP100 容量 50 | 17.23            |       |\n\n## 训练时间\n\n在 Tesla P-100 GPU 上，观察到以下训练时间。结果是通过统计前 100 次训练迭代的总时间（使用相应的批次大小），并将其转换为相应的时间单位得出的。请注意，对于 VRP 特别是，在这段时间内模型尚未充分训练，因此这些结果可能略有不准确，具体情况因人而异。\n\n| 任务   | 批次大小 | 每 100 次更新所需时间（秒） | 每轮所需时间（分钟） | 每轮所需时间（小时） | 20 轮 |\n|--------|------------|-------------------|-------------|-------------|-----------|\n| TSP20  | 128        | 8.23              | 10.71       | 0.18        | 3.57      |\n| TSP20  | 256        | 11.90             | 7.75        | 0.13        | 2.58      |\n| TSP20  | 512        | 19.10             | 6.22        | 0.10        | 2.07      |\n| TSP50  | 128        | 21.64             | 28.17       | 0.47        | 9.39      |\n| TSP50  | 256        | 31.33             | 20.40       | 0.34        | 6.80      |\n| TSP50  | 512        | 51.70             | 16.83       | 0.28        | 5.61      |\n| TSP100 | 128        | 48.27             | 62.85       | 1.05        | 20.95     |\n| TSP100 | 256        | 73.51             | 47.85       | 0.80        | 15.95     |\n\n| 任务   | 批次大小 | 每 100 次更新所需时间（秒） | 每轮所需时间（分钟） | 每轮所需时间（小时） | 20 轮 |\n|--------|------------|-------------------|-------------|-------------|-----------|\n| VRP10  | 128        | 12.15             | 15.82       | 0.26        | 5.27      |\n| VRP10  | 256        | 15.75             | 10.25       | 0.17        | 3.42      |\n| VRP10  | 512        | 23.30             | 7.58        | 0.13        | 2.53      |\n| VRP20  | 128        | 21.45             | 27.93       | 0.47        | 9.31      |\n| VRP20  | 256        | 28.29             | 18.42       | 0.31        | 6.14      |\n| VRP20  | 512        | 43.20             | 14.06       | 0.23        | 4.69      |\n| VRP50  | 128        | 53.59             | 69.77       | 1.16        | 23.26     |\n| VRP50  | 256        | 77.25             | 50.29       | 0.84        | 16.76     |\n| VRP50  | 512        | 127.73            | 41.58       | 0.69        | 13.86     |\n| VRP100 | 128        | 130.06            | 169.35      | 2.82        | 56.45     |\n| VRP100 | 64         | 95.03             | 247.48      | 4.12        | 82.49     |\n\n# 致谢：\n\n感谢 https:\u002F\u002Fgithub.com\u002Fpemami4911\u002Fneural-combinatorial-rl-pytorch 提供关于 GPU 上随机数生成器错误的见解。","# pytorch-drl4vrp 快速上手指南\n\n本指南基于 Nazari 等人关于“利用深度强化学习解决车辆路径问题（VRP）”的论文实现，支持旅行商问题（TSP）和车辆路径问题（VRP）。\n\n## 环境准备\n\n在开始之前，请确保您的系统满足以下要求：\n\n*   **操作系统**：Linux \u002F macOS \u002F Windows\n*   **Python 版本**：3.6\n*   **核心依赖**：\n    *   PyTorch == 0.4.1\n    *   matplotlib\n\n> **注意**：由于该项目依赖较旧版本的 PyTorch (0.4.1)，建议创建独立的虚拟环境以避免版本冲突。国内用户可使用清华源或阿里源加速依赖安装。\n\n## 安装步骤\n\n1.  **克隆项目代码**\n    ```bash\n    git clone https:\u002F\u002Fgithub.com\u002Fyour-repo\u002Fpytorch-drl4vrp.git\n    cd pytorch-drl4vrp\n    ```\n\n2.  **创建并激活虚拟环境**\n    ```bash\n    python -m venv venv\n    source venv\u002Fbin\u002Factivate  # Windows 用户使用: venv\\Scripts\\activate\n    ```\n\n3.  **安装依赖**\n    国内用户推荐使用清华镜像源安装 PyTorch 特定版本及其他依赖：\n    ```bash\n    pip install torch==0.4.1 -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n    pip install matplotlib -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n    ```\n    *(注：如果 `pip` 无法直接找到 torch 0.4.1，可能需要前往 PyTorch 官网历史版本页面下载对应的 `.whl` 文件进行本地安装)*\n\n## 基本使用\n\n### 1. 启动训练\n最简单的运行方式是直接调用 `trainer.py`。默认情况下，您可以指定任务类型（`task`）和城市节点数量（`nodes`）。\n\n**示例：训练一个包含 10 个节点的 VRP 模型**\n```bash\npython trainer.py --task=vrp --nodes=10\n```\n\n**示例：训练一个包含 20 个城市的 TSP 模型**\n```bash\npython trainer.py --task=tsp --nodes=20\n```\n\n### 2. 加载预训练权重（断点续训）\n如果您希望从已有的检查点继续训练或测试，需指定包含 `actor.pt` 和 `critic.pt` 文件的文件夹路径。\n\n您可以从 [Google Drive](https:\u002F\u002Fdrive.google.com\u002Fopen?id=1wxccGStVglspW-qIpUeMPXAGHh2HsFpF) 下载示例权重，解压后执行：\n\n```bash\npython trainer.py --task=vrp --nodes=10 --checkpoint=vrp10\n```\n\n### 3. 结果说明\n*   **测试策略**：本项目在测试阶段仅实现了“贪心（Greedy）”策略，即每一步选择概率最高的城市。\n*   **性能参考**：在 Tesla P-100 GPU 上，TSP20 任务的贪心解长度约为 4.032（论文基准为 3.97）。通过进一步的超参数搜索，性能仍有优化空间。","某城市连锁生鲜超市的物流团队，每天需为分布在全市各处的 50 家门店规划最优补货路线，以应对动态变化的订单需求和车辆载重限制。\n\n### 没有 pytorch-drl4vrp 时\n- 依赖传统启发式算法（如节约里程法），面对门店需求实时变动时，无法快速重新计算最优路径，导致调度响应滞后。\n- 难以有效处理车辆容量约束与动态卸货逻辑，常出现车辆中途超载或空驶回仓的低效情况，增加燃油成本。\n- 每次新增门店或调整运力都需要人工重新建模和调参，开发周期长达数周，无法适应业务规模的快速扩张。\n- 缺乏端到端的智能训练框架，历史运输数据无法转化为决策模型，路线优化效果长期停滞不前。\n\n### 使用 pytorch-drl4vrp 后\n- 利用深度强化学习模型直接学习动态状态下的决策策略，能在秒级内根据实时订单需求生成新的最优配送路线。\n- 内置的掩码机制自动处理车辆载重更新与回仓补给逻辑，确保每趟行程严格满足容量约束，显著减少无效行驶里程。\n- 支持通过 `--nodes` 和 `--task` 参数灵活定义问题规模，从 10 个到 100 个配送点均可快速迁移训练，大幅缩短新场景落地时间。\n- 基于 PyTorch 构建的训练流程可复用历史运输数据进行持续迭代，随着数据积累，路线规划的平均成本持续降低。\n\npytorch-drl4vrp 将复杂的车辆路径问题转化为可学习的智能决策过程，让物流配送从“静态规则驱动”升级为“动态数据驱动”。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fmveres01_pytorch-drl4vrp_d56f1e72.png","mveres01","Matthew Veres","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002Fmveres01_ca255da9.png",null,"https:\u002F\u002Fgithub.com\u002Fmveres01",[82],{"name":83,"color":84,"percentage":85},"Python","#3572A5",100,533,122,"2026-04-05T03:08:15","未说明","训练阶段需要 NVIDIA GPU (README 提及在 Tesla P-100 上测试)，推理阶段未强制要求但建议使用；显存大小和 CUDA 版本未说明",{"notes":92,"python":93,"dependencies":94},"该工具基于较旧的 PyTorch 0.4.1 版本，与现代环境兼容性可能较差。支持旅行商问题 (TSP) 和车辆路径问题 (VRP)。运行训练需调用 trainer.py，可通过参数调整任务类型和城市节点数量。若需恢复训练，需提供包含 'actor.pt' 和 'critic.pt' 的检查点文件夹。","3.6",[95,96],"pytorch=0.4.1","matplotlib",[18],"2026-03-27T02:49:30.150509","2026-04-12T05:17:22.419092",[101,106,110,115],{"id":102,"question_zh":103,"answer_zh":104,"source_url":105},30292,"如何将预训练的检查点（checkpoint）应用到实际案例中？","README 文件中概述了恢复检查点的方法。如果下载了示例权重文件夹，可以指向特定目录运行：\n\n```python trainer.py --task=vrp --nodes=10 --checkpoint=sample_weights\u002Fvrp10```\n\n如果想使用自己的数据，需要替换 `VehicleRoutingDataset` 类，通常只需修改 `__init__` 函数，其余部分可保持不变。\n\n重要提示：该问题的数据是在 [0, 1] 区间内均匀采样生成的。如果你尝试将检查点**直接**应用于来自不同分布的真实生活数据，可能会得到不同的结果，这种情况下可能需要从头开始训练模型。","https:\u002F\u002Fgithub.com\u002Fmveres01\u002Fpytorch-drl4vrp\u002Fissues\u002F4",{"id":107,"question_zh":108,"answer_zh":109,"source_url":105},30293,"如何指定 'actor.pt' 和 'critic.pt' 文件的路径来恢复检查点？","检查点文件所在的文件夹路径与生成的图片路径相同。在使用命令行参数 `--checkpoint` 时，直接指向包含这些权重文件的目录即可，无需单独指定 actor 或 critic 文件的具体路径。",{"id":111,"question_zh":112,"answer_zh":113,"source_url":114},30294,"模型训练时间过长怎么办？训练完成后如何使用模型计算新案例（如 100 个城市）？","训练时间长可能是因为城市数量较多。建议先在城市数量较少的任务上训练模型，然后使用得到的权重在城市数量较多的任务上进行测试（迁移学习）。\n\n关于如何使用训练好的权重应用到新任务，README 中提供了具体示例。训练完成后会生成训练好的模型权重，加载这些权重即可对新案例（如给定需求和经纬度的 100 个城市）进行计算。","https:\u002F\u002Fgithub.com\u002Fmveres01\u002Fpytorch-drl4vrp\u002Fissues\u002F2",{"id":116,"question_zh":117,"answer_zh":118,"source_url":119},30295,"在 PyTorch 1.0 版本下运行时出现 \"Expected object of scalar type Double but got scalar type Float\" 错误如何解决？","这是数据类型不匹配导致的错误。需要修改 `tasks\u002Fvrp.py` 文件中的一小段代码，确保张量类型一致。请将相关代码修改为：\n\n```python\n# All states will have their own intrinsic demand in [1, max_demand),\n# then scaled by the maximum load. E.g. if load=10 and max_demand=30,\n# demands will be scaled to the range (0, 3)\ndemands = torch.randint(1, max_demand + 1, dynamic_shape)\ndemands = demands.type(torch.FloatTensor) \u002F max_load\n\ndemands[:, 0, 0] = 0  # depot starts with a demand of 0\nself.dynamic = torch.cat((loads, demands), dim=1)\n```\n\n关键是显式地将 `demands` 转换为 `torch.FloatTensor` 以匹配模型预期的浮点类型。","https:\u002F\u002Fgithub.com\u002Fmveres01\u002Fpytorch-drl4vrp\u002Fissues\u002F3",[]]