我已在我的应用程序中将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>
但它会引发异常
java.lang.UnsupportedOperationException:选择器 (DefaultPillarSelector(FromSolutionEntitySelector(MyEntity)))with randomSelection(true)和subPillarEnabled(true)不支持 getSize()因为子支柱的数量呈指数级增长。在 org.optaplanner.core.impl.heuristic.selector.entity.pillar.DefaultPillarSelector.getSize(DefaultPillarSelector.java:180) 在 org.optaplanner.core.impl.heuristic.selector.move.generic.PillarChangeMoveSelector.getSize(PillarChangeMoveSelector.java:73) 在 org.optaplanner.core.impl.heuristic.selector.move.decorator.FilteringMoveSelector.determineBailOutSize(FilteringMoveSelector.java:119) 在 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) 在 org.optaplanner.core.impl.heuristic.selector.move.composite.UnionMoveSelector.iterator(UnionMoveSelector.java:129)
没有过滤器,PillarMove没什么用,因为它会选择所有实体。相比之下,在没有过滤器的情况下启用subPillar对我的用例也没有多大帮助。
optaplanner是否支持使用filterClass支持pillarMove?
答案 0 :(得分:0)
目前不支持。
这是由于一个更普遍的问题,至少在7.6.0之前。最终:选择过滤的bailOut计算使用getSize()
并不总是支持它(它是&#39; s不可能支持支柱运动。)