OptaPlanner 7.24.0能否分阶段设置线程数:构造启发式单线程、局部搜索多线程?
OptaPlanner 7.24.0 分阶段线程数配置方案
在OptaPlanner 7.24.0中,完全可以实现构造启发式单线程、局部搜索多线程的线程配置需求,以下是具体实现方式:
配置方式
1. XML配置文件方式
在Solver配置的<constructionHeuristic>标签中显式设置单线程,在<localSearch>标签中指定目标线程数(比如4线程):
<solver> <!-- 其他全局配置,如终止条件、评分器等 --> <constructionHeuristic> <threadCount>1</threadCount> <!-- 构造启发式的其他配置,比如算法类型选择等 --> </constructionHeuristic> <localSearch> <threadCount>4</threadCount> <!-- 局部搜索的其他配置,比如接受机制、邻域策略等 --> </localSearch> </solver>
2. Java API方式
如果通过代码动态配置Solver,可分别为两个阶段单独设置线程数:
SolverFactory<YourSolution> solverFactory = SolverFactory.createFromXmlResource("yourSolverConfig.xml"); SolverConfig solverConfig = solverFactory.getSolverConfig(); // 配置构造启发式单线程 ConstructionHeuristicPhaseConfig chPhaseConfig = new ConstructionHeuristicPhaseConfig(); chPhaseConfig.setThreadCount(1); // 可补充构造启发式的其他参数,如指定算法类型 // chPhaseConfig.setConstructionHeuristicType(ConstructionHeuristicType.FIRST_FIT); // 配置局部搜索4线程 LocalSearchPhaseConfig lsPhaseConfig = new LocalSearchPhaseConfig(); lsPhaseConfig.setThreadCount(4); // 可补充局部搜索的其他参数,如指定搜索类型 // lsPhaseConfig.setLocalSearchType(LocalSearchType.LATE_ACCEPTANCE); solverConfig.setPhaseConfigList(Arrays.asList(chPhaseConfig, lsPhaseConfig)); Solver<YourSolution> solver = solverFactory.buildSolver();
关于构造启发式线程数影响结果的说明
构造启发式在多线程模式下,因线程执行顺序的不确定性,会导致每次生成的初始解存在差异,这是正常的多线程执行特性。而单线程模式下算法执行顺序固定,因此每次运行结果一致,与你的观察完全相符。
内容的提问来源于stack exchange,提问作者sindeaf
相关产品推荐
相关产品推荐

