我在我的应用程序中将pillarMove配置为:
<pillarChangeMoveSelector>
<pillarSelector>
<entitySelector>
<entityClass>com.X.Y.Z.MyEntity</entityClass>
<cacheType>STEP</cacheType>
</entitySelector>
<subPillarEnabled>true</subPillarEnabled>
<minimumSubPillarSize>1</minimumSubPillarSize>
<maximumSubPillarSize>40</maximumSubPillarSize>
</pillarSelector>
<valueSelector variableName="variable">
</valueSelector>
<filterClass>com.X.Y.Z.MyEntityPillarMoveFilter</filterClass>
</pillarChangeMoveSelector>但它会抛出异常
(DefaultPillarSelector(FromSolutionEntitySelector(MyEntity))):带有randomSelection (真)和subPillarEnabled (真)的选择器randomSelection(真)不支持getSize(),因为子支柱的数量呈指数增长。在org.optaplanner.core.impl.heuristic.selector.entity.pillar.DefaultPillarSelector.getSize(DefaultPillarSelector.java:180) at org.optaplanner.core.impl.heuristic.selector.move.generic.PillarChangeMoveSelector.getSize(PillarChangeMoveSelector.java:73) at org.optaplanner.core.impl.heuristic.selector.move.decorator.FilteringMoveSelector.determineBailOutSize(FilteringMoveSelector.java:119) at org.optaplanner.core.impl.heuristic.selector.move.decorator.FilteringMoveSelector.iterator(FilteringMoveSelector.java:78)在org.optaplanner.core.impl.heuristic.selector.move.composite.UnionMoveSelector$RandomUnionMoveIterator.(UnionMoveSelector.java:144) at org.optaplanner.core.impl.heuristic.selector.move.composite.UnionMoveSelector.iterator(UnionMoveSelector.java:129)
如果没有过滤器,PillarMove就没有多大用处,因为它将选择所有实体。相反,在我的用例中,在没有过滤器的情况下启用subPillar也没有多大帮助。
optaplanner支持pillarMove和filterClass吗?
发布于 2018-02-01 08:14:54
目前不支持。
这是由于一个更普遍的问题,至少在7.6.0之前是如此:选择过滤的bailOut计算使用的getSize()并不总是受支持的(不可能支持柱柱移动)。
https://stackoverflow.com/questions/48521562
复制相似问题