在vehicle-routing-或TSP问题中:假设我们要将两个地点之间的旅行时间外部化为成本矩阵问题事实。
我们可以将GeoLocation类的distanceTo
方法重写为矩阵中值的简单查找。但是要做到这一点,我们需要在GeoLocation-instances中存储有关matrix-instance的引用。
这对cloning of the solution和相关的计划实体有什么影响?矩阵是否将被深克隆/在规划过程中,不同的规划实体会指向不同的矩阵实例吗?当然,应该避免这种情况,因为矩阵在计划和深度克隆期间不会更改,因此可能会导致性能下降。相反,每个GeoLocation的矩阵引用都应指向内存中的同一矩阵对象。
FieldAccessingSolutionCloner
处理得当吗?还是我们需要提供自己的SolutionCloner
?
答案 0 :(得分:2)
SolutionCloner执行计划克隆,该克隆不会克隆问题事实,除非问题事实引用了计划解决方案或计划实体。 您的班级模型应设计成无需计划克隆距离矩阵。
optaplanner-examples中的VRP示例不会克隆其距离矩阵(位置实例未计划克隆)。
重要的是要理解,任何直接或间接引用计划实体或计划解决方案的东西都必须被计划克隆,否则对工作解决方案的更改将影响最佳解决方案,从而破坏其。