当前位置: 首页 > 知识库问答 >
问题:

谷歌或工具-设置时间窗口维度失败,出现低级错误

史鹏云
2023-03-14

因此,我试图使用VRPTW的例子https://developers.google.com/optimization/routing/vrptw作为我自己代码的基础。

在我的情况下,我想在多天内安排多辆车(每辆车都在司机的家中启动/返回)。在这个例子中,假设有一个仓库,所有车辆在一天内从该仓库出发。时间矩阵的第一列是车厂编号,我相信代码中的0指数是因为所有车辆都从车厂离开/返回。

// Add time window constraints for each vehicle start node.
for (int i = 0; i < data.VehicleNumber; ++i)
{
    long index = routing.Start(i);
    timeDimension.CumulVar(index).SetRange(data.TimeWindows[0, 0], data.TimeWindows[0, 1]);
} 

因此,在我的情况下,假设我有三天时间由两辆车交付,在我的时间矩阵中,我有以下列:

  • 第1天-车辆1(从位置A启动/返回)
  • 第1天-车辆2(从位置B启动/返回)
  • 第2天-车辆1(从位置A启动/返回)
  • 第2天-车辆2(从位置B启动/返回)
  • 第3天-车辆1(从位置A启动/返回)
  • 第3天-车辆2(从位置B启动/返回)

然后我有一个车辆开始和结束节点的数组,指向这些条目。所有这些都运行良好,我对结果或工具提供的结果感到满意。

我有一个问题是,我现在想为每辆车设置时间窗口。所以应该看起来像这样:

  • 第1天-车辆1时间窗口0-1440
  • 第1天-车辆2时间窗口0-1440
  • 第2天-车辆1时间窗口1440-2880
  • 第2天-车辆2时间窗口1440-2880
  • 第3天-车辆1时间窗口2880-4320
  • 第3天-车辆2时间窗口2880-4320

所以我已经将上面的示例代码更改为下面的代码。我认为代码看起来还可以,但它在指定的行中出现了“无法获取您的数据”。失败(这似乎是一个相当低级别的错误)。

        var useIndex = 0;
        for (int i = 0; i < data.DayCount; i++)
        {
            var fromTime = i * 1440;
            var toTime = (i + 1) * 1440;
            for (int j = 0; j < data.VehicleCount; ++j)
            {
                long index = routing.Start(useIndex);
                timeDimension.CumulVar(index).SetRange(fromTime, toTime);   <---- FAILS HERE

                useIndex++;
            }
        }

它会经历第一天的罚款,将值设置为0-1440。当它执行第二个循环并尝试将值设置为1440-2880时,它失败。如果我在每个循环中将所有值设置为0-1440,就可以了。所以,只有当我试图改变这个值时,才有问题。想知道为什么吗?

编辑1错误消息的堆栈跟踪显示错误发生在以下位置:

在谷歌。奥图尔斯。约束索尔弗。IntExpr。设置范围(Int64 l,Int64 u)

我在用谷歌。OrTools 9.0.9048

编辑2看起来from值必须以0开头(0-1440可以)。如果我尝试将所有范围分配到1440-2880,它会立即失败。

共有2个答案

元玮
2023-03-14

不要使用SetRange。使用解算器。添加(solver.MakeBetweenCt()。SetRange API将在搜索中使用。

陆建木
2023-03-14

TLDR:SetRange()检查请求的新范围是否在域中,否则失败。

问:时间维度的车辆容量(又名地平线)是多少?至少得4320吧!

i、 e.当你使用这样的东西时

routing.AddDimension(
  transit_evaluator_index,
  X, # max Slack time aka waiting time here
  Y, # <=== HERE vehicle capacity
  False, # Force start cumul to zero (not wanted for time dimension) 
  "Time") # name of the dimension and used as uid

我的意思是,所有的范围值必须小于或等于Y。

 类似资料:
  • 如果你必须定期在服务器上进行维护工作,你可能需要在维护期间暂停监控并停止接收来自 Navicat Monitor 的警报。Navicat Monitor 可让你设置维护窗口时间段以禁用监控选择的实例。在此期间,Navicat Monitor 不会发出警报,也不会发送通知。若要设置实例的维护窗口,请前往“配置”->“全部实例”。 【注意】你也可以手动暂停单个实例的监控。请参阅暂停监控一个实例。 设置

  • 我终于明白了我是如何连接到谷歌分析的,正确的——现在我可以在某个时候访问数据了。我正在使用google-api-php-Client。 我可以工作与指标只是罚款fx,通过做 它将返回会话数、页面浏览量和会话持续时间。但是现在让我们假设我也对使用一些维度感兴趣-也许我希望查询返回搜索引擎所有流量的站点使用情况数据,按页面浏览量降序排序。 数据- 我尝试在数组中提供维度和过滤器,但它返回以下错误 警告

  • 我正在docker文件中使用量角器(5.4.2版)运行测试。google chrome升级到76版后,测试开始失败,出现以下错误: 我尝试了几种方法来解决这个问题: 1)试图将chrome版本标记为以前的版本。但是chrome移动到稳定版本,以前的版本是铬的。 2)也在网上寻找了一些可能的解决方案来下载,但对我不起作用 3)网络驱动程序管理器更新-versions.chrome76.0.3809.

  • 我是git新手,我昨天刚刚下载了它。作为我的第一个在线(非本地)存储库的测试,我提交了一个无用的文本文件,然后点击发布。过了一会儿,我得到了这个非常非描述性的错误: 所以我知道我不能发布到这个分支。只有一个,它是主分支。有人有任何关于可能导致此错误的进一步信息吗? 顺便说一句,我的合作伙伴已经成功地将文件上传到同一个回购协议,但我没有得到任何迹象表明发生了这种情况。这是否意味着我在某种程度上与回购

  • 授权失败。请参阅https://developers.google.com/maps/documentation/android/start了解如何正确设置地图。 确保以下内容与API控制台中的内容相对应:包名称:,API密钥:,证书指纹:联系Google服务器失败。建立连接后将进行另一次尝试。 加载地图失败。联系Google服务器时出错。这可能是身份验证问题(但可能是由于网络错误)。 我知道关于

  • 我创建了一个服务帐户,并为其分配了访问云功能的权限: gcloud beta函数add-iam-policy-binding MyFunction--member=serviceaccount:cf-access@my-project.iam.gserviceaccount.com--role=roles/cloudfunctions.admin 产出: 现在,我下载了服务帐户json文件。 所以