2025 全国大学生交通科技大赛(http://www.nactrans.net/)
基于船舶历史航行信息预测其抵达的目的地和时间,获得国家三等奖
本项目面向全球航运场景中的船舶预抵问题,主要完成 船舶抵达港口预测 任务。
模型根据船舶历史行为、当前位置、航行状态以及港口相关信息,预测船舶最可能抵达的目标港口。到港时间不由模型直接预测,而是根据预测港口及船舶航行信息进行后续计算。
项目来源于 2025 全国大学生交通科技大赛时序预测赛道,并获得国家三等奖。
在实际航运管理中,提前判断船舶可能抵达的港口,对港口调度、泊位安排、航线分析和运输计划都有重要意义。
由于船舶航行会受到历史航线、当前位置、船舶类型、港口分布以及临时调度等因素影响,单纯依赖人工经验或简单规则很难稳定判断目的港。本项目尝试通过历史数据建模,缩小候选港口范围,并提升港口预测的准确性和推理效率。
本项目当前主要支持以下功能:
- 根据船舶及航行信息预测抵达港口
- 基于历史可达港口构建候选港口集合
- 使用
pos.csv生成有效港口掩码,减少无效搜索范围 - 支持训练、验证和测试数据加载
- 支持模型训练过程中的早停与学习率调度
- 自动保存最优模型
- 加载训练好的模型并生成测试集预测结果
project/
├── config.py # 配置文件
├── data_loader.py # 数据加载与预处理
├── model.py # 模型定义
├── train.py # 训练脚本
└── predict.py # 预测脚本
集中管理项目运行所需的配置参数,包括:
- 数据文件路径
- 模型超参数
- 训练参数
- 批大小、学习率、训练轮数等设置
- 模型保存路径
- 预测结果保存路径
- 运行设备配置
程序会自动检测当前环境是否支持 GPU,并根据实际情况选择 CPU 或 CUDA 设备。
负责数据读取、预处理和训练样本构建,主要包括:
- 读取原始数据文件
- 清洗异常或缺失数据
- 构建船舶、港口等字段的词汇表
- 处理未知船舶和未知港口
- 根据
pos.csv生成有效港口掩码 - 构建 PyTorch Dataset
- 创建训练、验证和测试 DataLoader
其中,pos.csv 是通过历史数据处理得到的船舶可达港口集合。该文件可以帮助模型缩小候选港口范围,减少无效计算,同时提升预测效率和准确率。
定义港口预测模型结构。
模型输入船舶、港口及航行相关特征,输出候选港口的预测得分。预测阶段会结合有效港口掩码,过滤掉明显不合理的港口候选项。
模型训练脚本,主要功能包括:
- 加载训练集和验证集
- 初始化模型、损失函数和优化器
- 执行训练循环
- 在验证集上评估模型效果
- 使用学习率调度策略优化训练过程
- 支持早停机制,避免过拟合
- 保存验证效果最好的模型参数
模型预测脚本,主要功能包括:
- 加载训练完成后的最优模型
- 读取测试数据
- 对测试样本进行港口预测
- 保存预测结果
默认预测结果文件为:
test_predictions1.csv
建议使用 Python 3.8 及以上版本。
安装依赖:
pip install -r requirements.txt如项目未提供 requirements.txt,可根据代码中使用的库手动安装,例如:
pip install torch pandas numpy scikit-learn请将训练、测试及辅助数据文件放入配置文件指定的位置。
项目中需要重点准备的文件包括:
train.csv # 训练数据
test.csv # 测试数据
pos.csv # 船舶历史可达港口信息
其中,pos.csv 用于记录船舶在历史数据中可能到达的港口选项。预测时,模型会优先在这些有效候选港口中进行判断,从而降低计算开销并提升预测稳定性。
在运行训练前,请先检查 config.py 中的参数配置,包括:
- 数据路径是否正确
- 模型保存路径是否存在
- 批大小是否适合当前显存
- 学习率和训练轮数是否需要调整
- 是否正确识别 GPU
运行训练脚本:
python train.py训练过程中,程序会在验证集上监控模型表现,并自动保存效果最好的模型。
训练完成后,运行预测脚本:
python predict.py预测完成后,可查看输出文件:
test_predictions1.csv
项目主要使用以下类型的数据字段:
| 字段类型 | 说明 |
|---|---|
| 船舶信息 | 船舶编号、船舶类型等基础属性 |
| 航行信息 | 经纬度、速度、航向、时间等动态信息 |
| 港口信息 | 港口编号、港口位置、历史到达记录等 |
| 候选港口信息 | 船舶历史可达港口集合,由 pos.csv 提供 |
实际字段名称以数据文件和 data_loader.py 中的处理逻辑为准。
预测脚本会生成测试集对应的港口预测结果,输出文件默认为:
test_predictions1.csv
结果文件通常包含样本标识及预测港口等信息。具体字段以 predict.py 中的保存逻辑为准。
- 本模型只预测船舶抵达港口,到港时间需根据预测港口及船舶航行信息另行计算
pos.csv对预测速度和精度影响较大,建议使用充分清洗后的历史数据生成- 所有数据文件建议使用 UTF-8 编码
- 训练前请确认 GPU 是否可用,显存不足时可适当减小 batch size
- 未知船舶和未知港口会被特殊处理,但可能影响预测精度
- 不同数据切分方式会影响最终结果,复现实验时应保持配置一致
- 若数据中存在大量缺失值、异常经纬度或错误港口记录,建议先进行清洗
- 面向实际港口预测任务,目标明确
- 使用历史可达港口信息缩小预测范围
- 支持未知船舶和未知港口处理
- 训练流程包含早停和学习率调度
- 代码结构简洁,便于复现和扩展
- 补充更详细的数据字段说明
- 增加样例数据,方便快速运行
- 输出 Top-K 港口预测结果
- 增加模型评估脚本
- 增加可视化分析模块
- 优化未知船舶场景下的预测效果
- 引入更多航行状态和港口特征
本项目可用于以下方向:
- 船舶目的港预测
- 港口调度辅助分析
- 航运轨迹数据挖掘
- 船舶历史航线分析
- 时空序列建模研究
- 交通科技竞赛项目复现与学习
感谢 2025 全国大学生交通科技大赛提供的交流平台,也感谢团队成员在数据处理、模型设计、训练调参和结果分析中的贡献。
本项目主要用于竞赛复盘、学习交流和科研参考。
