计划变量不支持收集

时间:2020-10-21 15:45:25

标签: optaplanner

我有一个问题,一个订单有很多工艺品,其中一件工艺品需要两个或多个人才能完成,所以在计划实体中,我使用一个列表对象来计划变量,但是当我启动应用程序时,它有一个错误,请给我一些想法,谢谢!

@PlanningSolution
public class ScheduleSolution extends AbstractPersistable {
@ProblemFactCollectionProperty
private List<Order> orderList;
@ProblemFactCollectionProperty
private List<ProductBom> productBomList;
@PlanningEntityCollectionProperty
private List<JobAssignment> jobAssignmentList;
@ProblemFactCollectionProperty
@ValueRangeProvider(id = "resourceRange")
List<Resource> resourceList;
@PlanningScore
private HardSoftScore score;
}

@PlanningEntity
public class JobAssignment extends AbstractPersistable {
private ProductBom productBom;
@PlanningVariable(valueRangeProviderRefs = { "resourceRange" })
private List<Resource> resourceList;
}

由以下原因引起:java.lang.IllegalArgumentException:entityClass(com.demo.domain.reassign.JobAssignment类)具有一个PlanningVariable注释属性(resourceList),该属性引用了ValueRangeProvider注释成员(字段java.util.List com。 demo.domain.reassign.ScheduleSolution.resourceList)返回具有类型(类com.demo.domain.reassign.Resource)的元素的Collection,该元素不能分配给PlanningVariable的类型(接口java.util.List)。在org.optaplanner.core.impl.domain.valuerange.descriptor.AbstractFromPropertyValueRangeDescriptor.processValueRangeProviderAnnotation(AbstractFromPropertyValueRangeDescriptor.java:136)

1 个答案:

答案 0 :(得分:0)

@PlanningVariable不能是列表,除非有一天我们支持@PlanningVariableCollection。可能的解决方法:

@PlanningEntity
public class JobAssignment extends AbstractPersistable {
private ProductBom productBom;
@PlanningVariable(valueRangeProviderRefs = { "resourceRange" })
private Resource resource;
}