Optaplanner IllegalArgumentException:valueRangeProviderRef 没有出现在 valueRangeProvideIds 中
Optaplanner IllegalArgumentException: The valueRangeProviderRef does not appear in valueRangeProvideIds
使用规划实体中定义的布尔规划变量为:
@PlanningVariable(nullable = true, valueRangeProviderRefs = {"selectedRange"})
public Boolean getSelected() {
return selected;
}
public void setSelected(Boolean selected) {
this.selected = selected;
}
并且在规划解决方案中我将值范围提供者定义为:
@ValueRangeProvider(id = "selectedRange")
List<Boolean> getValueRange() {
return Arrays.asList(Boolean.FALSE, Boolean.TRUE);
}
public List<Boolean> getBooleanList() {
return selectedList;
}
public void setBooleanList(List<Boolean> selectedList) {
this.selectedList = selectedList;
}
我收到以下错误:
Exception in thread "AWT-EventQueue-0"
java.lang.IllegalArgumentException:
The entityClass
has a PlanningVariable
annotated property (selected)
with a valueRangeProviderRef
(selectedRange) that does not exist on a
registered PlanningSolution
or PlanningEntity
.
The valueRangeProviderRef
(selectedRange) does not appear in
valueRangeProvideIds
([]).
我无法识别问题原因。
通常我会说:您的解决方案 class 在 属性 上遗漏了 @ValueRangeProvider
。但看起来你有它。出于某种原因,当它反映在您的规划解决方案中时,它只是没有接受它 class。
A) 如果您使用的是 6.3.0.Final
或更高版本,您的代码应该可以工作。如果您使用的是旧版本,可能是因为 getValueRange()
方法不是 public(6.3 修复了 IIRC)。
B) 如果 getValueRange()
方法是在 superclass 而不是实际规划解决方案 class 上定义的,那么只有当 superclass 时它才会起作用] 也被称为适当的规划解决方案 class IIRC。
使用规划实体中定义的布尔规划变量为:
@PlanningVariable(nullable = true, valueRangeProviderRefs = {"selectedRange"})
public Boolean getSelected() {
return selected;
}
public void setSelected(Boolean selected) {
this.selected = selected;
}
并且在规划解决方案中我将值范围提供者定义为:
@ValueRangeProvider(id = "selectedRange")
List<Boolean> getValueRange() {
return Arrays.asList(Boolean.FALSE, Boolean.TRUE);
}
public List<Boolean> getBooleanList() {
return selectedList;
}
public void setBooleanList(List<Boolean> selectedList) {
this.selectedList = selectedList;
}
我收到以下错误:
Exception in thread "AWT-EventQueue-0"
java.lang.IllegalArgumentException:The
entityClass
has aPlanningVariable
annotated property (selected) with avalueRangeProviderRef
(selectedRange) that does not exist on a registeredPlanningSolution
orPlanningEntity
.The
valueRangeProviderRef
(selectedRange) does not appear invalueRangeProvideIds
([]).
我无法识别问题原因。
通常我会说:您的解决方案 class 在 属性 上遗漏了 @ValueRangeProvider
。但看起来你有它。出于某种原因,当它反映在您的规划解决方案中时,它只是没有接受它 class。
A) 如果您使用的是 6.3.0.Final
或更高版本,您的代码应该可以工作。如果您使用的是旧版本,可能是因为 getValueRange()
方法不是 public(6.3 修复了 IIRC)。
B) 如果 getValueRange()
方法是在 superclass 而不是实际规划解决方案 class 上定义的,那么只有当 superclass 时它才会起作用] 也被称为适当的规划解决方案 class IIRC。