optaplanner:为什么没有配置entityClass(null)并且entityClass集中有多个entityClass?

optaplanner:为什么没有配置entityClass(null)并且entityClass集中有多个entityClass?,optaplanner,Optaplanner,我正在使用optaplanner执行生产计划,它有两个计划实体,任务和PDItem,如下所示: @PlanningEntity(difficultyComparatorClass = TaskDifficultyComparator.class) public class Task { private Integer waitting_time; //planning variable @PlanningVariable(valueRangeProviderRefs = {

我正在使用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;
          }
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来说是很好的。但是,算法也需要进行强大的调整