You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法复现CVRPTW路径可视化效果,请求技术协助

CVRPTW可视化代码问题排查与修复

问题背景

尝试复现CVRPTW(带时间窗车辆路径问题)的可视化效果,当前图表可生成,但存在错误警告,且未显示车辆行驶路径,与预期效果不符。

现有代码

from colour import Color
import matplotlib.patches as mpatches

plt.figure(figsize=(12,5))
plt.scatter(X, Y, color='blue')

#DC
plt.scatter(X[0], Y[0],color='red', marker='D')
plt.annotate("DC",(X[0]-1,Y[0]-5.5))

#imprimir as rotas
for r in range(len(rotas)):
for n in range(len(rotas[r])-1):
    i = rotas[r][n]
    j = rotas[r][n+1]
    plt.plot([X[i],X[j]], [Y[i],Y[j]], color=Color(r), alpha=0.4)
    
for r in range(len(temp_acum)):
    for n in range(len(temp_acum[r])):
        i = rotas[r][n]
        plt.annotate('$q_{%d}=%d$ |$t_{%d}=%d$'  %(i, q[i], i, temp_acum[r][n]), (X[i]+1,Y[i]))
    
patch = [mpatches.Patch(color=Color(n), label="Veiculo "+str(truck[n])+"|cap="+str(Q[truck[n]])) for n in range(len(truck))]
plt.legend(handles=patch,loc='best')
plt.xlabel('Distância X')
plt.ylabel('Distância Y')
plt.title('CVRPTW | Problema de Roteamento de Veículos com Janela de Tempos')
     
plt.show()

问题分析与修复步骤

1. 缩进错误导致路径不绘制

Python是缩进敏感语言,原代码中绘制路径的两层for循环没有正确缩进,内层循环无法执行,导致路径完全不显示。修复后代码块:

#imprimir as rotas
for r in range(len(rotas)):
    for n in range(len(rotas[r])-1):
        i = rotas[r][n]
        j = rotas[r][n+1]
        plt.plot([X[i],X[j]], [Y[i],Y[j]], color=Color(r), alpha=0.4)

2. Color类参数错误

直接传入整数r给Color()会触发警告,因为colour.Color仅接受颜色名称、十六进制值或RGB元组。可以生成一组离散颜色对应不同车辆:

# 生成对应车辆数量的渐变颜色列表
colors = list(Color("green").range_to(Color("purple"), len(rotas)))
# 绘制路径时调用对应颜色
plt.plot([X[i],X[j]], [Y[i],Y[j]], color=colors[r], alpha=0.6)
# 图例部分同步修改颜色引用
patch = [mpatches.Patch(color=colors[n], label="Veiculo "+str(truck[n])+"|cap="+str(Q[truck[n]])) for n in range(len(truck))]

3. 变量一致性检查

  • 确认rotas是二维列表,每个子列表代表一辆车的完整路径(包含从DC出发并返回DC的节点索引)
  • 检查temp_acum的结构与rotas完全匹配,每个子列表对应车辆路径上的时间累积值
  • 验证X、Y、q、truck、Q等变量无索引越界、类型不匹配问题

修复后完整代码示例

from colour import Color
import matplotlib.patches as mpatches
import matplotlib.pyplot as plt

# 需提前正确初始化X, Y, rotas, temp_acum, q, truck, Q等变量

plt.figure(figsize=(12,5))
plt.scatter(X, Y, color='blue')

# DC节点标记
plt.scatter(X[0], Y[0], color='red', marker='D')
plt.annotate("DC", (X[0]-1, Y[0]-5.5))

# 生成车辆路径对应的颜色列表
colors = list(Color("green").range_to(Color("purple"), len(rotas)))

# 绘制车辆行驶路径
for r in range(len(rotas)):
    for n in range(len(rotas[r])-1):
        i = rotas[r][n]
        j = rotas[r][n+1]
        plt.plot([X[i], X[j]], [Y[i], Y[j]], color=colors[r], alpha=0.6)

# 标注节点的装载量与时间信息
for r in range(len(temp_acum)):
    for n in range(len(temp_acum[r])):
        i = rotas[r][n]
        plt.annotate(f'$q_{{{i}}}={q[i]}$ | $t_{{{i}}}={temp_acum[r][n]}$', (X[i]+1, Y[i]))

# 设置图例
patch = [mpatches.Patch(color=colors[n], label=f"Veiculo {truck[n]} | cap={Q[truck[n]]}") for n in range(len(truck))]
plt.legend(handles=patch, loc='best')

plt.xlabel('Distância X')
plt.ylabel('Distância Y')
plt.title('CVRPTW | Problema de Roteamento de Veículos com Janela de Tempos')

plt.show()

内容的提问来源于stack exchange,提问作者betafico123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 00:10:47