我正在为 vrp 问题实施自定义克隆器。
该文档概述了以下内容:
使用链接变量克隆实体是不正当的:实体 A 的变量可能指向另一个实体 B。如果 A 被克隆,那么它的变量必须指向 B 的克隆,而不是原始 B。
因此,如果我们要克隆一个Customer带有计划变量的变量,previousStandstill我们需要执行以下操作:
public Customer safeClone() {
Customer clonedCustomer = new Customer(<CONSTRUCTOR_ARGS>);
if (previousStandstill != null) {
if (previousStandstill instanceof Vehicle) {
clonedCustomer.setPreviousStandstill( ((Vehicle)previousStandstill).safeClone();
} else if (previousStandstill instanceof Customer) {
clonedCustomer.setPreviousStandstill( ((Customer)previousStandstill).safeClone();
}
}
// What to do with shadow variables ?
return clonedCustomer;
}
和Vehicle.safeClone()
Vehicle clonedVehicle = new Vehicle(<CONSTRUCTOR_ARGS>);
// clone shadow variables ?
clonedVehicle.setNextCustomer(customer.safeClone);
但是,上面的示例不起作用,因为克隆的解决方案不再相同。有关如何安全克隆链式规划实体的任何指示?我需要深度克隆它的规划变量吗?以及如何处理影子变量?这些是否也需要深度克隆?
守着星空守着你
相关分类