optaplanner: почему не настроен entityClass (null) и потому что в entityClassSet их несколько? - PullRequest
0 голосов
/ 30 января 2020

Я делаю программу производственного графика с optaplanner, у нее есть два объекта планирования, Task & PDItem, как показано ниже:

Привет Команда Optaplanner: я делаю программу производственного графика с optaplanner, у нее есть два планирования сущность, Task & 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;
          }

, но когда я запускаю программу, она отображается следующим образом:

Исключение в потоке "main" java .lang.IllegalArgumentException: Конфигурация (QueuedEntityPlacerConfig (null, null)) не имеет настроенного entityClass (null), и поскольку в entityClassSet есть несколько элементов ([class Planning_v3.Domain.Task, класс Planning_v3.Domain.PDItem]), она не может быть выведена автоматически. в org.optaplanner.core.config. org.optaplanner.core.config.constructionheuristi c .placer.QueuedEntityPlacerConfig.buildEntityPlacer (QueuedEntityPlacerConfig. java: 107) в org.optaplanner.core.config.conng 1020 *: 43) в орг.оптапланнере . java: 51) в org.optaplanner.core.config.solver.SolverConfig.buildPhaseList (SolverConfig. java: 367) в org.optaplanner.core.config.solver.SolverConfig.buildSolver (SolverConfig. * 10). 26 *: 270) в org.optaplanner.core.impl.solver.AbstractSolverFactory.buildSolver (AbstractSolverFactory. java: 61) в Planning_v3.APP.PlanningAPP3.main (PlanningAPP3. java: 47)

Пожалуйста, сообщите вашу помощь! Большое спасибо!

Пожалуйста, сообщите вашу помощь! Большое спасибо!

1 Ответ

2 голосов
/ 30 января 2020

В настоящее время у вас есть 2 класса с аннотацией @PlanningEntity, которые также имеют хотя бы одну подлинную @PlanningVariable (! = Теневая переменная). Таким образом, у вас есть 2 подлинных класса планирующих объектов (теневые объекты не учитываются).

Это очень редко. В большинстве случаев, если вы разрабатываете хорошую модель, следуйте рекомендациям этот раздел в документах , вы не получите в итоге 2 класса подлинных планирующих сущностей и избавите себя от большой боли.

При этом существуют случаи, для которых это имеет смысл. (На первый взгляд, ваш случай, похоже, не относится к числу таких, сначала прочтите это руководство):

  • Некоторые пользователи все еще избегают его, используя многоступенчатое планирование - но чаще всего это связано с тем, как компания структурирована (см. закон Конвея), и начинать с простого проекта.
  • Но если у вас есть 2 подлинных объекта планирования, это хорошо для OptaPlanner. Но алгоритмы должны быть отрегулированы, как объяснено в этой главе .
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...