用时间窗修复一个小时的车辆路径问题

I am currently working on a webapp for a Vehicle Routing Problem with Time Windows using OR Tools with Java.

现在,我已经完成了最初的开发,在该开发中,我们为每个服务分配一个时间窗口,并在每个服务结束时等待一个时间,以找到最佳解决方案。这似乎正常工作,但是一旦我们计算出这样的解决方案,我们便希望将给定的时间分配给这些服务(想告诉客户我们将在9:00 AM到达那里)。

一旦这样做,我们就将时间窗限制为给定的小时数,这样现在的开始和结束都相同。这样,如果我们将这一小时分配给一个或多个结果,我们应该能够获得相同的结果:如果没有其他值发生变化,我们应该能够获得相同的结果。

但是,这没有按预期工作。一旦我们将时间窗口更改为给定的小时数,整个解决方案就会更改,有时甚至需要解决更多的驱动程序。该小时由解决方案本身选择,以便:

long index = routing.start(i);
long lastOptionalNode= data.getOptionalNodes()[data.getOptionalNodes().length - 1];

while (!routing.isEnd(index))
    if (manager.indexToNode(index) > lastOptionalNode) {

        IntVar timeVar = timeDimension.cumulVar(index);

        Service service = services.get(manager.indexToNode(index) - data.lastOptionalNode().length - 1);


        service.setStartingHour((int) solution.min(timeVar)); // This is the hour we then use as start and end of the new time window
        service.setLastHour((int) solution.max(timeVar));

        index = solution.value(routing.nextVar(index));
    }
}

我们还尝试使用“ solution.value”而不是其最小值。

我希望第一种情况能起作用:如果我们将一项或多项服务分配给该驾驶员,则达到所有服务所需的最小小时数至少应是可行的,因为所有其他服务也可以使用其所需的最小小时数。这对我们不起作用,也无法获取时间变量的当前值。可以使用所需的最大小时数,但这是不希望的。

我认为问题可能出在我们如何处理服务之间的等待时间:用户在每次服务后设置一个延迟(驾驶员可能花费与客户交谈的时间),然后我们将其添加到出行时间中。但是,我不确定问题出在这里。

甚至有可能在不完全改变以前的解决方案的情况下,将一个小时固定在带有时间窗口的路由问题上吗?是否需要将延迟作为新变量单独添加到路由模型?