VRPTW问题的Solomon标准测试数据集介绍


Solomon 标准测试数据集

在 CVRPLIB 中,带时间窗的 VRPTW 是一类场景且经典的问题,而其中常用的标准测试数据有 Solomon(1987)和Homberger&Gehring(1999)两个,后者的样例规模更大。

Solomon 标准测试数据中,带有一个起始点(CUST NO.==0)和100个客户点。其中的所有常量都为整数,K 表示可以派遣最大车辆数,Q 表示每辆车的最大载重量,XCOORD, YCOORF 是起始点与客户点的横纵坐标,为简便计算,将节点之间的距离视为节点之间的运输成本;DEMAND 为节点处的需求量,起始点 depot 的需求量为0;READY TIME 表示在起始点和客户点处服务的最早开始时间;DUE TIME 则表示服务截止时间,对于起始点而言,该值表示全部车辆最晚必须返回的时间点;SERVICE TIME 表示在各节点处服务的持续时间。

具体格式如下图。
solomon数据文件格式
如果想进一步地控制问题规模,可以随机地在 Solomon 测试数据的100个节点中取25、50、75个节点以做实验(之所以这个比例划分是由于 solomon 数据集的时间窗的分布特点)。

Solomon 数据集的结构特点

Solomon 数据集按两个维度分为6大组的数据:R1, C1, RC1, R2, C2, RC2。

1. 节点分布差异

在 R1,R2 类数据集中,节点的坐标位置随机生成,较为分散;在 C1,C2 类数据集中,节点的坐标位置有明显的聚簇;而 RC1,RC2 类数据集则混合了随机和聚簇的特点。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如上图所示,R 类数据集坐标点分散且均匀,C 类数据集明显地存在节点簇,RC 类数据集则既有分散的部分,也有聚集的部分。

2. 调度时间差异

在 R1,C1,RC1 类数据集中,各个节点的时间窗(READY TIME, DUE TIME)的时间间隔显著小于 R2,C2,RC2 类的数据集。这就导致前者每辆车辆在一次调度中,所负责的客户数量较少,平均每辆车负责 5~10 个客户点的需求配送,而后者平均每辆车能负责 30 多个的客户点配送。

以 C104 和 C204 两份数据为例:前者所有节点的平均时间窗大小为 856.73,后者的为 2501.47

3. 时间窗的分布差异

同一类问题的坐标信息是一致的,但是不同的测试数据的节点的时间窗口较窄的客户点百分比,以及时间窗口的松紧程度都是有差异的。

以下是 C104 数据和 C109 数据的时间窗分布差异(横坐标表示时间窗的长度)。
C104时间窗分布
C109时间窗分布

Solomon 数据集下载

Solomon 标准测试数据下载链接。上述画图代码如下。

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

# 读取数据文件
file_path = 'C109.txt'  # 请替换为实际文件路径
with open(file_path, 'r') as file:
    data0 = file.read()

# 将数据转换为DataFrame
data = []
for line in data0.strip().split('\n'):
    data.append(line.split())

columns = ["CUST", "XCOORD.", 'YCOORD.', 'DEMAND', 'READY', 'DUE', 'SERVICE']
df = pd.DataFrame(data[9:], columns=columns)

# 将字符型列转换为数字
numeric_cols = ['CUST', 'XCOORD.', 'YCOORD.', 'DEMAND', 'READY', 'DUE', 'SERVICE']
df[numeric_cols] = df[numeric_cols].apply(pd.to_numeric, errors='coerce')
df['sum'] = df['DUE'] - df['READY']
print(np.mean(df['sum']))

"""画时间窗分布图"""
plt.barh(df.index, df['DUE'] - df['READY'], left=df['READY'], color='blue', alpha=0.7)
# 显示图形
plt.show()

