7.2. solver 环境模式


solver 环境模式允许您检测实施中的常见错误。它不会影响日志级别。

一个 solver 有一个随机实例。有些 solver 配置使用随机实例,它比其他任何一个实例更多。例如,Simulated Annealing 算法高度依赖于随机数字,而 Tabu Search 仅依赖于它来解决分数绑定。环境模式会影响该随机实例的 seed。

您可以在 solver 配置 XML 文件中设置环境模式。以下示例设定 FAST_ASSERT 模式:

<solver xmlns="https://www.optaplanner.org/xsd/solver" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="https://www.optaplanner.org/xsd/solver https://www.optaplanner.org/xsd/solver/solver.xsd">
  <environmentMode>FAST_ASSERT</environmentMode>
  ...
</solver>
Copy to Clipboard Toggle word wrap

以下列表描述了您可以在 solver 配置文件中使用的环境模式:

  • FULL_ASSERT 模式会打开所有断言,例如,每个移动分数计算未修正的断言,以及移动实施、约束、引擎本身等错误时失败。这个模式可以重现。它也是入侵的,因为它调用方法的 calculateScore () 频率高于非assert 模式。FULL_ASSERT 模式非常慢,因为它不依赖于增量分数计算。
  • NON_INTRUSIVE_FULL_ASSERT 模式将开启几个断言,在移动实施中的错误、约束、引擎本身等错误上快速失败。这个模式可以重现。它不是非入侵模式,因为它不会更频繁地调用方法 calculateScore ()NON_INTRUSIVE_FULL_ASSERT 模式非常慢,因为它不依赖于增量分数计算。
  • FAST_ASSERT 模式开启大多数断言,如 undoMove 的分数与在 Move 之前的断言相同,在移动实施、约束、引擎本身等错误时失败。这个模式可以重现。它也是入侵的,因为它调用方法的 calculateScore () 频率高于非assert 模式。FAST_ASSERT 模式较慢。编写一个测试案例,它会在 FAST_ASSERT 模式下短暂运行您的计划问题。
  • REPRODUCIBLE 模式是默认模式,因为它在开发过程中推荐使用。在这个模式中,两个以同一 OptaPlanner 版本运行,按照相同的顺序执行相同的代码。这两个运行在每个步骤中都有相同的结果,除非有以下备注。这可让您一致地重现错误。它还允许您对某些重构进行基准测试,如分数约束性能优化。

    注意

    虽然使用 REPRODCIBLE 模式,但出于以下原因,您的应用程序可能仍无法完全可重复生成:

    • 使用 HashSet其他集合 (在 JVM 运行之间具有不一致的顺序)用于规划实体或计划值的集合,特别是在解决方案实现中。使用 LinkedHashSet 替换它。
    • 合并了时间的依赖算法,特别是 Simated Annealing 算法以及时间终止。分配的 CPU 时间有足够大的区别会影响时间逐步值。使用 Late Acceptance 算法替换 Simulated Annealing 算法,或者将终止时间替换为 step count termination。
  • REPRODUCIBLE 模式可能比 NON_REPRODUCIBLE 模式稍慢。如果您的生产环境可从可重复性中受益,请在生产中使用此模式。在实践中,如果未指定 seed,则 REPRODUCIBLE 模式使用默认的固定随机 seed,同时禁用某些并发优化,如 work stealing。
  • NON_REPRODUCIBLE 模式比 REPRODUCIBLE 模式稍快。避免在开发过程中使用它,因为它使调试和程序错误修复非常困难。如果您的生产环境中的可重复性不重要,请在生产中使用 NON_REPRODUCIBLE 模式。实际上,如果没有指定 seed,则此模式不使用固定随机的 seed。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat