问题描述
我正在测试使用 OR-Tools 来解决 VRPTW,但解决的时间比预期的要长。
我正在使用此处给出的示例代码 (https://developers.google.com/optimization/routing/vrptw),但稍作修改:
import io
data = io.StringIO("""
datetime|data1|data2
2021-01-23 00:00:31.140|a1|a2
2021-01-23 00:00:31.140|b1|b2
2021-01-23 00:00:31.140|c1|c2
2021-01-23 00:01:29.021|d1|d2
2021-01-23 00:02:10.540|e1|e2
2021-01-23 00:02:10.540|f1|f2""")
import pandas as pd
df = pd.read_csv(data,sep='|',parse_dates=['datetime'])
# make sure the date time column was parsed correctly before
# setting it as an index
df = df.set_index('datetime')
import dask.dataframe as dd
ddf = dd.from_pandas(df,npartitions=3)
ddf.to_parquet('test_parquet')
# note this will create a folder with one file per partition
ddf2 = dd.read_parquet('test_parquet')
ddf2.loc['2021-01-23 00:00:31'].compute()
# if you want to use very precise time,first convert it to datetime format
ts_exact = pd.to_datetime('2021-01-23 00:00:31.140')
ddf2.loc[ts_exact].compute()
和
data['time_windows'] = [
(0,999),# depot
(0,20),# 1
(0,# 2
(0,# 3
(0,# 4
(0,# 5
(0,# 6
(0,# 7
(0,# 8
(0,# 9
(0,# 10
(0,# 11
(0,# 12
(0,# 13
(0,# 14
(0,# 15
(0,# 16
]
data['num_vehicles'] = 1
我正在尝试建模找到只有一个约束的最佳路线,必须在 0 到 20 之间访问该位置 #1。
在我的电脑上解决这个问题需要 22.6 秒,这对我来说似乎有点长。我曾尝试将 FirstSolutionStrategy 调整为其他各种策略,但它们要么需要同样长的时间来解决,要么在我使约束更紧时无法完全解决。
使窗口更接近 (0,6) 需要更长的时间来求解。
另外,奇怪的是,将所有其他节点的窗口从 (0,999) 减少到 (0,50) 将计算时间显着减少到 1.8 秒,但根本不影响输出。
这离成为一个简单的 TSP 仅一步之遥,但需要更长的时间来解决,我想知道我是否做错了什么。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)