You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OptaPlanner构造启发式阶段配置selectionFilter报错求助

构造启发式(CH)阶段添加实体过滤器的正确配置方式

你遇到的问题核心是:构造启发式(CH)的实体放置逻辑和局部搜索完全不同,直接在<constructionHeuristic>下嵌套<changeMoveSelector>会打破CH默认的实体放置流程,必须在CH的实体 placer 中配置过滤器,而不是用局部搜索的moveSelector方式。

错误原因解析

错误提示里的<queuedEntityPlacer>是CH阶段用于控制实体放置顺序的核心组件,当你显式定义了entitySelector却没指定对应的placer时,求解器无法确定实体的放置逻辑,因此启动失败。而局部搜索阶段changeMoveSelector是用来生成移动操作的,和CH的实体初始化逻辑不兼容。

正确配置示例

针对你的FIRST_FIT构造启发式,需要显式配置queuedEntityPlacer,并在其内部的entitySelector中添加过滤器:

<constructionHeuristic>
    <!-- 显式指定CH类型 -->
    <constructionHeuristicType>FIRST_FIT</constructionHeuristicType>
    <!-- 配置实体 placer,这是CH阶段过滤实体的正确位置 -->
    <queuedEntityPlacer>
        <entitySelector>
            <!-- 在这里添加你的过滤器类 -->
            <filterClass>org.example.entity.ShiftFilter</filterClass>
        </entitySelector>
    </queuedEntityPlacer>
</constructionHeuristic>

额外说明

  • 如果需要更复杂的CH配置(比如结合不同的 placer 或排序逻辑),可以去掉<constructionHeuristicType>,直接用<queuedEntityPlacer>和<valueSelector>自定义整个CH流程,但对于FIRST_FIT这种内置类型,上面的配置足够满足过滤需求。
  • 确保你的ShiftFilter类实现了EntitySelectorFilter接口,并且能正确处理CH阶段的未初始化实体(CH阶段实体是逐步被分配的,过滤逻辑要适配这个场景)。

内容的提问来源于stack exchange,提问作者sicario_23

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 16:05:21