"""画散点图:运行时去掉注释"""
# # 绘制散点图
# plt.scatter(df.loc[1:, 'XCOORD.'], df.loc[1:, 'YCOORD.'], label='Customers', marker='o', color='blue')
# plt.scatter(df.loc[0, 'XCOORD.'], df.loc[0, 'YCOORD.'], label='Depot', marker='x', color='red')
# # 添加标签
# for i, row in df.iterrows():
#     plt.annotate(row['CUST'], (row['XCOORD.'], row['YCOORD.']), textcoords="offset points", xytext=(0, 5), ha='center')
# # 添加标题和轴标签
# plt.title(f'Customer and Depot Locations of {file_path}')
# plt.xlabel('X Coordinate')
# plt.ylabel('Y Coordinate')
# # 显示图例
# plt.legend()
# # 显示图形
# plt.show()
  • 24
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Solomon数据集是供研究和评估智能算法性能的基准测试集之一,由美国自动化专家Edward A. Solomon博士在1987年创建。该数据集包含了多个系列问题,每个系列都涉及到一个特定的优化问题Solomon数据集的各系列问题主要涉及车辆路径规划、物流配送和排产调度等领域。每个系列由不同规模的问题组成,即不同数量和类型的任务、车辆和时间窗口约束。这些问题往往是现实生活中具有挑战性的优化问题,研究者可以利用Solomon数据集来开发和测试各种优化算法。 Solomon数据集的系列之一是CVRP系列问题,即车辆路径规划问题。这个系列包含了一些具有不同规模的订单和车辆的问题,其中每个订单需要在时间窗口内被配送到指定的位置。研究者可以使用这个系列问题来开发算法,以寻找最佳的配送路径,以最小化总体配送成本。 另一个系列是VRPTW系列问题,即车辆路径规划问题与时间窗口。这个系列问题更加复杂,除了在CVRP中的要求外,还要求车辆在指定时间窗口内到达每个订单的目的地。这样的问题物流配送和服务调度等领域具有重要应用,研究者可以利用Solomon数据集中的VRPTW系列问题来开发算法,以提高配送效率和服务质量。 除了上述两个系列问题Solomon数据集还包括其他系列,如MDVRP(多车辆路径规划)、PDP(拆分配送问题)等。这些问题涵盖了各种具有挑战性的优化问题,研究者可以根据自己的研究需求选择合适的系列问题进行实验和比较。 总之,Solomon数据集的各系列问题提供了标准化的测试基准,帮助研究者评估和比较不同的智能算法在复杂优化问题上的性能。研究者可以利用这些问题来开发和改进算法,以应对现实生活中的物流、调度等挑战。 ### 回答2: Solomon数据集是一套用于测试路径规划问题标准数据集,它被广泛应用于运筹学和供应链研究中。该数据集由Mathematical Programming Society设计,并以数据集创建者Edward A. Silver的名字命名。Solomon数据集包含了一系列不同规模和复杂度的路径规划问题,可以用于评估不同算法在不同场景下的性能。 Solomon数据集一共有六个系列,分别是C1、C2、C3、R1、R2和RC。C系列代表的是客户数目固定的问题,而R系列包含的是客户数目随机的问题。每个系列都有多个实例,每个实例都包括了车辆数、车辆容量、客户需求、距离矩阵等信息。 C1系列是Solomon数据集中最简单的系列,它的实例数量较少,适用于初学者和简单的路径规划问题。C2和C3系列比C1系列更复杂,实例数量也更多,对算法的鲁棒性和效率有更高的要求。 R1和R2系列是Solomon数据集中的随机问题,客户的数量在每个实例中是随机生成的。这种随机性使得问题的规模和复杂度变化多样,能够更全面地评估算法的性能。 RC系列是由C系列和R系列中的实例组成的混合系列。这些实例既包含了固定客户数目的问题,也包含了随机客户数目的问题,对算法在不同场景下的适用性进行了全面的考察。 总的来说,Solomon数据集的各个系列包含了不同规模、不同复杂度的路径规划问题,是评估和比较不同算法性能的重要标准。研究者和从业者可以根据自己的需求选择合适的系列和实例进行研究和实验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lins号丹

小小鼓励,满满动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值