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

如何在Timefold的Java代码中配置构造启发式与局部搜索?

Timefold求解器Java代码配置:整合构造启发式与局部搜索

问题背景

此前通过solver.xml配置求解器,内容如下:

<constructionHeuristic>
    <constructionHeuristicType>FIRST_FIT</constructionHeuristicType>
</constructionHeuristic>
<localSearch>
    <localSearchType>TABU_SEARCH</localSearchType>
</localSearch>

现在希望改用Timefold的Java代码方式配置求解器,但现有代码中找不到添加构造启发式与局部搜索配置的方法,现有代码如下:

var solverConfig= new SolverConfig()
                .withSolutionClass(EventBinAssignation.class)
                .withEntityClasses(Event.class)
                .withEntityClasses(BinAvailablity.class)
                .withConstraintProviderClass(OptaPlannerConstraintProvider.class)

                // 该求解器在小数据集上仅运行5秒。
                // 否则建议至少运行5分钟("5m")。
                .withTerminationSpentLimit(Duration.ofSeconds(5));

SolverFactory<EventBinAssignation> solverFactory = SolverFactory.create(solverConfig); 

解决方案

你可以通过SolverConfig的withPhaseList()方法添加构造启发式阶段和局部搜索阶段,对应XML中的配置。修改后的代码如下:

var solverConfig= new SolverConfig()
                .withSolutionClass(EventBinAssignation.class)
                .withEntityClasses(Event.class, BinAvailablity.class) // 合并实体类调用,代码更简洁
                .withConstraintProviderClass(OptaPlannerConstraintProvider.class)
                .withTerminationSpentLimit(Duration.ofSeconds(5))
                // 配置求解阶段列表:先执行构造启发式,再执行局部搜索
                .withPhaseList(List.of(
                    new ConstructionHeuristicPhaseConfig()
                        .withConstructionHeuristicType(ConstructionHeuristicType.FIRST_FIT),
                    new LocalSearchPhaseConfig()
                        .withLocalSearchType(LocalSearchType.TABU_SEARCH)
                ));

SolverFactory<EventBinAssignation> solverFactory = SolverFactory.create(solverConfig); 

关键说明

  • withPhaseList()方法用于定义求解器的执行阶段顺序,列表中顺序即为阶段执行顺序
  • ConstructionHeuristicPhaseConfig对应XML中的<constructionHeuristic>节点,通过withConstructionHeuristicType()指定启发式类型
  • LocalSearchPhaseConfig对应XML中的<localSearch>节点,通过withLocalSearchType()指定局部搜索类型
  • 原代码中多次调用withEntityClasses()可合并为一次调用,传入多个实体类参数,简化代码结构

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 08:20:00