C# Google或Tools-设置时间窗口维度失败,出现低级错误
因此,我试图使用的VRPTW的例子作为我自己的一些代码的基础 在我的情况下,我想安排多天的多辆车(每辆车在司机家出发/返回)。 在本例中,假设有一个停车场,所有车辆在一天内从该停车场出发。时间矩阵的第一列是车辆段编号,我认为该代码中的0索引是因为所有车辆离开/返回车辆段C# Google或Tools-设置时间窗口维度失败,出现低级错误,c#,or-tools,C#,Or Tools,因此,我试图使用的VRPTW的例子作为我自己的一些代码的基础 在我的情况下,我想安排多天的多辆车(每辆车在司机家出发/返回)。 在本例中,假设有一个停车场,所有车辆在一天内从该停车场出发。时间矩阵的第一列是车辆段编号,我认为该代码中的0索引是因为所有车辆离开/返回车辆段 // Add time window constraints for each vehicle start node. for (int i = 0; i < data.VehicleNumber; ++i) {
// 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]);
}
//为每个车辆启动节点添加时间窗口约束。
对于(int i=0;i
因此,在我的情况下,假设我有三天时间由两辆车交付,在我的时间矩阵中,我有以下列:
- 第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++;
}
}
var useIndex=0;
对于(int i=0;i timeDimension.CumulVar(index).SetRange(fromTime,toTime);不要使用SetRange。请使用Solver.Add(Solver.MakeBetweenCt())。
SetRange API将在搜索中使用。TLDR:SetRange()
检查请求的新范围是否在域中,否则将失败
问题:时间维度的车辆容量(又称地平线)是多少?
至少是4320
i、 当你用这种东西的时候
routing.AddDimension(
交通评价者指数,
十、 #此处的最大空闲时间即等待时间
Y、 #我将Y设置为100000。我正在尝试将范围设置为1440-2880,因此应该可以。但是,对于我设置为true的第四个属性,您的值为false。如果我将其设置为false,我将不再得到错误。如果将其设置为true,则意味着您将强制时间维度。CumulVar(任何_start_节点)为零,但如果同时您具有要设置的开始节点的范围[1440-2880]或[2880-4320]你只是让你的问题变得不可行,因为0不在范围内…我不得不回到资源约束的例子,以了解你在这里得到了什么以及它可能如何工作。我想我了解了你的来源,我可以看到它在我仍然要做的一些其他事情中的用途,但从时间窗口约束推断根据我对Mizux答案的评论,我认为我目前可以不使用MakeBetweenCt,除非我遗漏了一些令人信服的原因。