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

规划实体上的Optaplanner VRP ChainedGraph值范围

卫景明
2023-03-14

我有一个VRP路由问题的变体,我想利用Optaplanners(v6.4)ValueRangeProvider特性。然而,在某些情况下,我有点困惑它是如何工作的。我的理解是,如果我选择一组项作为Customer对象的值范围,那么该Customer实例的PreviousStandle可能只在该范围内。

就我而言,我有一些客户可能已经被分配了。我想限制搜索空间,这样分配的行程就不会浪费时间与其他车辆匹配。我期待着大量的客户,所以我希望尽可能提高性能。

我将之前的站立静止范围定义为跟随

@PlanningVariable(
        valueRangeProviderRefs = {"possibleVehicles", "possibleCustomersInSameVehicle"},
        graphType = PlanningVariableGraphType.CHAINED)
public Standstill getPreviousStandstill() {
    return previousStandstill;
}
  • 分配的客户“可能的车辆”只会退还分配给可能的客户的车辆,将是分配给同一车辆的所有客户的列表所有未分配的客户
  • 未分配的客户将拥有每辆车

这似乎工作正常,但是发生了几个可疑的案例,给了我一些问题。

>

  • 我修改了一个分配客户的数据集,使得当车辆的容量只有7时,它的负载非常大(100)。我的最终解决方案产生了一个解决方案,当分配客户被分配到不在其价值范围内的车辆时,它是车辆下一个客户。这显然打破了我为该分配客户设置的价值范围,所以我不确定这是如何发生的。我唯一的猜测是,未分配的客户被分配为车辆中的第一个客户,然后是分配的客户(未分配在价值范围内)。未分配的客户后来被转移到不同的车辆上,因此直接将分配的客户留在车辆之后。我的问题是,ValueRange会允许这种情况发生吗?

    我使用VRP问题的默认值范围运行了相同的问题,但添加了一条规则,当指定的客户坐错了车时进行处罚。两种解决方案得到了相同的答案,但这种解决方案似乎工作得更快,即使搜索空间本应大得多。不确定我的代码中是否有bug,或者是否因为一个小测试用例而出现这种情况,可以更快地删除。

    最后,从技术上讲,当前值范围将允许在未分配的行程后分配已分配的客户,即使未分配的客户在另一辆车上。是否有任何方法可以对问题进行建模,使ValueRange位于车辆上。所以我们说这辆车可能只包含分配列表中的下一个客户列表,未分配列表中的任何人?

    每次移动前是否检查值范围?解决时是否可以更新?

  • 共有1个答案

    缪升
    2023-03-14

    如果我错了,请纠正我的错误,但在“4.3.5.2.3.规划实体上的ValueRangeProvider”结尾处的6.4.0 Final OptaPlanner用户指南是一个警告“规划实体上的ValueRangeProvider当前与链接变量不兼容”。您应该使用链接变量的过滤器来限制搜索空间。

     类似资料:
    • 我正在研究来自OptaPlanner的示例用例。我也找不到任何类似的例子,可以在一个规划实体中求解多个规划变量。例如,在护士名册中,一个轮班的每个可能需要多个分配的。在这种情况下,如何利用planner和编写规则呢?

    • 我正在使用Optaplanner解决一个类似于病人入院调度示例的问题。 我面临两个问题。 首先,当一个规划实体(类似于示例中的bedDesignation)被某人(而不是optaplanner)定位时,该规划实体像其他实体一样被打分。手工放置的计划实体变为不可移动的计划实体,但仍被打分为可移动的计划实体。正因为如此,它打破了一些硬性的限制。 BedDesignationPillarPartSwap

    • 对于时间窗VRP的解决方案,我编辑了已求解的XML文件并设置了< code > 我添加了一个SectionFiler类,并按照建议进行了配置。在解决的xml数据文件的末尾,我添加了一些新的未分配客户。 我预计只有新的未分配客户才会被优化并插入现有链的末尾 - 事实并非如此 - 链条被破坏了。 问题:6.2中处理不可移动客户预约的具体内容是什么? 我认为jira问题https://issues.jb

    • 我是Optaplanner的新手,我一直在考虑将VRP扩展到一个不同的问题空间。我用的是6.1.0-final。这是一个很难计算的问题,但下面是: 规划实体-装运(扩展Standstill),由运输商(即货船)锚定规划变量-终端(货物目的地),当然隐含运输商(作为VRP示例中的Vehicle这样的影子变量) 在这个路径问题中,货物直接运输到一个终端,然后再运回工厂。即一个运输机服务于一个终点站,然

    • 一定要设置最大内存maxmemory参数,否则物理内存用爆了就会大量使用Swap,写RDB文件时的速度很慢。注意这个参数指的是info中的used_memory,在一些不利于jmalloc的时候,内存碎片会很大。 多留55%内存是最安全的。重写AOF文件和RDB文件的进程(即使不做持久化,复制到Slave的时候也要写RDB)会fork出一条新进程来,采用了操作系统的Copy-On-Write策略(

    • 我正在尝试限制可以与特定实体关联的计划变量。在 OptaPlanner 手册的第 4.3.4.2.2 节中,显示了一个示例,但不清楚应该如何生成变量列表。列表应包含哪些内容?这些计划变量本身吗?它们可以是副本吗?如果允许复制,那么如何比较它们?如果不是,则在定义计划实体时计划变量不在范围内 - 我意识到这是一个 Java 问题,但如何从计划实体定义访问计划变量列表并不明显。 这是早期版本不支持的6