1. 电容式车辆路由问题 (CVRP) 简介
电容式车辆路由问题 (CVRP) 是组合优化问题的一个经典案例,其核心是为一系列已知的客户定位和需求找到最短的车辆路线,同时考虑车辆的载货容量约束。这个问题在物流、配送和运输行业中具有广泛的实用价值。
2. 启发式方法简述
启发式是一种解决问题的技术,通常利用一种快速的方法或"启示"来产生一个可行的解决方案,但可能并非最优。启发式的主要优点是它可以在较短的时间内产生良好的解决方案,但缺点是不能保证解决方案的质量。
2.1 Nearest Neighbor (最近邻) 方法:
这是一种简单的启发式方法,其基本思想是从一个起始点开始,然后选择距离当前位置最近的客户作为下一个访问点。
std::vector<int> nearestNeighbor(const std::vector<std::vector<double>>& distanceMatrix) {
int n = distanceMatrix.size();
std::vector<int> route;
std::vector<bool> visited(n, false);
int current = 0; // Starting from depot
route.push_back(current);
visited[current] = true;
for(int i = 1; i < n; i++) {
double shortestDist = INT_MAX;