optaplanner:为什么没有配置entityClass(null)并且entityClass集中有多个entityClass?
我正在使用optaplanner执行生产计划,它有两个计划实体,任务和PDItem,如下所示:optaplanner:为什么没有配置entityClass(null)并且entityClass集中有多个entityClass?,optaplanner,Optaplanner,我正在使用optaplanner执行生产计划,它有两个计划实体,任务和PDItem,如下所示: @PlanningEntity(difficultyComparatorClass = TaskDifficultyComparator.class) public class Task { private Integer waitting_time; //planning variable @PlanningVariable(valueRangeProviderRefs = {
@PlanningEntity(difficultyComparatorClass = TaskDifficultyComparator.class)
public class Task {
private Integer waitting_time; //planning variable
@PlanningVariable(valueRangeProviderRefs = {"wtRange"})
public Integer getWaitting_time() {
return waitting_time;
}
@ValueRangeProvider(id = "wtRange")
public CountableValueRange<Integer> WaitTimeRange_v2() {
return ValueRangeFactory.createIntValueRange(this.searchRangeDown,this.searchRange+1);
}
@PlanningEntity(difficultyComparatorClass = TaskDifficultyComparator.class)
public class PDItem {
private DyeMachineType machine_type; //planning variable
@PlanningVariable(valueRangeProviderRefs = {"macRange"})
public DyeMachineType getMachine_type() {
return machine_type;
}
@ValueRangeProvider(id = "macRange")
public ArrayList<DyeMachineType> getDyemachinetype_list() {
return this.dyemachinetype_list;
}
Hi Optaplanner团队:
我正在使用optaplanner执行生产计划,它有两个计划实体,任务和PDItem,如下所示:
@PlanningEntity(difficultyComparatorClass = TaskDifficultyComparator.class)
public class Task {
private Integer waitting_time; //planning variable
@PlanningVariable(valueRangeProviderRefs = {"wtRange"})
public Integer getWaitting_time() {
return waitting_time;
}
@ValueRangeProvider(id = "wtRange")
public CountableValueRange<Integer> WaitTimeRange_v2() {
return ValueRangeFactory.createIntValueRange(this.searchRangeDown,this.searchRange+1);
}
@PlanningEntity(difficultyComparatorClass = TaskDifficultyComparator.class)
public class PDItem {
private DyeMachineType machine_type; //planning variable
@PlanningVariable(valueRangeProviderRefs = {"macRange"})
public DyeMachineType getMachine_type() {
return machine_type;
}
@ValueRangeProvider(id = "macRange")
public ArrayList<DyeMachineType> getDyemachinetype_list() {
return this.dyemachinetype_list;
}
@PlanningEntity(难易比较类=任务难易比较类)
公开课任务{
私有整数waiting_time;//计划变量
@规划变量(valueRangeProviderRefs={“wtRange”})
公共整数GetWaiting_time(){
返回等待时间;
}
@ValueRangeProvider(id=“wtRange”)
public CountableValueRange WaitTimeRange_v2(){
返回ValueRangeFactory.createIntValueRange(this.searchRangeDown,this.searchRange+1);
}
@规划实体(困难比较类=任务困难比较类)
公共类PDItem{
私有DyeMachineType机器\u type;//计划变量
@规划变量(valueRangeProviderRefs={“macRange”})
公共染色机类型getMachine_type(){
返回机_型;
}
@ValueRangeProvider(id=“macRange”)
公共阵列列表getDyemachinetype_列表(){
返回此.dyemachinetype\u列表;
}
但当我启动程序时,它显示如下:
@PlanningEntity(difficultyComparatorClass = TaskDifficultyComparator.class)
public class Task {
private Integer waitting_time; //planning variable
@PlanningVariable(valueRangeProviderRefs = {"wtRange"})
public Integer getWaitting_time() {
return waitting_time;
}
@ValueRangeProvider(id = "wtRange")
public CountableValueRange<Integer> WaitTimeRange_v2() {
return ValueRangeFactory.createIntValueRange(this.searchRangeDown,this.searchRange+1);
}
@PlanningEntity(difficultyComparatorClass = TaskDifficultyComparator.class)
public class PDItem {
private DyeMachineType machine_type; //planning variable
@PlanningVariable(valueRangeProviderRefs = {"macRange"})
public DyeMachineType getMachine_type() {
return machine_type;
}
@ValueRangeProvider(id = "macRange")
public ArrayList<DyeMachineType> getDyemachinetype_list() {
return this.dyemachinetype_list;
}
线程“main”java.lang.IllegalArgumentException中的异常:配置(QueuedEntityPlacerConfig(null,null))未配置entityClass(null),并且由于entityClassSet([class Planning_v3.Domain.Task,class Planning_v3.Domain.PDItem])中存在多个entityClass([class Planning_v3.Domain.Task,class Planning_v3.Domain.PDItem]),因此无法自动推断。
位于org.optaplanner.core.config.AbstractConfig.DescellentityDescriptor(AbstractConfig.java:86)
在org.optaplanner.core.config.constructionheuristic.placer.QueuedEntityPlacerConfig.buildEntitySelectorConfig(QueuedEntityPlacerConfig.java:144)上
位于org.optaplanner.core.config.constructionheuristic.placer.QueuedEntityPlacerConfig.buildEntityPlacer(QueuedEntityPlacerConfig.java:107)
位于org.optaplanner.core.config.constructionheuristic.placer.QueuedEntityPlacerConfig.buildEntityPlacer(QueuedEntityPlacerConfig.java:43)
在org.optaplanner.core.config.constructionheuristic.ConstructionHeuristicPhaseConfig.buildPhase(ConstructionHeuristicPhaseConfig.java:166)
位于org.optaplanner.core.config.constructionheuristic.constructionheuristicsphaseConfig.buildPhase(constructionheuristicsphaseConfig.java:51)
位于org.optaplanner.core.config.solver.SolverConfig.buildPhaseList(SolverConfig.java:367)
位于org.optaplanner.core.config.solver.SolverConfig.buildSolver(SolverConfig.java:270)
位于org.optaplanner.core.impl.solver.AbstractSolverFactory.buildSolver(AbstractSolverFactory.java:61)
在Planning_v3.APP.PlanningAPP3.main上(PlanningAPP3.java:47)
请帮忙!非常感谢
请告知您的帮助!非常感谢!您当前有两个类带有
@PlanningEntity
注释,并且至少有一个真正的@PlanningVariable
(!=影子变量)。因此您有两个真正的规划实体类(影子实体不计算)
这是非常罕见的。在大多数情况下,如果您按照的指导原则设计了一个好的模型,您将不会得到两个真正的规划实体类,从而省去了很多麻烦
尽管如此,还是有一些案例是有道理的。(乍一看,你的案例似乎不是其中之一,请先阅读该指南):
- 一些用户仍然通过多阶段规划来避免这种情况——但这通常更多地是因为公司的结构(见康威定律)以及从一个简单的项目开始
- 但是如果你有两个真正的规划实体,这对OptaPlanner来说是很好的。但是,算法也需要进行强大的调整
@PlanningEntity
注释,并且至少有一个真正的@PlanningVariable
(!=影子变量)。因此您有两个真正的规划实体类(影子实体不计算)
这是非常罕见的。在大多数情况下,如果您按照的指导原则设计了一个好的模型,您将不会得到两个真正的规划实体类,从而省去了很多麻烦
尽管如此,还是有一些案例是有道理的。(乍一看,你的案例似乎不是其中之一,请先阅读该指南):
- 一些用户仍然通过多阶段规划来避免这种情况——但这通常更多地是因为公司的结构(见康威定律)以及从一个简单的项目开始
- 但是如果你有两个真正的规划实体,这对OptaPlanner来说是很好的。但是,算法也需要进行强大的调整