Google OR-Tools 时间窗口约束求解缓慢

问题描述

我正在测试使用 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 (将#修改为@)