OptaPlanner带有链式变量的多个实体类

时间:2017-09-18 20:40:15

标签: java optimization optaplanner

我使用OptaPlanner来解决车辆路径问题的变体,其中车辆所服务的客户的要求差别很大。我有一些最常见的客户类型,并希望使用不同的实体类对它们进行建模。由于单个驱动程序可以使用不同类型,因此它们应该能够形成具有所有类的实例的异构链。

我尝试通过修改VRP示例来进行概念验证。我为所有客户提取了ICustomer这个界面,并更改了Standstill,以便getNextCustomer返回ICustomer。 当我尝试使用Customer和Customer2(客户类的副本)运行它时,两者都实现了ICustomer,我收到了这个错误:

Exception in thread "main" java.lang.IllegalArgumentException: The entityClass 
(interface org.optaplanner.examples.vehiclerouting.domain.Standstill) has a 
InverseRelationShadowVariable annotated property (nextCustomer) with a masterClass 
(interface org.optaplanner.examples.vehiclerouting.domain.ICustomer) which is not a 
valid planning entity.

在最糟糕的情况下,我只会使用枚举和" ifs"来模拟不同的客户类型。在单个计划实体中获得相同的行为。不过,如果我遇到API限制或者有人知道更好的方法来实现这一目标,那将会很棒。谢谢:)

1 个答案:

答案 0 :(得分:2)

OptaPlanner完全支持多态性,类层次结构等。我们对它进行了测试(并且经常发现已经解决的错误 - 最近已经解决了7.3.final IIRC)。另请参见TestDataSolution.java等。当然,欢迎新的复制品作为PR。

这个例外讲述了一个不同的故事。检查您使用@InverseRelationShadowVariable的位置,该字段/方法的返回类型 - 我怀疑您的重构可能没有正确影响该代码。