【问题标题】:Optaplanner FieldAccessingSolutionCloner: How to model an externalized traveltime matrix?Optaplanner FieldAccessingSolutionCloner:如何建模外化的走时矩阵?
【发布时间】:2019-04-28 15:06:51
【问题描述】:

vehicle-routing- 或 TSP 问题的背景下:假设我们想将两个地点之间的行程时间外部化为成本矩阵问题事实。

我们可以将 GeoLocation 类的distanceTo-方法重写为在矩阵中简单查找值。但要做到这一点,我们需要在 GeoLocation-instances 中存储矩阵实例的引用。

这对cloning of the solution 和相关的规划实体有什么影响?矩阵是否会被深度克隆/不同的规划实体在规划期间会指向不同的矩阵实例吗?当然应该避免这种情况,因为矩阵在规划和深度克隆期间不会改变,它可能会导致性能下降。相反,每个 GeoLocation 的矩阵引用应该指向内存中相同的矩阵对象。

FieldAccessingSolutionCloner 是否妥善处理了这个问题,还是我们需要提供自己的SolutionCloner

【问题讨论】:

    标签: optaplanner


    【解决方案1】:

    SolutionCloner 执行计划克隆,它不会复制问题事实,除非问题事实引用计划解决方案或计划实体。 你的类模型应该被设计成不需要计划克隆你的距离矩阵。

    optaplanner-examples 中的 VRP 示例没有克隆它的距离矩阵(Location 实例没有计划克隆)。

    了解直接或间接引用规划实体或规划解决方案的任何内容都必须是克隆的规划,否则对工作解决方案的更改将影响最佳解决方案并破坏它,这一点很重要。

    【讨论】:

    • 谢谢!我意识到距离矩阵不应该被克隆,因为它在规划过程中不会改变。但目前我的@PlanningEntity Visit 类中有一个private CostMatrix traveltimes 字段。在克隆访问时,我是否需要执行任何操作来指示 SolutionCloner创建该矩阵的副本?
    • 不,你没有。它将查看该类,只要它没有指向必须计划克隆的类的指针,它就不会计划克隆。它是通过@DeepPlanningClone 选择加入的,而不是选择退出。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-24
    • 2021-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-31
    相关资源
    最近更新 更多