Python+Gurobi实战:物流取送货路径优化建模全解析
物流配送中的取送货问题(Pick and Delivery Problem, PDP)是供应链优化领域的核心挑战之一。想象一下,你管理着一个城市配送车队,每天需要从不同地点取货并送往多个目的地,同时还要确保车辆不超载、路线最短、成本最低——这就是典型的PDP场景。本文将带你用Python和商业求解器Gurobi,从零构建一个完整的取送货优化模型。
1. 环境准备与数据加载
在开始建模前,我们需要配置好Python环境并理解数据结构。推荐使用Anaconda创建独立环境:
bash复制conda create -n logistics python=3.8
conda activate logistics
pip install gurobipy pandas numpy matplotlib
典型的取送货数据集包含以下关键字段:
| 字段名 | 说明 | 示例值 |
|---|---|---|
| NODE_ID | 节点唯一标识 | 0 |
| X_COORD | 横坐标 | 250 |
| Y_COORD | 纵坐标 | 250 |
| DEMAND | 需求值(正负表示) | -10(送货) |
数据加载与预处理代码:
python复制import pandas as pd
import numpy as np
def load_data(filepath):
"""加载并预处理取送货数据"""
df = pd.read_csv(filepath)
# 计算节点间距离矩阵
coords = df[['X_COORD', 'Y_COORD']].values
dist_matrix = np.sqrt(((coords[:, np.newaxis] - coords) ** 2).sum(axis=2))
return df, dist_matrix
注意:配送中心(仓库)通常标记为节点0,其DEMAND值应为0
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 模型构建核心要素
2.1 决策变量定义
PDP问题需要三类关键决策变量:
- 路径变量:二进制变量x[i,j,k],表示车辆k是否从节点i行驶到j
- 负载变量:连续变量f[i,j],表示弧(i,j)上的货物量
- 辅助变量:用于消除子回路的流变量
Gurobi中的变量定义实现:
python复制from gurobipy import Model, GRB, quic
