Routing 需要链式变量的超类/接口信息

Routing 需要链式变量的超类/接口信息,routing,optaplanner,chained,Routing,Optaplanner,Chained,对于车辆路径问题,我删除了接口(即停止)并修改了解算器配置(即vehicleRoutingSolverConfig.xml),以将停止entityClass替换为车辆entityClass。还对代码进行了其他更改 但是,我在尝试运行解算器时遇到以下异常 线程“main”java.lang.IllegalArgumentException中的异常:entityClass(类org.optaplanner.examples.vehiclerouting.domain.Customer)有一个带有链接

对于车辆路径问题,我删除了接口(即停止)并修改了解算器配置(即vehicleRoutingSolverConfig.xml),以将停止entityClass替换为车辆entityClass。还对代码进行了其他更改

但是,我在尝试运行解算器时遇到以下异常

线程“main”java.lang.IllegalArgumentException中的异常:entityClass(类org.optaplanner.examples.vehiclerouting.domain.Customer)有一个带有链接(true)和属性类型(类org.optaplanner.examples.vehiclerouting.domain.Vehicle)的PlanningVariable注释属性(previousVehicle)它不是entityClass(类org.optaplanner.examples.VehiclerRouting.domain.Customer)的超类/接口或与entityClass(类org.optaplanner.examples.VehiclerRouting.domain.Customer)相同


我试图理解,为什么optaPlanner要求在另一个实体类(即客户类型)中引用的链变量(即车辆类型)具有相同的超类/接口。

请参阅关于链变量的文档。链式变量有许多内置规范:

  • 每个链正好有1个锚点和0到n个实体(按顺序)
  • 每个实体都指向前一个实体xor锚点,因此链被建模为链表
应用这两个规范,实体(如
客户
)和锚点(如
车辆
)需要一个公共接口(如
静止
),否则
实体.getPreviousInChain()
计划变量返回什么类型?两者都可以

至于你得到的错误:它说在那个模型中,一个实体不可能指向另一个实体,所以链不可能超过一个实体