首页 > 解决方案 > OptaPlanner,Score计算速度会太低

问题描述

运行我的 optaplanner 项目并得到以下输出。好像有两个问题。这些输出是什么意思?第一个是

Score calculation speed will be too low because move thread ({})'s destroy wasn't processed soon enough.

另一个是

ERROR 603112 --- [pool-1-thread-3] o.o.core.impl.solver.thread.ThreadUtils  : Multithreaded Local Search's ExecutorService didn't terminate within timeout (1 seconds).

包含错误的输出在这里

application.properties 是从某处复制的,不太了解。文件是这样的:

spring.datasource.url=jdbc:h2:mem:fedb;DB_CLOSE_DELAY=-1
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
logging.level.root=INFO
logging.level.org.springframework=INFO
logging.level.org.drools=INFO
logging.level.org.optaplanner.core=INFO
optaplanner.solver.termination.spent-limit=2s
optaplanner.solver.move-thread-count=10
optaplanner.solver.environment-mode=NON_REPRODUCIBLE
spring.servlet.multipart.max-file-size=500MB
spring.servlet.multipart.max-request-size=500MB
server.port=8090

回答 Geoffrey 的问题:使用 Java 1.8.0_241,OptaPlanner optaplanner-bom 7.59.0.Final。终止时间设置为 2 秒,应用程序会按时退出并提供有效的解决方案。昨天的错误输出可以一直重现,但今天完全没有错误,没有代码更改。真的很奇怪。今天的输出就到这里了。我觉得我应该删帖。

标签: optaplanner

解决方案


除了 Geoffrey 的回答之外,我还想从您提供的日志中再指出一件事:

 The resolvedMoveThreadCount (10) is higher than the availableProcessorCount (8), which is counter-efficient.

您似乎过度扩展了您的机器。所有这些上下文切换可能会使您的求解器陷入停顿。

此外,我相信当前的最佳实践是不要超过 4 个移动线程,因为求解器可能无论如何都不会超过那个。


推荐阅读