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

带有流量和时间窗口的OptaPlanner VRPPD

刘玉石
2023-03-14

目前是否有一种方法可以将流量模式合并到OptaPlanner中并解决包装和交付VRP问题?

比如说,我需要在30辆车中优化500辆今天和明天的提货和交付,其中每辆提货都有1-4小时的时间窗口。如果可能的话,我想在高峰时间避开城市的繁忙地区。

还可以添加(或同时取消)新的皮卡。

我相信这是一个常见的问题。OptaPlanner中是否有合适的解决方案?

谢啦!

共有1个答案

元鸿波
2023-03-14

用户经常这样做,但没有现成的例子。

有几种方法可以做到这一点,但一种方法是在距离矩阵中添加第三个维度,表示离开时间。通常使用15分钟、30分钟或1小时的粒度。

这里有两个缩放问题:

  • 内存。15分钟意味着每天24 * 4 = 96。考虑到2维,10k位置距离Matrix使用几乎2 GB RAM,显然内存可能会成为一个问题。
  • 预计算时间。计算距离矩阵可能很耗时。“批量算法”可以在这里提供帮助。例如,GraphHopper社区不支持批量距离计算,但他们的企业版本——以及OSRM(免费)支持。从远程Google Maps API或远程企业GraphHopper API获取3维矩阵可能会导致带宽问题(见上文,距离矩阵的大小可能会变成几GB,尤其是在JSON或CSV等非二进制格式中)。

在任何情况下,存在一个三维矩阵,这只是调整OptaPlanner示例的到达时间更新侦听器(ArrivalTimeUpdateListener)以使用距离(from,to,departureTime)的问题。

 类似资料:
  • 我有一个关于Kafka流的时间窗的问题,有些概念真的让我困惑。 我们有一个主题每天获得1000万个事件,我们有6天的日志保留,所以总的主题包含6000万个事件。 现在,我创建了一个KTable,我正在执行load all操作并迭代事件。正如我之前提到的,实际上我们只是当前的事件,而不是6千万事件,所以我在KTable定义中窗口化了这些数据。 现在,当我用以下语句加载所有事件时,一切都运行良好。 问

  • 我需要根据一个键连接两个事件源。事件之间的间隔最长可达1年(即具有id1的event1可能在今天到达,而来自第二个事件源的具有id1的相应event2可能在一年后到达)。假设我只想输出连接的事件输出。 我正在探索在RocksDB后端使用Flink的选项(我遇到了表API,它们似乎适合我的用例)。我找不到做这种长窗口连接的引用体系结构。我希望系统一天能处理大约2亿个事件。 关于处理这种长窗口连接的任

  • 我正在研究一个Flink流式处理器,它可以从Kafka读取事件。这些事件由其中一个字段键控,并且在减少和输出之前应该在一段时间内加窗。我的处理器使用事件时间作为时间特性,因此从它所消耗的事件中读取时间戳。以下是它目前的样子: 我所知道的事件如下: null null

  • 为什么会这样?如果我在“assigntimestamps(timestampExtractor)”之前添加“keyby(keySelector)”,那么程序可以工作。有人能解释一下原因吗?

  • 我正在运行一个简单的示例来测试基于EventTime的Windows。我能够生成带有处理时间的输出,但当我使用EventTime时,没有输出。请帮助我明白我做错了什么。

  • 的结果是一个元素流-因此,我希望从这个流中获得一个“具有最高计数的key”的更新流。 然后我通过一个常量(-因为这是一个全局操作)进行键控,并使用-这几乎可以实现:我得到一个最高计数流,但当前的最高计数是针对每个元素发出的。 我想我要找的是某种带有前一个值的过滤器,它只会在新值与前一个值不同时才会发出元素。 目前在Flink有可能吗?