Optaplanner使用filterClass抛出了pillarmove的异常

时间:2018-01-30 12:31:36

标签: java optaplanner

我已在我的应用程序中将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?

1 个答案:

答案 0 :(得分:0)

目前不支持。

这是由于一个更普遍的问题,至少在7.6.0之前。最终:选择过滤的bailOut计算使用getSize()并不总是支持它(它是&#39; s不可能支持支柱运动。)