构造问题 - selectorConfig (EntitySelectorConfig(null)) 没有 entityClass
Construction issue - The selectorConfig (EntitySelectorConfig(null)) has no entityClass
我声明了两个规划实体 运行 和学校,它们有自己的规划变量。在求解器配置中,每个实体都有单独的构造启发式方法,但存在一个问题,即 selectorConfig 没有实体 Class。使用 OptaPlanner 6.2.0。非常感谢任何帮助。
<constructionHeuristic>
<queuedEntityPlacer>
<entitySelector id="placerEntitySelector">
<entityClass>org.optaplanner.examples.cloudbalancing.domain.Run</entityClass>
<cacheType>PHASE</cacheType>
</entitySelector>
<changeMoveSelector>
<entitySelector mimicSelectorRef="placerEntitySelector"/>
</changeMoveSelector>
</queuedEntityPlacer>
</constructionHeuristic>
<constructionHeuristic>
<queuedEntityPlacer>
<entitySelector id="placerEntitySelector">
<entityClass>org.optaplanner.examples.cloudbalancing.domain.School</entityClass>
<cacheType>PHASE</cacheType>
</entitySelector>
<changeMoveSelector>
<entitySelector mimicSelectorRef="placerEntitySelector"/>
</changeMoveSelector>
</queuedEntityPlacer>
</constructionHeuristic>
堆栈跟踪
--- exec-maven-plugin:1.2.1:exec (default-cli) @ optaplanner-examples ---
Exception in thread "main" java.lang.IllegalArgumentException: The selectorConfig (EntitySelectorConfig(null)) has no entityClass (null) configured and because there are multiple in the entityClassSet ([class org.optaplanner.examples.cloudbalancing.domain.Run, class org.optaplanner.examples.cloudbalancing.domain.School]), it can not be deducted automatically.
at org.optaplanner.core.config.heuristic.selector.SelectorConfig.deduceEntityDescriptor(SelectorConfig.java:81)
at org.optaplanner.core.config.heuristic.selector.entity.EntitySelectorConfig.buildEntitySelector(EntitySelectorConfig.java:210)
at org.optaplanner.core.config.heuristic.selector.move.generic.ChangeMoveSelectorConfig.buildBaseMoveSelector(ChangeMoveSelectorConfig.java:64)
at org.optaplanner.core.config.heuristic.selector.move.MoveSelectorConfig.buildMoveSelector(MoveSelectorConfig.java:189)
at org.optaplanner.core.config.heuristic.selector.move.composite.UnionMoveSelectorConfig.buildBaseMoveSelector(UnionMoveSelectorConfig.java:75)
at org.optaplanner.core.config.heuristic.selector.move.MoveSelectorConfig.buildMoveSelector(MoveSelectorConfig.java:189)
at org.optaplanner.core.config.localsearch.LocalSearchPhaseConfig.buildMoveSelector(LocalSearchPhaseConfig.java:143)
at org.optaplanner.core.config.localsearch.LocalSearchPhaseConfig.buildDecider(LocalSearchPhaseConfig.java:108)
at org.optaplanner.core.config.localsearch.LocalSearchPhaseConfig.buildPhase(LocalSearchPhaseConfig.java:93)
at org.optaplanner.core.config.localsearch.LocalSearchPhaseConfig.buildPhase(LocalSearchPhaseConfig.java:46)
at org.optaplanner.core.config.solver.SolverConfig.buildSolver(SolverConfig.java:205)
at org.optaplanner.core.impl.solver.XStreamXmlSolverFactory.buildSolver(XStreamXmlSolverFactory.java:134)
at org.optaplanner.examples.cloudbalancing.app.CloudBalancingHelloWorld.main(CloudBalancingHelloWorld.java:38)
------------------------------------------------------------------------
BUILD FAILURE
这里是移动选择器的定义。工作起来很有魅力。我采用了一种不同的方法来查看是否会比我原来的方法更好。我确实了解到,最佳实体和变量的选择并不总是显而易见的。我从我的原始解决方案中提取了一个粒度变量,并将其替换为一个粗略的实体和变量,该实体和变量无法针对任何 objective 进行增量评分。结果是增量评分规则阻止了课程实体和变量改变状态——并且不可能编写细粒度的评分规则。因此,在定义实体和变量时,它们应该能够支持 granular/incremental 评分。我原来的方法产生了预期的结果。
<localSearch>
<unionMoveSelector>
<changeMoveSelector>
<entitySelector>
<entityClass>org.optaplanner.examples.cloudbalancing.domain.Run</entityClass>
</entitySelector>
<valueSelector>
<variableName>vehicle</variableName>
</valueSelector>
</changeMoveSelector>
<swapMoveSelector>
<entitySelector>
<entityClass>org.optaplanner.examples.cloudbalancing.domain.Run</entityClass>
</entitySelector>
</swapMoveSelector>
<changeMoveSelector>
<entitySelector>
<entityClass>org.optaplanner.examples.cloudbalancing.domain.School</entityClass>
</entitySelector>
<valueSelector>
<variableName>startTime</variableName>
</valueSelector>
</changeMoveSelector>
<swapMoveSelector>
<entitySelector>
<entityClass>org.optaplanner.examples.cloudbalancing.domain.School</entityClass>
</entitySelector>
</swapMoveSelector>
</unionMoveSelector>
...
异常发生在 LocalSearchPhaseConfig.build...()
,而不是 ConstructionHeuristicPhaseCondif.build...()
,所以这是您的 <localSearch>
配置的问题,没有粘贴到这里。
我怀疑你没有在那里配置 moveSelectors 而只是依赖于开箱即用的那些,如果有多个实体 类 或变量(I made a jira for that).
我声明了两个规划实体 运行 和学校,它们有自己的规划变量。在求解器配置中,每个实体都有单独的构造启发式方法,但存在一个问题,即 selectorConfig 没有实体 Class。使用 OptaPlanner 6.2.0。非常感谢任何帮助。
<constructionHeuristic>
<queuedEntityPlacer>
<entitySelector id="placerEntitySelector">
<entityClass>org.optaplanner.examples.cloudbalancing.domain.Run</entityClass>
<cacheType>PHASE</cacheType>
</entitySelector>
<changeMoveSelector>
<entitySelector mimicSelectorRef="placerEntitySelector"/>
</changeMoveSelector>
</queuedEntityPlacer>
</constructionHeuristic>
<constructionHeuristic>
<queuedEntityPlacer>
<entitySelector id="placerEntitySelector">
<entityClass>org.optaplanner.examples.cloudbalancing.domain.School</entityClass>
<cacheType>PHASE</cacheType>
</entitySelector>
<changeMoveSelector>
<entitySelector mimicSelectorRef="placerEntitySelector"/>
</changeMoveSelector>
</queuedEntityPlacer>
</constructionHeuristic>
堆栈跟踪
--- exec-maven-plugin:1.2.1:exec (default-cli) @ optaplanner-examples ---
Exception in thread "main" java.lang.IllegalArgumentException: The selectorConfig (EntitySelectorConfig(null)) has no entityClass (null) configured and because there are multiple in the entityClassSet ([class org.optaplanner.examples.cloudbalancing.domain.Run, class org.optaplanner.examples.cloudbalancing.domain.School]), it can not be deducted automatically.
at org.optaplanner.core.config.heuristic.selector.SelectorConfig.deduceEntityDescriptor(SelectorConfig.java:81)
at org.optaplanner.core.config.heuristic.selector.entity.EntitySelectorConfig.buildEntitySelector(EntitySelectorConfig.java:210)
at org.optaplanner.core.config.heuristic.selector.move.generic.ChangeMoveSelectorConfig.buildBaseMoveSelector(ChangeMoveSelectorConfig.java:64)
at org.optaplanner.core.config.heuristic.selector.move.MoveSelectorConfig.buildMoveSelector(MoveSelectorConfig.java:189)
at org.optaplanner.core.config.heuristic.selector.move.composite.UnionMoveSelectorConfig.buildBaseMoveSelector(UnionMoveSelectorConfig.java:75)
at org.optaplanner.core.config.heuristic.selector.move.MoveSelectorConfig.buildMoveSelector(MoveSelectorConfig.java:189)
at org.optaplanner.core.config.localsearch.LocalSearchPhaseConfig.buildMoveSelector(LocalSearchPhaseConfig.java:143)
at org.optaplanner.core.config.localsearch.LocalSearchPhaseConfig.buildDecider(LocalSearchPhaseConfig.java:108)
at org.optaplanner.core.config.localsearch.LocalSearchPhaseConfig.buildPhase(LocalSearchPhaseConfig.java:93)
at org.optaplanner.core.config.localsearch.LocalSearchPhaseConfig.buildPhase(LocalSearchPhaseConfig.java:46)
at org.optaplanner.core.config.solver.SolverConfig.buildSolver(SolverConfig.java:205)
at org.optaplanner.core.impl.solver.XStreamXmlSolverFactory.buildSolver(XStreamXmlSolverFactory.java:134)
at org.optaplanner.examples.cloudbalancing.app.CloudBalancingHelloWorld.main(CloudBalancingHelloWorld.java:38)
------------------------------------------------------------------------
BUILD FAILURE
这里是移动选择器的定义。工作起来很有魅力。我采用了一种不同的方法来查看是否会比我原来的方法更好。我确实了解到,最佳实体和变量的选择并不总是显而易见的。我从我的原始解决方案中提取了一个粒度变量,并将其替换为一个粗略的实体和变量,该实体和变量无法针对任何 objective 进行增量评分。结果是增量评分规则阻止了课程实体和变量改变状态——并且不可能编写细粒度的评分规则。因此,在定义实体和变量时,它们应该能够支持 granular/incremental 评分。我原来的方法产生了预期的结果。
<localSearch>
<unionMoveSelector>
<changeMoveSelector>
<entitySelector>
<entityClass>org.optaplanner.examples.cloudbalancing.domain.Run</entityClass>
</entitySelector>
<valueSelector>
<variableName>vehicle</variableName>
</valueSelector>
</changeMoveSelector>
<swapMoveSelector>
<entitySelector>
<entityClass>org.optaplanner.examples.cloudbalancing.domain.Run</entityClass>
</entitySelector>
</swapMoveSelector>
<changeMoveSelector>
<entitySelector>
<entityClass>org.optaplanner.examples.cloudbalancing.domain.School</entityClass>
</entitySelector>
<valueSelector>
<variableName>startTime</variableName>
</valueSelector>
</changeMoveSelector>
<swapMoveSelector>
<entitySelector>
<entityClass>org.optaplanner.examples.cloudbalancing.domain.School</entityClass>
</entitySelector>
</swapMoveSelector>
</unionMoveSelector>
...
异常发生在 LocalSearchPhaseConfig.build...()
,而不是 ConstructionHeuristicPhaseCondif.build...()
,所以这是您的 <localSearch>
配置的问题,没有粘贴到这里。
我怀疑你没有在那里配置 moveSelectors 而只是依赖于开箱即用的那些,如果有多个实体 类 或变量(I made a jira for that).