过了一段时间,我又开始做一个使用 Optaplanner 8.20 的副项目了。
由于我们现在处于 V8.42(或带有 quakus 3/java17 的 9.42),我尝试将应用程序升级到最新版本(我很想使用 quarkus 3),但遇到了多个问题。
其中之一是导致性能大幅下降。
特定数据集上的计算分数过去是这样的(optaplanner v8.24.1.Final):
2023-08-10 15:28:44,678 INFO [io.fde.pla.bac.sol.ser.sch.SolverService] (executor-thread-0) running schedule problem febd43c7-54ae-4a9e-aea6-05e52ef8a175
2023-08-10 15:28:44,781 INFO [org.opt.cor.imp.sol.DefaultSolver] (pool-10-thread-1) Solving started: time spent (92), best score (-2544hard/-1116medium/0soft), environment mode (REPRODUCIBLE), move thread count (NONE), random (JDK with seed 0).
2023-08-10 15:28:47,842 INFO [org.opt.cor.imp.con.DefaultConstructionHeuristicPhase] (pool-10-thread-1) Construction Heuristic phase (0) ended: time spent (3153), best score (-1569hard/-682medium/-2314921soft), score calculation speed (25529/sec), step total (1116).
2023-08-10 15:28:47,843 INFO [io ... thread-1)) -1569hard/-682medium/-2314921soft
2023-08-10 15:28:48,210 INFO [io ... thread-1) -1520hard/-698medium/-2266062soft
2023-08-10 15:28:50,369 INFO [io ... thread-1) -1201hard/-762medium/-2057769soft
2023-08-10 15:28:52,706 INFO [io ... thread-1) -904hard/-808medium/-1914728soft
2023-08-10 15:28:55,170 INFO [io ... thread-1) -685hard/-818medium/-2005894soft
2023-08-10 15:28:56,964 INFO [io ... thread-1) -567hard/-827medium/-1899323soft
2023-08-10 15:28:58,717 INFO [io ... thread-1) -485hard/-831medium/-2032438soft
2023-08-10 15:29:00,482 INFO [io ... thread-1) -409hard/-833medium/-1994180soft
2023-08-10 15:29:02,220 INFO [io ... thread-1) -350hard/-830medium/-1949107soft
2023-08-10 15:29:03,913 INFO [io ... thread-1) -303hard/-831medium/-1908639soft
2023-08-10 15:29:05,689 INFO [io ... thread-1) -263hard/-835medium/-1944460soft
2023-08-10 15:29:07,442 INFO [io ... thread-1) -210hard/-836medium/-2005530soft
2023-08-10 15:29:09,693 INFO [io ... thread-1) -186hard/-833medium/-1966828soft
2023-08-10 15:29:11,538 INFO [io ... thread-1) -155hard/-833medium/-1953647soft
2023-08-10 15:29:13,601 INFO [io ... thread-1) -139hard/-826medium/-2065612soft
2023-08-10 15:29:15,684 INFO [io ... thread-1) -120hard/-829medium/-2059968soft
2023-08-10 15:29:17,603 INFO [io ... thread-1) -106hard/-840medium/-1835454soft
2023-08-10 15:29:19,450 INFO [io ... thread-1) -96hard/-823medium/-2125307soft
...
升级到 8.25(或更高版本,例如我尝试使用 8.42)后,我得到了:
2023-08-10 15:31:17,032 INFO [io.fde.pla.bac.sol.ser.sch.SolverService] (executor-thread-0) running schedule problem a164dcde-393f-42e2-a2e3-c19b967b12f5
2023-08-10 15:31:17,140 INFO [org.opt.cor.imp.sol.DefaultSolver] (pool-10-thread-1) Solving started: time spent (96), best score (-2544hard/-1116medium/0soft), environment mode (REPRODUCIBLE), move thread count (NONE), random (JDK with seed 0).
2023-08-10 15:31:20,343 INFO [org.opt.cor.imp.con.DefaultConstructionHeuristicPhase] (pool-10-thread-1) Construction Heuristic phase (0) ended: time spent (3298), best score (-1569hard/-682medium/-2314921soft), score calculation speed (24405/sec), step total (1116).
2023-08-10 15:31:20,343 INFO [io ... thread-1) -1569hard/-682medium/-2314921soft
2023-08-10 15:31:20,856 INFO [io ... thread-1) -1569hard/-682medium/-2314603soft
2023-08-10 15:31:23,609 INFO [io ... thread-1) -1569hard/-682medium/-2307795soft
2023-08-10 15:31:25,961 INFO [io ... thread-1) -1569hard/-682medium/-2303770soft
2023-08-10 15:31:28,604 INFO [io ... thread-1) -1569hard/-682medium/-2301149soft
2023-08-10 15:31:32,712 INFO [io ... thread-1) -1569hard/-682medium/-2301060soft
2023-08-10 15:31:35,349 INFO [io ... thread-1) -1569hard/-682medium/-2296655soft
2023-08-10 15:31:38,208 INFO [io ... thread-1) -1569hard/-681medium/-2313953soft
2023-08-10 15:31:51,813 INFO [io ... thread-1) -1569hard/-680medium/-2351427soft
2023-08-10 15:32:17,974 INFO [io ... thread-1) -1569hard/-679medium/-2550884soft
2023-08-10 15:32:20,601 INFO [io ... thread-1) -1569hard/-679medium/-2545967soft
2023-08-10 15:32:23,293 INFO [io ... thread-1) -1569hard/-679medium/-2535134soft
2023-08-10 15:32:45,319 INFO [io ... thread-1) -1569hard/-678medium/-2607937soft
2023-08-10 15:32:48,158 INFO [io ... thread-1) -1569hard/-678medium/-2600937soft
2023-08-10 15:32:50,932 INFO [io ... thread-1) -1569hard/-678medium/-2578577soft
2023-08-10 15:33:47,104 INFO [io ... thread-1) -1569hard/-678medium/-2543732soft
2023-08-10 15:33:53,129 INFO [io ... thread-1) -1569hard/-678medium/-2542668soft
...
我找不到有关 8.25 optaplanner 版本的任何更改日志。
您知道从哪里开始看吗?
我想这与求解器尝试优化问题所使用的方法有关,但是......我不能说为什么。
我正在考虑迁移到 timefold 1.0,但我需要首先在我的应用程序上修复这个主要的性能下降问题
来自您之前的日志:
2023-08-10 15:28:47,842 INFO [org.opt.cor.imp.con.DefaultConstructionHeuristicPhase] (pool-10-thread-1) Construction Heuristic phase (0) ended: ..., score calculation speed (25529/sec), ...
来自您的后续日志:
2023-08-10 15:31:20,343 INFO [org.opt.cor.imp.con.DefaultConstructionHeuristicPhase] (pool-10-thread-1) Construction Heuristic phase (0) ended: ... score calculation speed (24405/sec) ...
这2个分数计算速度相似。您是否发现“解决结束”的分数计算速度有差异?
需要检查的事项:
要做的事情:
尝试 optaplanner 8.38。我还没有尝试过 8.42,drools 的变化对 optaplanner 每月发布的 automatic 版本产生性能影响并不是不可理解的。
尝试时间折叠 0.8 或 1.0。 运行这些指令需要 2 分钟。 它不使用 drools,并且团队已经验证了每个版本的质量。 Timefold 开箱即用比 OptaPlanner 快得多。